[oe-commits] [meta-openembedded] 46/47: sip: Fix packaging so python module ends up in the right place.

git at git.openembedded.org git at git.openembedded.org
Tue Sep 25 16:19:28 UTC 2018


This is an automated email from the git hooks/post-receive script.

khem pushed a commit to branch master-next
in repository meta-openembedded.

commit b82388509c68df69cc0e0199774be6a51641df01
Author: Philip Balister <philip at balister.org>
AuthorDate: Mon Sep 24 20:39:41 2018 -0400

    sip: Fix packaging so python module ends up in the right place.
    
    * The patch is generated by diffing the last release with the sip Hg
       repo tip. Also have to run the build script to update configure.py.
    
    Signed-off-by: Philip Balister <philip at balister.org>
---
 meta-oe/recipes-devtools/sip/files/sip.patch | 31325 ++++++++++++++++++++++++-
 1 file changed, 31320 insertions(+), 5 deletions(-)

diff --git a/meta-oe/recipes-devtools/sip/files/sip.patch b/meta-oe/recipes-devtools/sip/files/sip.patch
index 78100fc..c126bee 100644
--- a/meta-oe/recipes-devtools/sip/files/sip.patch
+++ b/meta-oe/recipes-devtools/sip/files/sip.patch
@@ -1,16 +1,31331 @@
-diff -Nurd ./sip-4.19.12.orig/configure.py sip-4.19.12/configure.py
+diff -Nurd '--exclude=doc' '--exclude=.hg*' ./sip-4.19.12.orig/build.py sip/build.py
+--- ./sip-4.19.12.orig/build.py	1969-12-31 19:00:00.000000000 -0500
++++ sip/build.py	2018-09-18 17:52:23.269544132 -0400
+@@ -0,0 +1,131 @@
++#!/usr/bin/python
++
++# Copyright (c) 2018 Riverbank Computing Limited <info at riverbankcomputing.com>
++#
++# This file is part of SIP.
++#
++# This copy of SIP is licensed for use under the terms of the SIP License
++# Agreement.  See the file LICENSE for more details.
++#
++# This copy of SIP may also used under the terms of the GNU General Public
++# License v2 or v3 as published by the Free Software Foundation which can be
++# found in the files LICENSE-GPL2 and LICENSE-GPL3 included in this package.
++#
++# SIP is supplied WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
++
++
++"""This script prepares a repository copy of SIP for building.  It should be
++run from a Mercurial repository.  It is not part of a packaged release.
++"""
++
++
++import os
++import sys
++
++
++# Dummy version numbers.
++RM_HEXVERSION = '04ffff'
++RM_RELEASE = '4.255.255'
++
++
++def _progress(message, quiet):
++    """ Show a progress message to the user. """
++
++    if not quiet:
++        sys.stdout.write(message)
++        sys.stdout.write("\n")
++
++
++def _patch(name, quiet):
++    """ Patch a file with version information. """
++
++    _progress("Creating %s" % name, quiet)
++
++    patched_f = open(name + '.in')
++    patched = patched_f.read()
++    patched_f.close()
++
++    patched = patched.replace('@RM_HEXVERSION@', RM_HEXVERSION)
++    patched = patched.replace('@RM_RELEASE@', RM_RELEASE)
++
++    patched_f = open(name, 'w')
++    patched_f.write(patched)
++    patched_f.close()
++
++
++def prepare(quiet):
++    """ Prepare for configuration and building by creating all the required
++    additional files.
++    """
++
++    sipgen = 'sipgen'
++    metasrc = os.path.join(sipgen, 'metasrc')
++
++    lexer_l = os.path.join(metasrc, 'lexer.l')
++    lexer_c = os.path.join(sipgen, 'lexer.c')
++    _progress("Running flex to create %s" % lexer_c, quiet)
++    os.system('flex -o%s %s' % (lexer_c, lexer_l))
++
++    parser_y = os.path.join(metasrc, 'parser.y')
++    parser_c = os.path.join(sipgen, 'parser.c')
++    _progress("Running bison to create %s" % parser_c, quiet)
++    os.system('bison -y -d -o %s %s' % (parser_c, parser_y))
++
++    _patch(os.path.join('sipgen', 'sip.h'), quiet)
++    _patch(os.path.join('siplib', 'sip.h'), quiet)
++    _patch('configure.py', quiet)
++
++
++if __name__ == '__main__':
++
++    def _prepare(options):
++        """prepare for configuration and building"""
++
++        prepare(options.quiet)
++
++
++    actions = (_prepare, )
++
++    import optparse
++
++    class MyParser(optparse.OptionParser):
++
++        def get_usage(self):
++            """ Reimplemented to add the description of the actions.  We don't
++            use the description because the default formatter strips newlines.
++            """
++
++            usage = optparse.OptionParser.get_usage(self)
++
++            usage += "\n" + __doc__ + "\nActions:\n"
++
++            for action in actions:
++                usage += "  %-9s  %s\n" % (action.__name__[1:], action.__doc__)
++
++            return usage
++
++
++    action_names = [action.__name__[1:] for action in actions]
++
++    parser = MyParser(
++            usage="%%prog [options] %s" % '|'.join(action_names))
++
++    parser.add_option("-q", "--quiet", action='store_true', default=False,
++            dest='quiet', help="suppress progress messages")
++
++    options, args = parser.parse_args()
++
++    if len(args) != 1:
++        parser.print_help()
++        sys.exit(1)
++
++    for action in actions:
++        if action.__name__[1:] == args[0]:
++            action(options)
++            break
++    else:
++        parser.print_help()
++        sys.exit(1)
++
++    sys.exit()
+diff -Nurd '--exclude=doc' '--exclude=.hg*' ./sip-4.19.12.orig/ChangeLog sip/ChangeLog
+--- ./sip-4.19.12.orig/ChangeLog	2018-07-05 05:55:19.000000000 -0400
++++ sip/ChangeLog	1969-12-31 19:00:00.000000000 -0500
+@@ -1,9785 +0,0 @@
+-2018-07-05  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS:
+-	Released as v4.19.12.
+-	[290a78d4a00d] [4.19.12] <4.19-maint>
+-
+-	* sphinx/installation.rst, sphinx/using.rst:
+-	Updated the docs regarding private copies of the sip module.
+-	[e30b9d2668c4] <4.19-maint>
+-
+-	* NEWS, configure.py.in, sphinx/installation.rst:
+-	Added the --no-module option to configure.py.
+-	[02ab8cfda064] <4.19-maint>
+-
+-	* configure.py.in:
+-	The --no-tools option does not install the sip.h. Fixed .dist-info
+-	for the code generator when --no-tools is specified.
+-	[b3633241320b] <4.19-maint>
+-
+-2018-07-04  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS:
+-	Updated the NEWS file.
+-	[f4799b368aa1] <4.19-maint>
+-
+-	* sipgen/main.c:
+-	Fixed the default sip module name.
+-	[30b34699ad64] <4.19-maint>
+-
+-	* sipgen/gencode.c, siplib/array.c, siplib/sip.h.in, siplib/sipint.h,
+-	siplib/siplib.c, siplib/voidptr.c:
+-	Fixed the implementation of sipConvertFromSliceObject() so that
+-	generated modules still support the limited API.
+-	[5baed8e71fdb] <4.19-maint>
+-
+-	* configure.py.in:
+-	Include the build system for all builds (not just legacy ones).
+-	[5443d32d2928] <4.19-maint>
+-
+-	* configure.py.in:
+-	The mk_distinfo.py script now takes a temporary installation
+-	directory as an additional argument.
+-	[048f7a6100c8] <4.19-maint>
+-
+-	* configure.py.in:
+-	Fixes for invoking mk_distinfo.py for out-of-tree builds.
+-	[ded7362cc94a] <4.19-maint>
+-
+-	* siplib/siplib.c:
+-	Fixed a bug exposing traditional enum members in a class that also
+-	contains a C++11 scoped enum.
+-	[ccc4eda868de] <4.19-maint>
+-
+-2018-07-03  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* configure.py.in:
+-	Fix for installing sip.h with out-of-tree builds.
+-	[935f8cdab1b7] <4.19-maint>
+-
+-2018-06-29  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.19.11 for changeset a7d0f8459788
+-	[77add4c87760] <4.19-maint>
+-
+-	* NEWS:
+-	Released as v4.19.11.
+-	[a7d0f8459788] [4.19.11] <4.19-maint>
+-
+-	* NEWS:
+-	Updated the NEWS file.
+-	[373c872333a4] <4.19-maint>
+-
+-	* sphinx/using.rst:
+-	Documented the need for the enum34 package for versions of Python
+-	earlier than v3.4.
+-	[379da5a152c4] <4.19-maint>
+-
+-2018-06-28  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c:
+-	Fixed the exception when a keyword argument overflows.
+-	[659e30e2c490] <4.19-maint>
+-
+-	* siplib/siplib.c:
+-	Fixed a couple of Python v2 exception messages.
+-	[8b2f14850fcd] <4.19-maint>
+-
+-	* siplib/siplib.c:
+-	Fixed a compilation issue with Python v2.
+-	[fea0057d2c29] <4.19-maint>
+-
+-2018-06-26  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Handle const signal arguments (that are not pointers or references).
+-	[a7a3d5f49c09] <4.19-maint>
+-
+-2018-06-25  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, sipgen/gencode.c, sipgen/metasrc/parser.y, sipgen/sip.h.in,
+-	sphinx/annotations.rst:
+-	Added the /ScopesStripped/ argument annotation.
+-	[ab62eae89111] <4.19-maint>
+-
+-2018-06-24  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* configure.py.in:
+-	The .dist-info directory now takes account of $(DESTDIR).
+-	[d6a17b9e8f21] <4.19-maint>
+-
+-	* configure.py.in:
+-	Fixed out-of-tree builds.
+-	[81516a4441db] <4.19-maint>
+-
+-	* sipgen/gencode.c:
+-	Further fixes for the stripping of scopes from signal arguments.
+-	[44dd1db98cf7] <4.19-maint>
+-
+-2018-06-23  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.19.10 for changeset abf14ded1760
+-	[8597a94e4d25] <4.19-maint>
+-
+-	* NEWS:
+-	Released as v4.19.10.
+-	[abf14ded1760] [4.19.10] <4.19-maint>
+-
+-	* sipgen/gencode.c:
+-	Fixed the stripping of scopes from signal arguments.
+-	[ce55e3219bc5] <4.19-maint>
+-
+-2018-06-22  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.19.9 for changeset 21bc9fb06802
+-	[8331b47585f6] <4.19-maint>
+-
+-	* NEWS:
+-	Released as 4.19.9.
+-	[21bc9fb06802] [4.19.9] <4.19-maint>
+-
+-	* build.py, configure.py.in:
+-	Fixes for building in situ.
+-	[500aa97cf889] <4.19-maint>
+-
+-2018-06-21  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS:
+-	Updated the NEWS file.
+-	[0339dce88c21] <4.19-maint>
+-
+-2018-06-19  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* METADATA.in:
+-	Updated the METADATA.in file to account for the private copy for
+-	PyQt5.
+-	[970b0223221f] <4.19-maint>
+-
+-2018-06-17  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, sipgen/gencode.c, sipgen/main.c, sipgen/sip.h.in,
+-	siplib/sip.h.in, siplib/siplib.c:
+-	The sip.h file no longer needs to be configured by the compiler
+-	invocation for the sip module name. Added the -n option to the code
+-	generator to configure the sip module name.
+-	[d2b3b20484bd] <4.19-maint>
+-
+-	* sphinx/command_line.rst, sphinx/installation.rst,
+-	sphinx/introduction.rst.in, sphinx/python_api.rst, sphinx/using.rst:
+-	Updated the docs regarding private copies of the sip module.
+-	[76e24a5bc0c3] <4.19-maint>
+-
+-	* sphinx/build_system.rst, sphinx/directives.rst,
+-	sphinx/installation.rst, sphinx/introduction.rst.in:
+-	Fixed all external links in the documentation.
+-	[31a654cb4d5a] <4.19-maint>
+-
+-	* configure.py.in, siplib/sip.h.in, siplib/sip.h.in.in,
+-	siplib/siplib.c, siplib/siplib.c.in, siplib/siplib.sbf,
+-	siplib/siplib.sbf.in:
+-	Fixed issues when using the --sip-module option to build the sip
+-	module.
+-	[fc3023a254ce] <4.19-maint>
+-
+-2018-06-12  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	More fixes for the /Transfer/ function annotation when applied to
+-	static methods.
+-	[69938bd3654c] <4.19-maint>
+-
+-	* sipgen/gencode.c:
+-	Fixed the implemenation of the /Transfer/ method annotation for
+-	static methods.
+-	[e61b036cb050] <4.19-maint>
+-
+-2018-06-11  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sphinx/c_api.rst:
+-	Clarified the docs for sipSetUserObject().
+-	[8077330e3c1b] <4.19-maint>
+-
+-2018-06-10  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Refactored the new enum visibility support so that normal attribute
+-	lookup in an enum works again (specifically for pickling).
+-	[6d59f2a57159] <4.19-maint>
+-
+-	* NEWS, siplib/siplib.c.in, sphinx/using.rst:
+-	The members of traditional C/C++ enums are now visible within the
+-	scope of the enum.
+-	[79b93109033f] <4.19-maint>
+-
+-2018-06-04  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* mk_distinfo.py:
+-	Removed the mk_distinfo.py script as it is now added during
+-	preparation.
+-	[b8400f2e1b7b] <4.19-maint>
+-
+-	* mk_distinfo.py:
+-	Updated the copy of mk_distinfo.py.
+-	[3dd68ef638eb] <4.19-maint>
+-
+-2018-06-03  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* mk_distinfo.py:
+-	Fixed a typo.
+-	[e687d71b4cc9] <4.19-maint>
+-
+-2018-05-29  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Fixed building for Python versions prior to v3.3.
+-	[91088a13f975] <4.19-maint>
+-
+-	* configure.py.in:
+-	Fixes for the .dist-info support on Windows.
+-	[4773b53d98f0] <4.19-maint>
+-
+-	* configure.py.in:
+-	Handle spaces in path names when building with qmake.
+-	[1757ff19b578] <4.19-maint>
+-
+-2018-05-26  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, configure.py.in, mk_distinfo.py, siputils.py,
+-	sphinx/build_system.rst, sphinx/installation.rst:
+-	A PEP 376 .dist-info directory will be created on installation. The
+-	--no-dist-info option was added to configure.py.
+-	[4dea64c9e1a8] <4.19-maint>
+-
+-2018-05-25  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Fixed __qualname__ for generated types.
+-	[7cf6d49bb422] <4.19-maint>
+-
+-2018-05-16  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* configure.py.in:
+-	Fixed the sip module's .pro file when building with qmake.
+-	[43635cc7012b] <4.19-maint>
+-
+-2018-04-16  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* METADATA.in:
+-	Fixed a link in the PyPI documentation.
+-	[e343bf878ebc] <4.19-maint>
+-
+-	* Roadmap.rst:
+-	Updated the roadmap so that it will age more gracefully.
+-	[1f3cbd657f14] <4.19-maint>
+-
+-2018-04-15  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sphinx/riverbank/static/riverbank.css:
+-	More CSS fixes.
+-	[e413581ca661] <4.19-maint>
+-
+-2018-04-05  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sphinx/riverbank/static/riverbank.css:
+-	Fixed the CSS for links in headers.
+-	[f125f51ceffb] <4.19-maint>
+-
+-2018-03-27  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Removed all calls to the deprecated buffer protocol.
+-	[d9c9937f820a] <4.19-maint>
+-
+-	* siplib/siplib.c.in:
+-	Fixed the calling of handwritten garbage collection code for classes
+-	that do not directly sub-class the class that is providing the code.
+-	[f968cccc9b77] <4.19-maint>
+-
+-	* sipgen/gencode.c:
+-	Signal signatures now have a full version appended if a namespace
+-	has been stripped.
+-	[7683ca65278f] <4.19-maint>
+-
+-2018-03-17  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Signal docstrings can now automatically include the signature.
+-	[34a94ca0260d] <4.19-maint>
+-
+-2018-03-02  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/sip.h.in.in:
+-	Implemented sipConvertFromSliceObject() for Python v3.7 to avoid
+-	using the deprecated PySlize_GetIndicesEx().
+-	[ae83f4e7993f] <4.19-maint>
+-
+-2018-02-26  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.19.8 for changeset 09748626765f
+-	[6462a294376f] <4.19-maint>
+-
+-	* NEWS:
+-	Released as v4.19.8.
+-	[09748626765f] [4.19.8] <4.19-maint>
+-
+-2018-02-03  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* README:
+-	Fixed the README.
+-	[f07d0788eef0] <4.19-maint>
+-
+-2018-01-29  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sphinx/c_api.rst:
+-	Make sure the C API is documented in alphabetical order.
+-	[e930a3c90dc0] <4.19-maint>
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in, siplib/siplib.c.in:
+-	Make sure that the pointer to the Python object held by the C++
+-	instance of the generated derived type is reset by the derived
+-	type's dtor. Also make sure it is tested and reset while the GIL is
+-	held in order to avoid race conditions.
+-	[71bfa703c4ee] <4.19-maint>
+-
+-2018-01-23  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.19.7 for changeset 7e9dbd15c866
+-	[9a8622f989f9] <4.19-maint>
+-
+-	* NEWS:
+-	Released as v4.19.7.
+-	[7e9dbd15c866] [4.19.7] <4.19-maint>
+-
+-	* NEWS:
+-	Updated the NEWS file.
+-	[3d0a9ebb536c] <4.19-maint>
+-
+-2018-01-22  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	A significant update to a comment.
+-	[f947546822c3] <4.19-maint>
+-
+-2018-01-16  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/metasrc/lexer.l:
+-	Fixed the failed attempt to fix %Docstring argument parsing.
+-	[6054b3268f6f] <4.19-maint>
+-
+-2018-01-15  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/metasrc/lexer.l, sipgen/metasrc/parser.y,
+-	sphinx/directives.rst:
+-	In the context of a class's docstring the signature argument refers
+-	to the concatanated ctor docstrings.
+-	[34ddf9638287] <4.19-maint>
+-
+-	* sipgen/metasrc/parser.y, sphinx/directives.rst:
+-	Typedefs can now have docstrings. These are only used by those that
+-	instantiate class templates.
+-	[327ad560d853] <4.19-maint>
+-
+-2018-01-14  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fixed the generated of a default value that is a global unscoped
+-	enum.
+-	[8f9c478295d3] <4.19-maint>
+-
+-2018-01-09  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fixed a missing quote in the docstring support.
+-	[e37301b91a57] <4.19-maint>
+-
+-2018-01-07  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fixed the handling of signal docstrings.
+-	[5d4d28286e02] <4.19-maint>
+-
+-	* sipgen/gencode.c:
+-	Fixed the docstring handling for private ctors and method.
+-	[8186b65687f1] <4.19-maint>
+-
+-	* sipgen/gencode.c:
+-	Fixed the formats of class docstrings.
+-	[3af2dab08ed3] <4.19-maint>
+-
+-	* sipgen/gencode.c:
+-	Fixed the formatting of function/method docstrings.
+-	[8e1829fdaf04] <4.19-maint>
+-
+-2018-01-06  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/metasrc/lexer.l, sipgen/metasrc/parser.y,
+-	sipgen/sip.h.in, sphinx/directives.rst:
+-	Initial commit to support embeded signatures in explicit docstrings.
+-	[b3d42a546701] <4.19-maint>
+-
+-2018-01-05  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sphinx/conf.py.in, sphinx/riverbank/layout.html,
+-	sphinx/riverbank/static/logo.png,
+-	sphinx/riverbank/static/logo_tn.ico,
+-	sphinx/riverbank/static/riverbank.css, sphinx/riverbank/theme.conf,
+-	sphinx/static/classic.css, sphinx/static/logo.png,
+-	sphinx/static/logo_tn.ico:
+-	Switched to the revised Sphinx standards.
+-	[b68eecb348b9] <4.19-maint>
+-
+-2017-12-30  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in, siplib/siplib.c.in:
+-	Fixed the handling of wchar_t constants.
+-	[c0436cb89959] <4.19-maint>
+-
+-2017-12-16  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* configure.py.in:
+-	Readability improvement.
+-	[6a635db426ea] <4.19-maint>
+-
+-	* configure.py.in:
+-	Fixed the location to install the code generator in a Windows venv.
+-	[d0f37d83df6f] <4.19-maint>
+-
+-	* configure.py.in:
+-	Fixed the location of the pythonMN.lib file on Windows when building
+-	in a venv.
+-	[a098e2be83c2] <4.19-maint>
+-
+-2017-11-23  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.19.6 for changeset 3f131525d4d5
+-	[3f3a98f6a67a] <4.19-maint>
+-
+-	* NEWS:
+-	Released as v4.19.6.
+-	[3f131525d4d5] [4.19.6] <4.19-maint>
+-
+-2017-11-21  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sphinx/annotations.rst:
+-	Updated the docs for /NewThread/.
+-	[30c7476904af] <4.19-maint>
+-
+-2017-11-10  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fixed the handling of the default value of unscoped enums when using
+-	old compilers.
+-	[dd017d3e1454] <4.19-maint>
+-
+-2017-11-06  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.19.5 for changeset a572b9daf87f
+-	[e0419013252c] <4.19-maint>
+-
+-	* NEWS:
+-	Released as v4.19.5.
+-	[a572b9daf87f] [4.19.5] <4.19-maint>
+-
+-	* siplib/sip.h.in.in, siplib/siplib.c.in:
+-	Fixed a regression in the conversion of enums which meant that an
+-	object with an __int__ method was accepted as a valid value.
+-	[273b01861a11] <4.19-maint>
+-
+-2017-11-05  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* test/int_convertors/mk.sh, test/int_convertors/run_test.py,
+-	test/int_convertors/test.h, test/int_convertors/test.sip:
+-	Added the test for an overloaded function where the argument of each
+-	overload is a different named enum.
+-	[cac9082bdbd8] <4.19-maint>
+-
+-2017-11-02  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* configure.py.in:
+-	Ensure that when building on macOS using qmake the sip module is a
+-	bundle.
+-	[f945942bc896] <4.19-maint>
+-
+-2017-11-01  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.19.4 for changeset ed56fb689db8
+-	[c56a33a3ef0c] <4.19-maint>
+-
+-	* NEWS:
+-	Released as v4.19.4.
+-	[ed56fb689db8] [4.19.4] <4.19-maint>
+-
+-2017-10-09  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Build fixes for Python v2.
+-	[5b2adad49340] <4.19-maint>
+-
+-2017-09-18  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fixed a regression that meant that namespaces were included in the
+-	types of arguments to signals. Probably only affects
+-	PyQtDataVisualization.
+-	[5c94d14871a3] <4.19-maint>
+-
+-2017-09-05  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Appy a cast to const class pointers to static instances.
+-	[3db4b02ea152] <4.19-maint>
+-
+-	* sphinx/incompatibilities.rst, sphinx/using.rst:
+-	Added a section on overflow checking to the documentation.
+-	[39409c0a5282] <4.19-maint>
+-
+-	* sipgen/gencode.c:
+-	Make sure the default value of scoped enums is valid.
+-	[5024429c9126] <4.19-maint>
+-
+-2017-09-04  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/sip.h.in.in, siplib/siplib.c.in, sphinx/c_api.rst,
+-	test/int_convertors/run_test.py, test/int_convertors/test.h,
+-	test/int_convertors/test.sip:
+-	Deprecated sipCanConvertToEnum(). sipConvertToEnum() now has single-
+-	pass behaviour like the integer convertors.
+-	[2065bdd284cc] <4.19-maint>
+-
+-2017-09-02  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/int_convertors.c, siplib/siplib.c.in:
+-	Improved the exception text when a virtual should return an enum or
+-	a bool.
+-	[7636b12a0789] <4.19-maint>
+-
+-	* test/int_convertors/run_test.py, test/int_convertors/test.h,
+-	test/int_convertors/test.sip:
+-	Added the tests for converting names enums.
+-	[8b5be80fda82] <4.19-maint>
+-
+-	* siplib/siplib.c.in:
+-	Fixed a regression where sipBadCatcherResult() is called without an
+-	exception.
+-	[894b51685d51] <4.19-maint>
+-
+-	* test/int_convertors/run_test.py:
+-	Added the remaining bool tests.
+-	[1afb586f55db] <4.19-maint>
+-
+-	* sipgen/gencode.c, siplib/int_convertors.c, siplib/sip.h.in.in,
+-	siplib/sipint.h, siplib/siplib.c.in, sphinx/c_api.rst,
+-	test/int_convertors/run_test.py, test/int_convertors/test.h,
+-	test/int_convertors/test.sip:
+-	Added sipConvertToBool() to the public API. Implemented the tests
+-	for invalid bool values.
+-	[3e8faabe48a1] <4.19-maint>
+-
+-	* test/int_convertors/run_test.py, test/int_convertors/test.h,
+-	test/int_convertors/test.sip:
+-	Added the tests for converting char.
+-	[fb34c9009048] <4.19-maint>
+-
+-	* test/int_convertors/run_test.py:
+-	Completed the unit tests for unsigned values.
+-	[cbb776ab54f9] <4.19-maint>
+-
+-2017-09-01  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* test/int_convertors/run_test.py:
+-	Added the tests for valid values of unsigned types.
+-	[895e5218b2a2] <4.19-maint>
+-
+-	* test/int_convertors/run_test.py, test/int_convertors/test.h,
+-	test/int_convertors/test.sip:
+-	Added tests for virtuals returning invalid values. Added the C++ and
+-	wrappers for the unsigned types tests.
+-	[b42f7afd33bc] <4.19-maint>
+-
+-	* test/int_convertors/run_test.py:
+-	Fixed the tests for long and long long to account for the legacy
+-	behaviour of the convertors.
+-	[06c124a19f3c] <4.19-maint>
+-
+-	* test/int_convertors/run_test.py, test/int_convertors/test.h,
+-	test/int_convertors/test.sip:
+-	Implemented the unit tests for int, long and long long integer
+-	conversions.
+-	[55a8a713a6fc] <4.19-maint>
+-
+-	* test/int_convertors/mk.sh, test/int_convertors/run_test.py,
+-	test/int_convertors/test.h, test/int_convertors/test.sip:
+-	Added the unit tests for signed char and short integer convertors.
+-	[1109afd9d851] <4.19-maint>
+-
+-	* siplib/siplib.c.in:
+-	The type of the exception raised when a Python re-implementation of
+-	a C++ virtual raises an exception is now the same as that original
+-	exception and not fixed to be TypeError.
+-	[61885f427681] <4.19-maint>
+-
+-2017-08-31  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, siplib/siplib.c.in:
+-	Fixed a regression in the generation of slots code.
+-	[9e09f205e404] <4.19-maint>
+-
+-2017-08-30  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sphinx/c_api.rst:
+-	Backed out the documentation change for sipConvertToEnum().
+-	[fec7c90f35a2] <4.19-maint>
+-
+-	* sipgen/gencode.c, siplib/siplib.c.in, sphinx/c_api.rst:
+-	Removed the last call to SIPLong_AsLong().
+-	[b70f7ccc3069] <4.19-maint>
+-
+-	* sipgen/gencode.c, siplib/int_convertors.c, siplib/sip.h.in.in,
+-	siplib/sipint.h, siplib/siplib.c.in, siplib/siplib.sbf.in,
+-	sphinx/c_api.rst:
+-	Added sipLong_AsSignedChar() ot the public API. The generated
+-	variable setters now use the new convertors.
+-	[85bfd5c33ae0] <4.19-maint>
+-
+-	* siplib/siplib.c.in:
+-	Completed the sip module changes for overflow checking.
+-	[c8029d4cc754] <4.19-maint>
+-
+-2017-08-23  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Migration of more module code to the new convertors.
+-	[b035786f41e8] <4.19-maint>
+-
+-2017-08-21  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/array.c, siplib/voidptr.c:
+-	The array and voidptr types now use the new convertors.
+-	[037839910d09] <4.19-maint>
+-
+-	* siplib/int_convertors.c:
+-	Completed the implementation of the new integer convertors.
+-	[cae1cf5dfa79] <4.19-maint>
+-
+-2017-08-20  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, siplib/int_convertors.c, siplib/sip.h.in.in,
+-	siplib/sipint.h, siplib/siplib.c.in, sphinx/c_api.rst:
+-	Implemented the int convertor stubs and documented them.
+-	[3c4d82a590ac] <4.19-maint>
+-
+-	* siplib/int_convertors.c, siplib/sipint.h, siplib/siplib.c.in:
+-	Refactored the support for int convertors.
+-	[2b1714de0e3f] <4.19-maint>
+-
+-2017-08-19  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in, siplib/siplib.c.in,
+-	sphinx/c_api.rst, sphinx/python_api.rst:
+-	Implemented sipEnableOverflowChecking() and
+-	sip.enableoverflowchecking() stubs.
+-	[56266006c18f] <4.19-maint>
+-
+-2017-08-13  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, sphinx/c_api.rst, sphinx/incompatibilities.rst:
+-	Updated the docs regarding support for scoped enums.
+-	[0cf1c85b12bd] <4.19-maint>
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in, siplib/siplib.c.in:
+-	Completed the implementation of scoped enums.
+-	[d0b2e8967294] <4.19-maint>
+-
+-	* siplib/siplib.c.in:
+-	Scoped enums are now created as Python enums.
+-	[ae7df49152e3] <4.19-maint>
+-
+-	* siplib/siplib.c.in, sphinx/c_api.rst:
+-	More work on scoped enums.
+-	[9a196aece94e] <4.19-maint>
+-
+-2017-08-12  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/metasrc/parser.y, siplib/sip.h.in.in,
+-	siplib/siplib.c.in, sphinx/c_api.rst:
+-	Created the stub of the scoped enums implementation.
+-	[674f800ed250] <4.19-maint>
+-
+-	* sipgen/type_hints.c:
+-	Removed some unused variables.
+-	[90360e454f86] <4.19-maint>
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in:
+-	Remove the const from the source object declaration in assignment
+-	helpers.
+-	[2b53ba180983] <4.19-maint>
+-
+-2017-08-11  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/metasrc/parser.y:
+-	Completed the parser support for scoped enums.
+-	[11b383822a47] <4.19-maint>
+-
+-	* sipgen/metasrc/parser.y, sipgen/sip.h.in,
+-	sphinx/specification_files.rst:
+-	Added parser support for scoped enums.
+-	[f5b7d5bf0624] <4.19-maint>
+-
+-	* sipgen/gencode.c:
+-	Use static_cast<int>() when passing values to sipConvertFromEnum().
+-	[091cfd53e597] <4.19-maint>
+-
+-2017-08-08  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/transform.c:
+-	Disallow (rather than ignore) invalid types in Python signatures if
+-	%MethodCode and a C/C++ signature is provided.
+-	[a975983c39c1] <4.19-maint>
+-
+-2017-08-07  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fixed a code generation bug in the handling of signals in scoped
+-	classes.
+-	[7c82958d6327] <4.19-maint>
+-
+-2017-07-22  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/sip.h.in, sipgen/transform.c:
+-	Fixes for the detection of recursive imports.
+-	[6a7ab03d4efa] <4.19-maint>
+-
+-2017-07-14  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/transform.c:
+-	Detect recursive imports as an error.
+-	[ba19c3f5fb29] <4.19-maint>
+-
+-2017-07-03  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.19.3 for changeset 14685a6e736e
+-	[2a9f342b7f39] <4.19-maint>
+-
+-	* NEWS:
+-	Released as v4.19.3.
+-	[14685a6e736e] [4.19.3] <4.19-maint>
+-
+-2017-07-02  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/export.c, sipgen/type_hints.c:
+-	Fixes for hidden namespaces in generated XML.
+-	[489321fd2475] <4.19-maint>
+-
+-2017-06-28  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sphinx/specification_files.rst:
+-	Fixed an out of date statement in the docs.
+-	[21539b0e74c6] <4.19-maint>
+-
+-2017-06-22  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/metasrc/parser.y, sipgen/sip.h.in:
+-	Don't report template arguments of uninstantiated templates as
+-	undefined classes.
+-	[a69025738247] <4.19-maint>
+-
+-2017-06-21  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/metasrc/parser.y:
+-	Allow empty class bodies.
+-	[265b531cb6e4] <4.19-maint>
+-
+-	* sipgen/gencode.c:
+-	Fixed a bug handling double quotes as the default value of a char
+-	argument.
+-	[d86c23976619] <4.19-maint>
+-
+-2017-06-16  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/main.c, sipgen/metasrc/parser.y, sipgen/sip.h.in,
+-	sipgen/transform.c:
+-	Completed the implementation of non-strict parsing.
+-	[8b5e498d13dd] <4.19-maint>
+-
+-	* sipgen/metasrc/parser.y, sipgen/sip.h.in:
+-	The relevant data structures now retain the platform information.
+-	[15b6c00166a7] <4.19-maint>
+-
+-	* sipgen/gencode.c, sipgen/main.c, sipgen/metasrc/parser.y,
+-	sipgen/sip.h.in:
+-	Added the stub of non-strict parsing that saves (but otherwise
+-	ignores) the platform information.
+-	[b05b36a086c2] <4.19-maint>
+-
+-	* sipgen/gencode.c, sipgen/metasrc/lexer.l:
+-	Improve the handling of string constants to properly support escape
+-	characters.
+-	[495a7635a52d] <4.19-maint>
+-
+-	* sipgen/metasrc/parser.y:
+-	Make sure any expanded template ctor call is a deep copy.
+-	[141c98e741b6] <4.19-maint>
+-
+-2017-06-15  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/metasrc/parser.y:
+-	Expand template ctor calls when they are the default values of an
+-	argument.
+-	[5df8870c61a7] <4.19-maint>
+-
+-2017-06-10  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fixed a regression in the invocation of the dtor of shadow classes.
+-	[e833dc3f9a2f] <4.19-maint>
+-
+-2017-06-06  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgignore:
+-	Updated .hgignore for the changed build directory.
+-	[b2fb251d3500] <4.19-maint>
+-
+-2017-05-27  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in, sphinx/c_api.rst:
+-	Documented the event handler mechanism.
+-	[aee09bdf1206] <4.19-maint>
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in, siplib/siplib.c.in:
+-	Implemented sipEventType and sipRegisterEventHandler().
+-	[2a4bcf305afa] <4.19-maint>
+-
+-2017-05-26  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, siplib/objmap.c, siplib/sip.h.in.in,
+-	siplib/sipint.h, siplib/siplib.c.in, sphinx/c_api.rst:
+-	Renamed sipCommonDtor() to sipInstanceDestroyed() and added it to
+-	the public API.
+-	[e7d4e6661fa0] <4.19-maint>
+-
+-	* sipgen/metasrc/parser.y:
+-	The parser will now accept class template definitions within a
+-	class. The generated code is untested.
+-	[ec57a6e03eb3] <4.19-maint>
+-
+-2017-05-23  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/type_hints.c:
+-	Added support for type hints for properties from Scott Maxwell.
+-	[c861fe0ef6ca] <4.19-maint>
+-
+-2017-05-15  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fixes for 'char *&' argument types.
+-	[684e23c995a3] <4.19-maint>
+-
+-2017-05-05  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Removed a duplicate call.
+-	[afe3d3efc82d] <4.19-maint>
+-
+-	* sipgen/gencode.c:
+-	Don't try and initialise the result of a virtual when the type is a
+-	template.
+-	[cce4fe835faf] <4.19-maint>
+-
+-2017-04-27  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in, siplib/siplib.c.in:
+-	Added sipPrintObject() to the public C API.
+-	[10e10b1a2d68] <4.19-maint>
+-
+-2017-04-24  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, siplib/siplib.c.in:
+-	Fixed regressions in the handling of exceptions.
+-	[974a4d77314b] <4.19-maint>
+-
+-	* sipgen/transform.c, sphinx/conf.py.in:
+-	Minor cosmetic fixes.
+-	[4ea35fd2187d] <4.19-maint>
+-
+-2017-04-05  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Effectively re-applied changeset dc06058c99dd. If there is a real
+-	problem here then we don't yet fully understand it.
+-	[95a493a417e8] <4.19-maint>
+-
+-2017-04-02  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/transform.c:
+-	Fix a regression so that a shadow class is not generated if there is
+-	a private dtor.
+-	[6b09a6d578e8] <4.19-maint>
+-
+-2017-03-30  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.19.2 for changeset 1df924860f57
+-	[6209a625ac87] <4.19-maint>
+-
+-	* NEWS:
+-	Released as v4.19.2.
+-	[1df924860f57] [4.19.2] <4.19-maint>
+-
+-2017-03-23  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Remove an unnecessary comment.
+-	[1f31effbc614] <4.19-maint>
+-
+-2017-03-03  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Fixed a crash when a user defined class uses sip.wrappertype as it's
+-	meta-type but is not derived from sip.simplewrapper.
+-	[f5bab1986fbb] <4.19-maint>
+-
+-2017-02-15  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.19.1 for changeset ee5ea590d186
+-	[f45eb310f129] <4.19-maint>
+-
+-	* NEWS:
+-	Released as v4.19.1.
+-	[ee5ea590d186] [4.19.1] <4.19-maint>
+-
+-2017-02-13  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fixed another regression in deprecated code.
+-	[556ca44cc535] <4.19-maint>
+-
+-	* sipgen/gencode.c:
+-	Fixed some deprecated macros.
+-	[23a8ef68306d] <4.19-maint>
+-
+-2017-02-08  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Fixed a typo in the implementation of sipEnableGC().
+-	[c15936fc6007] <4.19-maint>
+-
+-2017-02-05  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Fixed a doesn't-work-with-old-c-compilers bug.
+-	[5775566848d1] <4.19-maint>
+-
+-2017-02-02  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/transform.c:
+-	Fixed a regression in the generation of names of protected methods
+-	in classes imported from other modules.
+-	[948e06cb1921] <4.19-maint>
+-
+-2017-02-01  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/metasrc/parser.y, sipgen/sip.h.in, sipgen/transform.c:
+-	Fixed a regression in determining when a shadow class should be
+-	generated.
+-	[71a8ee38b2c6] <4.19-maint>
+-
+-2017-01-31  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/sip.h.in.in:
+-	Updated the ABI version number.
+-	[6b23496bd532] <4.19-maint>
+-
+-	* sphinx/annotations.rst:
+-	Added a clarification to the /Abstract/ class annotation.
+-	[adb03184b044] <4.19-maint>
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in, siplib/siplib.c.in,
+-	sphinx/c_api.rst:
+-	Added sipEnableGC() to the public API.
+-	[03b120e8fe2f] <4.19-maint>
+-
+-2017-01-29  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/metasrc/parser.y:
+-	Fixed a couple of missing types.
+-	[9737461081da] <4.19-maint>
+-
+-2017-01-23  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	More fixes for /NoTypeName/ applied to class templates.
+-	[8a45855e0d70] <4.19-maint>
+-
+-2017-01-22  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/metasrc/parser.y, sipgen/sip.h.in:
+-	The /NoTypeName/ typedef annotation now affects classes
+-	instantiation from class templates.
+-	[30d9a5a61ed2] <4.19-maint>
+-
+-2017-01-21  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, sipgen/gencode.c, sipgen/metasrc/lexer.l,
+-	sipgen/metasrc/parser.y, sipgen/sip.h.in, sphinx/directives.rst:
+-	Added the %PreMethodCode implementation from Robin Dunn.
+-	[08d77fb135a2] <4.19-maint>
+-
+-	* sipgen/metasrc/parser.y:
+-	Properly fix the template super-class regression.
+-	[3b674fc274d5] <4.19-maint>
+-
+-	* sipgen/metasrc/parser.y:
+-	Backed out changeset b94757bc5637 It fixes the bug but breaks
+-	everything else.
+-	[f39e23bcd25b] <4.19-maint>
+-
+-	* sipgen/metasrc/parser.y:
+-	Fixed a regression in the handling of template arguments specifying
+-	super-classes.
+-	[b94757bc5637] <4.19-maint>
+-
+-2017-01-20  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* README, build.py:
+-	Fixed the build.py script so that it does a complete preparation.
+-	[85539feb92ea] <4.19-maint>
+-
+-2017-01-19  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Fixed sipGetBufferInfo().
+-	[1de5c188f98d] <4.19-maint>
+-
+-2017-01-10  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/main.c, sipgen/transform.c,
+-	siplib/siplib.c.in, sphinx/command_line.rst:
+-	Added the -D command line option so that the generated code is aware
+-	of Python debug builds.
+-	[2a21ceefdf2a] <4.19-maint>
+-
+-2017-01-09  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Hopefully a better implementation of changeset dc06058c99dd.
+-	[4c135d33a5cf] <4.19-maint>
+-
+-	* siplib/siplib.c.in:
+-	Backed out changeset dc06058c99dd The change is too drastic.
+-	[d9e95528015e] <4.19-maint>
+-
+-2017-01-07  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/transform.c:
+-	Fixed a regression in the ordering of the generated types table for
+-	a module.
+-	[06237437b446] <4.19-maint>
+-
+-2016-12-25  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.19 for changeset 0a4ee5a5511f
+-	[245c1ac3c34e]
+-
+-	* NEWS:
+-	Released as v4.19.
+-	[0a4ee5a5511f] [4.19]
+-
+-2016-12-17  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/transform.c:
+-	Fixed a problem importing the required types for protected methods
+-	without the public/protected hack.
+-	[ccf3d8f3cc59]
+-
+-2016-12-14  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/sip.h.in.in, siplib/siplib.c.in, sphinx/python_api.rst:
+-	Implemented sip.assign() to invoke the C++ assignment operator.
+-	[4324a0bc03a4]
+-
+-2016-11-27  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* configure.py.in, sphinx/installation.rst:
+-	Added the --no-stubs and --stubsdir options to configure.py to be
+-	consistent with other configuration scripts.
+-	[70e0d9d09265]
+-
+-2016-11-22  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/transform.c:
+-	Fixed the incomplete tidy-up.
+-	[69aaa13a1883]
+-
+-2016-11-21  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/transform.c:
+-	Fix a warning message.
+-	[5d7b73925360]
+-
+-	* sipgen/gencode.c, sipgen/sip.h.in, sipgen/transform.c:
+-	Reverted to pre-4.18 handling of the generated cast function. There
+-	are cases where a C++ derived class does not have the same address
+-	as its single base class.
+-	[8e9e02f1bea0]
+-
+-2016-11-11  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/metasrc/parser.y:
+-	Fixed a regression (related to scoped names) that meant that header
+-	code for template arguments wasn't being included.
+-	[04796a24e981]
+-
+-2016-10-28  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	iHandwritten code to be included in the sipAPI*.h file is now placed
+-	at the end so that it can make use of the generated macros and
+-	types.
+-	[ed446493da18]
+-
+-2016-10-26  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Fixed some compiler warnings when building for Python v2.
+-	[264793ee3fb0]
+-
+-2016-10-25  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/transform.c:
+-	Fixed a regression in the handling of abstratc classes.
+-	[ce1042e83d1a]
+-
+-	* sipgen/gencode.c, sipgen/transform.c:
+-	More namespace related fixes.
+-	[73d456c2f5cc]
+-
+-2016-10-18  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/metasrc/parser.y, sipgen/sip.h.in,
+-	sipgen/transform.c, siplib/siplib.c.in:
+-	Implemented 'final' support. More fixes for the handling of scopes.
+-	[1d0d5c659b92]
+-
+-2016-10-17  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/metasrc/lexer.l, sipgen/metasrc/parser.y, sipgen/sip.h.in,
+-	sphinx/specification_files.rst:
+-	Added parser support for the 'final' keyword.
+-	[373d57302d56]
+-
+-2016-10-16  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/metasrc/parser.y, sipgen/transform.c:
+-	Refactored the support for scopes so that types hav a leading '::'.
+-	[1f498dfe2888]
+-
+-2016-10-09  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/metasrc/parser.y, sipgen/sip.h.in,
+-	sipgen/transform.c:
+-	Fixed the generation of the scope of an operator moved from a
+-	namespace to a class.
+-	[f697ee13a3aa]
+-
+-2016-10-06  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sphinx/directives.rst:
+-	Documented the %HideNamespace directive.
+-	[b45a86055567]
+-
+-	* sipgen/gencode.c, sipgen/metasrc/lexer.l, sipgen/metasrc/parser.y,
+-	sipgen/sip.h.in, sipgen/transform.c:
+-	Implemented the %HideNamespace directive.
+-	[6b1f471385df]
+-
+-2016-10-05  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Make sure the underlying types are generated in tuple builders.
+-	[0507dfae0588]
+-
+-	* sipgen/gencode.c:
+-	Virtual handlers use typedef names like all the rest of the
+-	generated code.
+-	[c732f0460bc3]
+-
+-2016-10-04  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/transform.c:
+-	Refactored the name lookup code.
+-	[8bd669cf535f]
+-
+-2016-09-29  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Variable getters/setters now only keep a hidden reference for C
+-	character strings.
+-	[6ec87337d5e2]
+-
+-	* sipgen/gencode.c:
+-	Fixed a bad indentation in the generated code.
+-	[cb1d8e948a2b]
+-
+-2016-09-25  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/metasrc/parser.y, sipgen/sip.h.in,
+-	sipgen/transform.c, siplib/qtlib.c, siplib/sip.h.in.in,
+-	siplib/siplib.c.in, sphinx/using.rst:
+-	Removed anll code generator support for PyQt3.
+-	[a9cc0cc567aa]
+-
+-2016-09-24  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/transform.c:
+-	A class that sub-classes an abstract class and doesn't provide an
+-	implementation of an abstract method is itself abstract.
+-	[472469f1d7ad]
+-
+-	* sipgen/gencode.c, sipgen/metasrc/parser.y, sipgen/sip.h.in,
+-	sipgen/transform.c:
+-	Fixes for imported types that have multiple implementations.
+-	[dc02dc4430ec]
+-
+-	* sipgen/transform.c, siplib/sip.h.in.in:
+-	Fixed the selection of a virtual handler.
+-	[d6c07e82a3d2]
+-
+-2016-09-23  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/sip.h.in.in, siplib/sipint.h:
+-	Fixed some regressions when building with the limited API disabled.
+-	[8118a2156d11]
+-
+-	* siplib/sip.h.in.in, siplib/sipint.h:
+-	Exposed some missing macros.
+-	[d12bb44a9d7d]
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in, siplib/siplib.c.in,
+-	sphinx/c_api.rst:
+-	Added sipGetUserObject() and sipSetUserObject() to the public API.
+-	[e0352cc51b67]
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in, siplib/sipint.h,
+-	siplib/siplib.c.in:
+-	Added sipIsOwnedByPython() and sipIsDerivedClass() to the private
+-	API to remove more binary dependencies.
+-	[17ed5300e0dc]
+-
+-	* sipgen/metasrc/parser.y, siplib/objmap.c, siplib/sip.h.in.in,
+-	siplib/siplib.c.in:
+-	Fix some warnings.
+-	[d0dcc6cd73b9]
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in:
+-	Refactored how the plugin-specific generated tables are handled.
+-	[a0fcb2bc14ca]
+-
+-2016-09-22  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/transform.c:
+-	Fixed the auto-generation of default copy ctors.
+-	[508f9dd396f9]
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in, siplib/siplib.c.in:
+-	Implemented the sipCallProcedureMethod() optimisation.
+-	[948be90a3f5e]
+-
+-	* sipgen/transform.c, siplib/sip.h.in.in:
+-	Class based exceptions should now have their type structure
+-	included.
+-	[64ac366b669f]
+-
+-	* siplib/sip.h.in.in, siplib/siplib.c.in:
+-	Reorganised the C API structure.
+-	[a08c7533a799]
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in, siplib/siplib.c.in:
+-	Completed the refactoring to eliminate binary dependencies.
+-	[fb3b72523947]
+-
+-	* sipgen/gencode.c, sipgen/metasrc/parser.y, sipgen/sip.h.in,
+-	sipgen/transform.c, siplib/sip.h.in.in, siplib/siplib.c.in:
+-	Refactored the implementation of exceptions to eliminate the binary
+-	dependencies.
+-	[aeb733f23126]
+-
+-	* sipgen/gencode.c, sipgen/metasrc/parser.y, sipgen/sip.h.in,
+-	sipgen/transform.c, siplib/sip.h.in.in, siplib/siplib.c.in:
+-	Refactored the handling of virtual error handlers to reduce binary
+-	dependencies.
+-	[b08f6f3325e8]
+-
+-2016-09-21  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/sip.h.in, sipgen/transform.c:
+-	Genearte the needed types table at the right time.
+-	[26331d156a87]
+-
+-	* sipgen/gencode.c, sipgen/sip.h.in, sipgen/transform.c:
+-	Refactoring of the code that inspects a class for its visible
+-	virtuals.
+-	[082c756c263d]
+-
+-2016-09-20  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/transform.c:
+-	Fixes for regressions using the type header files in the right
+-	place.
+-	[0b1a09bbde7a]
+-
+-	* sipgen/gencode.c, sipgen/metasrc/parser.y, sipgen/sip.h.in,
+-	sipgen/transform.c, siplib/sip.h.in.in:
+-	Initial refactoring of virtual handlers.
+-	[d454a9b02d26]
+-
+-2016-09-19  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, siplib/siplib.c.in:
+-	Generate the correct type names for template based types.
+-	[1f17d1688231]
+-
+-	* sipgen/gencode.c, sipgen/metasrc/parser.y, sipgen/sip.h.in,
+-	sipgen/transform.c, siplib/sip.h.in.in, siplib/siplib.c.in,
+-	sphinx/c_api.rst, sphinx/incompatibilities.rst:
+-	Refactored the handling of generated type structures so that they
+-	are only referenced by name by an importing module rather than by an
+-	index into a table. This reduces the binary dependencies between
+-	modules.
+-	[667720dbc42d]
+-
+-2016-09-15  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/metasrc/parser.y, sipgen/sip.h.in,
+-	siplib/sip.h.in.in, siplib/siplib.c.in, sphinx/directives.rst:
+-	Removed the support for module version numbers.
+-	[685029cadb52]
+-
+-2016-09-12  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Fixed silly bugs in the previous change.
+-	[7df5236aa50f]
+-
+-	* siplib/sip.h.in.in, siplib/siplib.c.in:
+-	Improved the implementation of sipGetBufferInfo().
+-	[7a606d0daf37]
+-
+-2016-09-09  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/export.c, sipgen/type_hints.c:
+-	Fixed the type hint for unsigned const char *.
+-	[19f9b9eea667]
+-
+-	* siplib/sip.h.in.in, siplib/siplib.c.in, sphinx/c_api.rst:
+-	Updated sipGetBufferInfo() to optionally check the type.
+-	sipGetBufferInfo() only supports 1-dimensional arrays.
+-	[985d7877b3a1]
+-
+-2016-09-08  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Further fixes for invoking the new type handler.
+-	[ecdcfc0f0558]
+-
+-	* siplib/objmap.c, siplib/sip.h.in.in, siplib/siplib.c.in:
+-	Fixes for the invocation of the new user type handler.
+-	[a95c68d37f6e]
+-
+-	* siplib/siplib.c.in:
+-	Fixed the invocation of the new user type handler.
+-	[d484574b76e9]
+-
+-2016-09-07  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in, siplib/siplib.c.in,
+-	sphinx/c_api.rst:
+-	Added sipGetBufferInfo() and sipReleaseBufferInfo() to the public
+-	API.
+-	[c23d7cb8b06e]
+-
+-2016-09-06  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in, sphinx/c_api.rst:
+-	Documented the new Unicode-related functions.
+-	[c8408349d43c]
+-
+-2016-09-05  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in, siplib/siplib.c.in:
+-	Added sipUnicodeNew(), sipUnicodeWrite() and sipUnicodeData() to the
+-	public API.
+-	[e05849602bef]
+-
+-2016-08-30  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in, siplib/siplib.c.in,
+-	sphinx/c_api.rst:
+-	Added sipGetMethod(), sipFromMethod() and sipGetCFunction() ot the
+-	public API.
+-	[28f7daaa7542]
+-
+-	* sipgen/gencode.c, sipgen/metasrc/parser.y, siplib/sip.h.in.in,
+-	siplib/siplib.c.in, sphinx/c_api.rst:
+-	Added sipCheckPluginForType() ot the public API.
+-	sipSetNewUserTypeHandler() now returns the old handler to allow
+-	chaining.
+-	[7e8e4447431b]
+-
+-2016-08-29  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/descriptors.c, siplib/objmap.c, siplib/sip.h.in.in,
+-	siplib/siplib.c.in:
+-	Renamed some structure fields.
+-	[cb8478e5895d]
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in, siplib/siplib.c.in,
+-	sphinx/c_api.rst:
+-	Added sipPyTypeDict() to the public API.
+-	[7f25c1fe8296]
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in, siplib/siplib.c.in,
+-	sphinx/c_api.rst:
+-	Added sipGetFrame() to the public API.
+-	[a34c213208b2]
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in, siplib/siplib.c.in,
+-	sphinx/c_api.rst:
+-	Added sipIsUserType() to the public API.
+-	[d2477eb9265e]
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in, siplib/siplib.c.in,
+-	sphinx/c_api.rst:
+-	Added the data and time functions to the public API.
+-	[7739c16f94c9]
+-
+-2016-08-28  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sphinx/c_api.rst:
+-	Documented sipPyTypeName().
+-	[c7098cf08c3a]
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in, siplib/siplib.c.in:
+-	Added sipPyTypeName() to the public API.
+-	[319512a38c50]
+-
+-	* siplib/sip.h.in.in:
+-	Fixed the new macros.
+-	[c361a6924e82]
+-
+-	* siplib/sip.h.in.in:
+-	Implemented additional portablity macros for the limited API.
+-	[120e916e8608]
+-
+-	* .hgignore, sipgen/gencode.c, siplib/sip.h.in.in, siplib/siplib.c.in,
+-	sphinx/c_api.rst, sphinx/using.rst:
+-	Implemented sipSetNewUserTypeFunc() sipSetTypeUserData() and
+-	sipGetTypeUserData().
+-	[1f180cf4a42a]
+-
+-2016-08-25  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/apiversions.c, siplib/array.c, siplib/array.h,
+-	siplib/descriptors.c, siplib/objmap.c, siplib/qtlib.c,
+-	siplib/sip.h.in.in, siplib/sipint.h, siplib/threads.c,
+-	siplib/voidptr.c, sphinx/c_api.rst, sphinx/directives.rst:
+-	Added the user field to the sipWrapperType structure as an
+-	alternative to defining a super-type of sipWrapperType (which isn't
+-	possible with the limited API). Bumped the major ABI version number.
+-	[5e9de8cde212]
+-
+-2016-08-24  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/metasrc/lexer.l, sipgen/metasrc/parser.y,
+-	sipgen/sip.h.in, siplib/sip.h.in.in, siplib/siplib.c.in,
+-	sphinx/directives.rst:
+-	Added the use_limited_api argument to the %Module directive. Changed
+-	the API of %BIGetBufferCode when using the limited API.
+-	[10d7121c07e3]
+-
+-2016-08-23  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* rbproduct.py:
+-	Merged the 4.18-maint branch into the trunk.
+-	[d92384aa5baf]
+-
+-	* sipgen/gencode.c:
+-	Fixed the handling of global unsigned constants.
+-	[a45bec408ec2] <4.18-maint>
+-
+-	* sphinx/conf.py.in:
+-	Fixed the copyright notice in the docs.
+-	[17475357a153] <4.18-maint>
+-
+-2016-08-08  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* README, build.py:
+-	Removed the old internal build system leaving the minimum needed to
+-	build from hg without the new build system.
+-	[dbbced5689a8] <4.18-maint>
+-
+-2016-07-25  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.18.1 for changeset 81021a5690ce
+-	[8f5b6c8fe5f1] <4.18-maint>
+-
+-	* NEWS:
+-	Released as v4.18.1.
+-	[81021a5690ce] [4.18.1] <4.18-maint>
+-
+-2016-07-22  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* Roadmap.rst:
+-	Updated the Roadmap.
+-	[1226013f2516] <4.18-maint>
+-
+-	* NEWS:
+-	Updated the NEWS file.
+-	[26a4fd92bf59] <4.18-maint>
+-
+-2016-07-03  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/objmap.c:
+-	Fixed a problem with stale aliases for objects created by C/C++.
+-	[b493c6f3e015] <4.18-maint>
+-
+-2016-06-21  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* rb-product, rbproduct.py:
+-	Replaced the product plugin with a product file.
+-	[a10b0caa91a8] <4.18-maint>
+-
+-2016-06-20  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* rbproduct.py:
+-	Product plugin changes for rb-tools API changes.
+-	[86f51ad3ac30] <4.18-maint>
+-
+-	* rbproduct.py:
+-	Debugged the product plugin.
+-	[67a81861273c] <4.18-maint>
+-
+-	* rbproduct.py:
+-	Added support for a minimal build and release build types.
+-	[8cc794662db5] <4.18-maint>
+-
+-2016-06-18  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* rbproduct.py:
+-	Tewaks to the product plugin.
+-	[b2fd658f11cf] <4.18-maint>
+-
+-2016-06-15  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* rbproduct.py:
+-	Debugged the support for rb-release.
+-	[38cdb78872f4] <4.18-maint>
+-
+-2016-06-13  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* rbproduct.py:
+-	Updated the product plugin to support rb-release.
+-	[ecb166af3ad3] <4.18-maint>
+-
+-2016-06-10  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fixed a regression in the handling of a cast with a diamond
+-	hierachy.
+-	[91206af66161] <4.18-maint>
+-
+-2016-06-02  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* rbproduct.py:
+-	Implemented the different build types.
+-	[15184d86e394] <4.18-maint>
+-
+-	* rbproduct.py:
+-	Updates to the product plugin.
+-	[23ca59449373] <4.18-maint>
+-
+-2016-06-01  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* rbproduct.py:
+-	Updated the product plugin to simplify the class hierachy.
+-	[a977c7f870f7] <4.18-maint>
+-
+-	* .hgignore, rbproduct.py:
+-	The product plugin will now do a default build.
+-	[8c433398f573] <4.18-maint>
+-
+-2016-05-09  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* rbproduct.py:
+-	Updated the product plugin for the latest rbtools changes.
+-	[a4a0a84984dc] <4.18-maint>
+-
+-2016-05-05  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* configure.py.in:
+-	Fixed a bug in out-of-source builds.
+-	[f9602fd24f17] <4.18-maint>
+-
+-2016-04-22  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* METADATA.in:
+-	Updated the meta-data to say that 64-bit Linux wheels are available
+-	at PyPI.
+-	[5602445cb458] <4.18-maint>
+-
+-2016-04-13  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.18 for changeset b51768a1749e
+-	[1da474e6ccc1]
+-
+-	* NEWS, sphinx/specification_files.rst:
+-	Released as v4.18.
+-	[b51768a1749e] [4.18]
+-
+-	* METADATA.in, sipgen/export.c, sipgen/type_hints.c:
+-	Fixed the type hints for arrays.
+-	[02a712634ce1]
+-
+-2016-04-09  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* METADATA.in:
+-	Updated the description in the meta-data.
+-	[d9eb656132f3]
+-
+-2016-04-08  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* METADATA.in:
+-	Further tweak to METADATA.in.
+-	[9acfb4baa44c]
+-
+-	* METADATA.in:
+-	Use v1.1 meta-data rather than v2.0.
+-	[8d9645471343]
+-
+-	* METADATA.in:
+-	Fixed a typo.
+-	[4a9ee34e65c3]
+-
+-	* METADATA.in, rbproduct.py:
+-	Added the METADATA.in file.
+-	[39106871989b]
+-
+-2016-04-05  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* rbproduct.py:
+-	Updated the product plugin.
+-	[e42e999389f9]
+-
+-	* rbproduct.py:
+-	Added the rbtools product plugin.
+-	[b9ba57967915]
+-
+-2016-03-30  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sphinx/incompatibilities.rst:
+-	Fixed a Sphinx warning message.
+-	[ae966103325c]
+-
+-	* sipgen/main.c, sipgen/sip.h.in, sipgen/transform.c:
+-	Fixed the use of SIP_NORETURN.
+-	[b3a916e0bc78]
+-
+-2016-03-25  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/export.c:
+-	Fixed a regression in the exporting of the XML API files.
+-	[c7714bbbdae7]
+-
+-	* build.py, sphinx/build_system.rst, sphinx/c_api.rst,
+-	sphinx/python_api.rst:
+-	Adopt the new standards for naming development versions.
+-	[72140f544ef1]
+-
+-	* sphinx/annotations.rst:
+-	Fixed a bug in the documentation.
+-	[9e4ee12928cd]
+-
+-	* .hgignore:
+-	Added the .hgignore file.
+-	[e1d2556ce4a2]
+-
+-2016-03-04  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	__long__ gets translated to __int__ for Python v3.
+-	[a4f8a7810cc3]
+-
+-2016-03-01  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/type_hints.c, sphinx/annotations.rst:
+-	Type hints are ignored if an argument is constrained.
+-	[f041cf891a29]
+-
+-	* sipgen/type_hints.c:
+-	Implement the flattening of Unions in type hints.
+-	[ff5f0d0251e0]
+-
+-2016-02-29  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/sip.h.in, sipgen/type_hints.c:
+-	Reimplemented the type hint parser so it can handle recursive
+-	definitions properly.
+-	[506e30d92b51]
+-
+-2016-02-27  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/type_hints.c:
+-	Fixed type hints for enums in mapped types.
+-	[efb04ab24462]
+-
+-	* sipgen/type_hints.c:
+-	Fixed type hints for the return values of functions.
+-	[b5c392c71f78]
+-
+-	* sipgen/type_hints.c:
+-	Added Iterable to the list of known typing module objects.
+-	[a1d1a573a304]
+-
+-2016-02-26  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/sip.h.in, sipgen/type_hints.c:
+-	Fixed the handling of recursively defined type hints.
+-	[b5abe12b4968]
+-
+-2016-02-25  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/sip.h.in, sipgen/type_hints.c:
+-	The typing module is now imported as a whole rather than individual
+-	objects.
+-	[ac67b3f0bd95]
+-
+-2016-02-24  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sip.pyi:
+-	Fixed the Buffer type hint.
+-	[78a799aec114]
+-
+-	* sipgen/type_hints.c:
+-	Don't generate type hints for the sequence concat and repeat slots
+-	(and the inplace versions).
+-	[a5ae3982ff5f]
+-
+-	* sipgen/metasrc/parser.y, sphinx/directives.rst:
+-	Exported type hint code is no longer included in the module that
+-	defines it.
+-	[442b3ed07ae6]
+-
+-	* sipgen/type_hints.c:
+-	Exclude external classes when looking up a class.
+-	[61fe4c76a394]
+-
+-	* sipgen/transform.c, sipgen/type_hints.c:
+-	Fixed type hints and docstrings for const template arguments.
+-	[679c13adda6a]
+-
+-	* sipgen/metasrc/parser.y, sipgen/sip.h.in, sipgen/type_hints.c,
+-	sphinx/directives.rst:
+-	%TypeHintCode can now be used in a class.
+-	[053c7351dba2]
+-
+-2016-02-19  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/type_hints.c:
+-	Don't generate type hints for slots that can return
+-	Py_NotImplemented. Make sure callables generate a valid (but vague)
+-	type hint.
+-	[883918a8dc36]
+-
+-2016-02-18  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sip.pyi, sipgen/type_hints.c:
+-	Tweaks to the type hint support.
+-	[785978d8f7e3]
+-
+-2016-02-16  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/metasrc/parser.y, sipgen/sip.h.in, sipgen/transform.c,
+-	sipgen/type_hints.c, sphinx/annotations.rst:
+-	Added the /TypeHint/, /TypeHintOut/ and /TypeHintValue/ class
+-	annotations.
+-	[4f5dc2c51d06]
+-
+-	* sipgen/type_hints.c:
+-	Moved the old-style signal/slot type hints to PyQt4.
+-	[4689a40f7e7d]
+-
+-2016-02-15  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/metasrc/parser.y, sipgen/sip.h.in, sipgen/transform.c,
+-	sphinx/annotations.rst:
+-	Implemented /TypeHintValue/ as a mapped type annotation.
+-	[2418e7f7760d]
+-
+-	* build.py:
+-	Make sure sip.pyi is included in the source package.
+-	[1eabde271e53]
+-
+-2016-02-11  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/metasrc/lexer.l, sipgen/metasrc/parser.y,
+-	sipgen/transform.c, siplib/siplib.c.in:
+-	Eliminate a few compiler warnings.
+-	[e864a0451a4a]
+-
+-2016-02-10  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/type_hints.c:
+-	More fixes for Optional handling.
+-	[365d31de81fd]
+-
+-	* sipgen/type_hints.c:
+-	Use Optional properly.
+-	[ab7d66d1ea0d]
+-
+-2016-02-09  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/type_hints.c:
+-	PY_TYPE and PY_SLICE aren't actually needed.
+-	[9778770c65a5]
+-
+-2016-02-08  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/type_hints.c:
+-	Fixed the translation of Any to object in docstrings.
+-	[7571d96c1f79]
+-
+-	* sipgen/export.c, sipgen/gencode.c, sipgen/sip.h.in,
+-	sipgen/type_hints.c:
+-	Docstrings now use a format based on type hints.
+-	[9de9b0470aa6]
+-
+-2016-02-05  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/transform.c:
+-	Don't complain about a lack of %SetCode when /NoSetter/ is
+-	specified.
+-	[cf4db5eb171a]
+-
+-	* sipgen/metasrc/parser.y:
+-	Fixed some typos in error messages.
+-	[82a34911686f]
+-
+-	* sipgen/metasrc/lexer.l, sipgen/metasrc/parser.y,
+-	sphinx/directives.rst:
+-	Renamed %ModuleTypeHintCode to %TypeHintCode.
+-	[73b214c14dde]
+-
+-	* sipgen/type_hints.c, sphinx/annotations.rst:
+-	Documented the /NoTypeHint/ annotations.
+-	[26e59a86ca45]
+-
+-	* sipgen/metasrc/parser.y, sipgen/sip.h.in, sipgen/transform.c,
+-	sipgen/type_hints.c:
+-	Implemented the /NoTypeHint/ annotation. Fixed a bug to make sure
+-	type header code is included before enum slot code needs it.
+-	[1943d4866c73]
+-
+-	* sipgen/metasrc/parser.y, sipgen/type_hints.c:
+-	More flexible handling of ellipsis when /NoArgParser/ is specified.
+-	[7097a0008042]
+-
+-	* sipgen/metasrc/parser.y, sipgen/sip.h.in, sipgen/type_hints.c:
+-	Protect against (possible) recursion when handling type hints for
+-	mapped types.
+-	[9402857f5eb6]
+-
+-	* sipgen/metasrc/parser.y, sipgen/sip.h.in, sipgen/transform.c,
+-	sipgen/type_hints.c:
+-	Fixed class /TypeHintIn/ when used with a template.
+-	[3a914d9789e0]
+-
+-2016-02-04  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/metasrc/parser.y, sipgen/sip.h.in, sipgen/type_hints.c,
+-	sphinx/annotations.rst:
+-	Added /TypeHintIn/ as a class annotation.
+-	[92d3d32ebf64]
+-
+-2016-02-03  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/export.c, sipgen/metasrc/parser.y, sipgen/sip.h.in,
+-	sipgen/transform.c, sipgen/type_hints.c:
+-	Completed the implementation of /TypeHintIn/ and /TypeHintOut/.
+-	[70e9172c61b7]
+-
+-	* sipgen/export.c, sipgen/metasrc/parser.y, sipgen/sip.h.in:
+-	Implement /TypeHintValue/ as a synonym for /DocValue/ for the
+-	moment.
+-	[df8230d91f9f]
+-
+-	* sipgen/metasrc/parser.y, sphinx/annotations.rst:
+-	Adde the stubs of the /TypeHintIn/, /TypeHintOut/ and
+-	/TypeHintValue/ annotations.
+-	[aeb5d848b98a]
+-
+-	* sipgen/metasrc/parser.y, sphinx/annotations.rst:
+-	Deprecated /DocType/ and /DocValue/.
+-	[ec369060cd94]
+-
+-	* sipgen/main.c, sipgen/metasrc/parser.y, sipgen/type_hints.c,
+-	sphinx/command_line.rst:
+-	Added the -f command line option to treat warnings as errors.
+-	[fc945a2d732f]
+-
+-2016-02-02  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/type_hints.c:
+-	Added Iterator and Mapping to the objecys imported from typing.
+-	[6d439bc77538]
+-
+-	* sipgen/type_hints.c:
+-	Fixed references to mapped types imported from other modules.
+-	[b579781f2a2a]
+-
+-	* sipgen/type_hints.c:
+-	Don't try and create type hints for global slots.
+-	[11562a825b7c]
+-
+-	* sipgen/type_hints.c:
+-	Bug fix when looking up enums.
+-	[a4b89fac02d3]
+-
+-	* sipgen/type_hints.c:
+-	Added PEP 484 support for composite modules.
+-	[99e626f4fd23]
+-
+-	* sipgen/type_hints.c:
+-	Fixed PEP 484 support for all callables with a non-default API
+-	version.
+-	[b2f8e2fed83d]
+-
+-	* sipgen/type_hints.c:
+-	Completed the PEP 484 support for mapped types.
+-	[b06408ae2397]
+-
+-	* sipgen/export.c, sipgen/sip.h.in, sipgen/type_hints.c:
+-	More PEP 484 bug fixes.
+-	[3e4df4d97ba5]
+-
+-2016-01-31  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, sphinx/directives.rst, sphinx/specification_files.rst:
+-	Documented the %ExportedTypeHintCode and %ModuleTypeHintCode
+-	directives.
+-	[cc7f789360b8]
+-
+-	* NEWS, sipgen/metasrc/lexer.l, sipgen/metasrc/parser.y,
+-	sipgen/sip.h.in, sipgen/type_hints.c, sphinx/directives.rst:
+-	Added the %ExportedTypeHintCode and %ModuleTypeHintCode directives.
+-	[aef93197b065]
+-
+-	* sipgen/metasrc/parser.y, sipgen/type_hints.c,
+-	sphinx/annotations.rst:
+-	Renamed /HintType/ to /TypeHint/.
+-	[70c8915f680a]
+-
+-2016-01-30  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/metasrc/parser.y, sipgen/sip.h.in, sipgen/type_hints.c:
+-	More PEP 484 support.
+-	[ea6e7a7ae51f]
+-
+-2016-01-29  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/metasrc/parser.y, sipgen/sip.h.in, sipgen/transform.c,
+-	sipgen/type_hints.c:
+-	More PEP 484 support.
+-	[aa1228396424]
+-
+-2016-01-28  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/metasrc/parser.y, sipgen/sip.h.in, sipgen/transform.c,
+-	sipgen/type_hints.c:
+-	Added the stubs for parsing /HintType/ annotations.
+-	[7c0fac66f27c]
+-
+-	* sipgen/gencode.c, sipgen/metasrc/parser.y, sipgen/sip.h.in,
+-	sipgen/transform.c, sipgen/type_hints.c:
+-	Improved the lookup of QObject.
+-	[a2d8330df89d]
+-
+-2016-01-27  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/type_hints.c:
+-	More PEP 484 support.
+-	[336749ea71c5]
+-
+-	* sipgen/type_hints.c, sphinx/annotations.rst:
+-	HintType will now fallback to DocType if the latter is specified.
+-	[4423da336fbb]
+-
+-	* sipgen/metasrc/parser.y, sipgen/sip.h.in, sipgen/transform.c,
+-	sipgen/type_hints.c, sphinx/annotations.rst:
+-	Added the /HintType/ annotation.
+-	[2985d2d641d4]
+-
+-	* sipgen/type_hints.c:
+-	More PEP 484 support.
+-	[21e70ef4b15f]
+-
+-2016-01-26  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/sip.h.in, sipgen/type_hints.c:
+-	More PEP 484 support.
+-	[dd04be5e4e4f]
+-
+-	* sipgen/export.c, sipgen/gencode.c, sipgen/sip.h.in,
+-	sipgen/type_hints.c:
+-	More support for PEP 484.
+-	[353fe29217fb]
+-
+-	* siplib/siplib.c.in:
+-	Reverted the use of simplewrapper for mapped types.
+-	[14ba1e5b1e5b]
+-
+-	* siplib/siplib.c.in:
+-	Namespaces and mapped types now default to simplewrapper as their
+-	super-type.
+-	[f7fd77d1cd4e]
+-
+-2016-01-25  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/export.c, sipgen/gencode.c, sipgen/main.c, sipgen/sip.h.in,
+-	sipgen/sipgen.sbf, sipgen/type_hints.c, sphinx/command_line.rst,
+-	sphinx/introduction.rst.in:
+-	Initial support for generating PEP484 type hints.
+-	[4191467f125a]
+-
+-	* sip.pyi:
+-	Added None return types to the stub file.
+-	[314ef3cd76ed]
+-
+-2016-01-24  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* configure.py.in:
+-	Hard-code the name of the stub file (rather than handle bespoke
+-	module names).
+-	[e1e4b29eb1a6]
+-
+-	* configure.py.in, sip.pyi, sphinx/installation.rst:
+-	Added the sip.pyi type hints stub file.
+-	[30e58feee19f]
+-
+-2016-01-22  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sphinx/c_api.rst:
+-	Minor docs change.
+-	[dd03f114259c]
+-
+-2016-01-17  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/metasrc/parser.y, sphinx/specification_files.rst:
+-	Deprecated SIP_SLOT.
+-	[2b821ae5e9f1]
+-
+-	* Roadmap.rst:
+-	Updated the roadmap.
+-	[495ebc034f99]
+-
+-	* sphinx/annotations.rst:
+-	Deprecated the SingleShot annotation.
+-	[aa46307e00b4]
+-
+-	* sipgen/metasrc/parser.y:
+-	Deprecated SIP_RXOBJ_CON and SIP_SLOT_CON.
+-	[affb0c5b465c]
+-
+-2016-01-16  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/metasrc/parser.y, sphinx/specification_files.rst:
+-	Deprecated SIP_SIGNAL.
+-	[865e00b6ffa0]
+-
+-2016-01-15  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/metasrc/parser.y, sphinx/specification_files.rst:
+-	Deprecated SIP_ANYSLOT.
+-	[8199aa8980e8]
+-
+-	* sipgen/metasrc/parser.y, sphinx/specification_files.rst:
+-	Deprecated SIP_QOBJECT.
+-	[fb9c94746255]
+-
+-	* sipgen/metasrc/parser.y, sphinx/specification_files.rst:
+-	Deprecated SIP_RXOBJ_DIS.
+-	[0f26db165557]
+-
+-	* sipgen/metasrc/parser.y, sphinx/specification_files.rst:
+-	Deprecated SIP_SLOT_DIS.
+-	[051775601278]
+-
+-2016-01-10  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* Merged the current maintenance branch.
+-	[b7bd085548b6]
+-
+-	* sipgen/gencode.c, sipgen/transform.c:
+-	Fixes to the handling of fatal errors.
+-	[f35ebfa4c27f] <4.17-maint>
+-
+-	* Merged the current maintenance branch with the default.
+-	[d244ec3a2dec]
+-
+-2016-01-09  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* configure.py.in, sipgen/export.c, sipgen/gencode.c, sipgen/main.c,
+-	sipgen/metasrc/lexer.l, sipgen/metasrc/parser.y, sipgen/sip.h.in,
+-	sipgen/transform.c, siplib/siplib.c.in:
+-	Fixed all compiler warnings.
+-	[9dbdf30558aa] <4.17-maint>
+-
+-	* sipgen/metasrc/parser.y, sipgen/sip.h.in, siplib/siplib.c.in,
+-	sphinx/specification_files.rst:
+-	Some minor tidy-ups.
+-	[b4edb1990e23] <4.17-maint>
+-
+-	* Merged the current maintenance branch with the default.
+-	[782cf5e8441e]
+-
+-2015-12-20  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Another attempt and preventing accesses to SIP data structures after
+-	the interpreter has gone.
+-	[138eb1eded99] <4.17-maint>
+-
+-2015-12-18  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in, siplib/siplib.c.in,
+-	sphinx/c_api.rst:
+-	Added sipGetInterpreter() to the public API. Avoid the Python
+-	interpreter if it has gone when getting a QMetaObject.
+-	[61d8f0f6f5c0] <4.17-maint>
+-
+-2015-12-12  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Cleared a benign exception in the handling of mixins.
+-	[602884540b54] <4.17-maint>
+-
+-2015-12-02  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Fixed the previous fix.
+-	[17876e15c41d] <4.17-maint>
+-
+-2015-11-25  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Restrict the invocation of sub-class convertors to those that handle
+-	direct sub-classes.
+-	[57cbe5142d57] <4.17-maint>
+-
+-2015-10-28  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Invoking sub-class convertor code turns out to be quite expensive so
+-	check the object map first. Check the object map again if the
+-	convertor code needed to be invoked. This change is absolutely
+-	fundamental to the inner workings so may have some unexpected
+-	consequences.
+-	[77fde6c0ee2d] <4.17-maint>
+-
+-2015-10-27  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/sip.h.in, sipgen/transform.c,
+-	siplib/siplib.c.in:
+-	Refactored the handling of casts so that cast functions are only
+-	generated for classes that multiply inherit somewhere in their class
+-	hierarchy.
+-	[14bfbaf7431a] <4.17-maint>
+-
+-2015-10-24  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.17 for changeset 0cbb680b4f69
+-	[36d16e74cf7f]
+-
+-	* NEWS:
+-	Released as v4.17.
+-	[0cbb680b4f69] [4.17]
+-
+-2015-09-10  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/sip.h.in.in:
+-	Fix extensions that use Python v3.5 slots but are being built with
+-	an earlier version.
+-	[9102d6c3daf0]
+-
+-2015-09-08  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* specs/win32-msvc2015:
+-	Tweak win32-msvc2015 to suppress a warning message.
+-	[74754ca3e59f]
+-
+-	* configure.py.in, specs/win32-msvc2010, specs/win32-msvc2015:
+-	Added win32-msvc2015 to the build system.
+-	[fca4f2fcbb39]
+-
+-2015-09-03  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/sip.h.in.in:
+-	Added a comment about adding new slot types and its effect on the
+-	ABI.
+-	[50af972e1652]
+-
+-2015-09-02  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/metasrc/parser.y, sipgen/sip.h.in,
+-	siplib/sip.h.in.in, siplib/siplib.c.in,
+-	sphinx/specification_files.rst:
+-	Added support for PEP 492, ie. the __await__, __aiter__ and
+-	__anext__ special methods.
+-	[f5d07b919355]
+-
+-	* sipgen/metasrc/parser.y, siplib/siplib.c.in:
+-	Add __aenter__ and __aexit__ and non-lazy methods.
+-	[979e23401d1d]
+-
+-	* sipgen/metasrc/parser.y:
+-	Fixed a regression in the handling of the __len__ annotation.
+-	[cad3bdaecf3e]
+-
+-	* sphinx/static/default.css:
+-	Merged the 4.16-main branch into the trunk.
+-	[b4f30681b90f]
+-
+-	* sipgen/gencode.c, sipgen/metasrc/parser.y, sipgen/sip.h.in,
+-	siplib/sip.h.in.in, siplib/siplib.c.in, siplib/voidptr.c,
+-	sphinx/annotations.rst, sphinx/specification_files.rst:
+-	Implemented support for PEP465 (array infix operator) ie. the
+-	__matmul__ and __imatmul__ special methods and function annotations
+-	of the same name.
+-	[ff867feb8f90] <4.16-maint>
+-
+-	* siplib/voidptr.c:
+-	Tweaked an exception message to follow the style adopted in Python
+-	v3.5.
+-	[e98693bf17d7] <4.16-maint>
+-
+-2015-08-02  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Fixed the error handling of sipCallMethod() when a re-implementation
+-	raises an exception.
+-	[27c61f660fba] <4.16-maint>
+-
+-2015-07-17  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.16.9 for changeset 87de938efba2
+-	[90aaa31768c9] <4.16-maint>
+-
+-	* NEWS:
+-	Released as v4.16.9.
+-	[87de938efba2] [4.16.9] <4.16-maint>
+-
+-	* sipgen/export.c:
+-	Added the "virtual" attribute to the exported XML.
+-	[e37fcc2e29e2] <4.16-maint>
+-
+-2015-07-10  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Improved the detail of the text of the exception
+-	sipBadCatcherResult() raises.
+-	[4f7ad0a4e353] <4.16-maint>
+-
+-	* siplib/siplib.c.in:
+-	Allow for an /External/ class being referenced when the module
+-	containing its implementation hasn't been imported.
+-	[1574043cc948] <4.16-maint>
+-
+-2015-07-07  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Fix a problem caused by PyQt4 wrapping the QApplication C++ instance
+-	as multiple Python objects.
+-	[42a056fbf006] <4.16-maint>
+-
+-2015-06-30  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Remove an object from the map whenever the pointer ot the C/C++
+-	instance is cleared.
+-	[8dd533ab6ce9] <4.16-maint>
+-
+-2015-06-20  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fixed a missing reference in the previous fix.
+-	[1a2704282933] <4.16-maint>
+-
+-	* sipgen/gencode.c:
+-	Fixed a regression in the handling of static non-pointer object
+-	variables.
+-	[dafbaadea76b] <4.16-maint>
+-
+-2015-06-11  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.16.8 for changeset f87e232098eb
+-	[95abaccb67d6] <4.16-maint>
+-
+-	* NEWS:
+-	Released as v4.16.8.
+-	[f87e232098eb] [4.16.8] <4.16-maint>
+-
+-2015-06-09  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/sip.h.in.in:
+-	Bump the internal API version number.
+-	[6069463e8937] <4.16-maint>
+-
+-	* sipgen/gencode.c, sipgen/metasrc/parser.y, siplib/sip.h.in.in,
+-	siplib/siplib.c.in:
+-	Fixed the handling of non-pointer object variables so that they are
+-	only wrapped once and the Python object cached.
+-	[11a92ebd4840] <4.16-maint>
+-
+-2015-06-08  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sphinx/using.rst:
+-	Fixed a type in the docs.
+-	[7d0d2cede024] <4.16-maint>
+-
+-2015-06-02  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS:
+-	Updated the NEWS file.
+-	[92c83f02758f] <4.16-maint>
+-
+-2015-05-24  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/metasrc/parser.y, sphinx/specification_files.rst:
+-	Added support for the current Python3 exceptions.
+-	[79afcf752c2a] <4.16-maint>
+-
+-2015-05-08  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Fixed bugs maintaining the deleted state of wrapped instances.
+-	[e5674f034e48] <4.16-maint>
+-
+-2015-03-25  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/metasrc/parser.y:
+-	Fixed a regression in v4.16.7 that affects methods with %MethodCode
+-	and the __len__ annotation.
+-	[765b6874363f] <4.16-maint>
+-
+-	* .hgtags:
+-	Added tag 4.16.7 for changeset 9076f70a012c
+-	[dffe9ad569c9] <4.16-maint>
+-
+-	* NEWS:
+-	Released as v4.16.7.
+-	[9076f70a012c] [4.16.7] <4.16-maint>
+-
+-	* sphinx/static/classic.css, sphinx/static/default.css:
+-	Fixed the stylesheet.
+-	[af2e27024d33] <4.16-maint>
+-
+-2015-03-21  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fix the declaration of sipRes in the %VirtualCallCode support.
+-	[bd92aad3cf7d] <4.16-maint>
+-
+-2015-03-19  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sphinx/specification_files.rst:
+-	Added %VirtualCallCode to the BNF.
+-	[cf1ad8f7be68] <4.16-maint>
+-
+-	* sphinx/directives.rst:
+-	Documented %VirtualCallCode.
+-	[752beb1cd641] <4.16-maint>
+-
+-	* sipgen/gencode.c, sipgen/metasrc/lexer.l, sipgen/metasrc/parser.y,
+-	sipgen/sip.h.in:
+-	Renamed %InvokeCode to %VirtualCallCode and only use it in a
+-	generated virtual reimplementation.
+-	[82c8303a8041] <4.16-maint>
+-
+-	* sipgen/gencode.c, sipgen/metasrc/lexer.l, sipgen/metasrc/parser.y,
+-	sipgen/sip.h.in:
+-	Implemented the %InvokeCode directive.
+-	[d85f3584b06f] <4.16-maint>
+-
+-	* siplib/siplib.c.in:
+-	Fixed the handling of keyword argument when keywords can be used for
+-	all arguments.
+-	[2ae037bbfa23] <4.16-maint>
+-
+-	* sphinx/directives.rst:
+-	Fixed a documentation typo.
+-	[fb4c980c92cc] <4.16-maint>
+-
+-	* sipgen/gencode.c, sipgen/sip.h.in, sipgen/transform.c:
+-	Backed out changeset 9e11298be101 A more correct solution is
+-	required.
+-	[e212465fed26] <4.16-maint>
+-
+-2015-03-16  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/sip.h.in, sipgen/transform.c:
+-	Reverted to the pre-v4.15 behavour when generating the scope of a
+-	call to a virtual implementation where the scope may be ambiguous.
+-	This may not be the right call, but at least the code compiles.
+-	[9e11298be101] <4.16-maint>
+-
+-2015-03-11  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/transform.c:
+-	Fixed a bug where the original typedef of an argument of a mapped
+-	template type was being corrupted.
+-	[f652446e2462] <4.16-maint>
+-
+-	* sphinx/conf.py.in:
+-	Updated for sphinx v1.3.
+-	[569a9695bc2f] <4.16-maint>
+-
+-	* sipgen/sip.h.in:
+-	Fixed a regression in the handling of module flags.
+-	[3f8c05ac8e47] <4.16-maint>
+-
+-2015-02-25  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.16.6 for changeset 1c5f5c8c7416
+-	[6c73a1f41add] <4.16-maint>
+-
+-	* NEWS:
+-	Released v4.16.6.
+-	[1c5f5c8c7416] [4.16.6] <4.16-maint>
+-
+-	* NEWS:
+-	Updated the NEWS file.
+-	[bf261aa4b322] <4.16-maint>
+-
+-2015-02-23  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Added support for module-level PyObjects.
+-	[136913548818] <4.16-maint>
+-
+-2015-02-14  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* configure.py.in:
+-	Installing into a virtual env should now work.
+-	[5e133f99d74e] <4.16-maint>
+-
+-	* siplib/siplib.c.in:
+-	Fixed the handling of an empty dict of keyword arguments.
+-	[5f5542824235] <4.16-maint>
+-
+-2015-02-09  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/main.c, sphinx/command_line.rst:
+-	The -T command line option is now ignored and deprecated. Timestamps
+-	in generated files are always disabled.
+-	[9b1a195afe04] <4.16-maint>
+-
+-	* sipgen/main.c, sphinx/command_line.rst:
+-	Added support for the '@file' format for passing additional command
+-	line options in a file.
+-	[6c270132db87] <4.16-maint>
+-
+-2015-02-07  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/main.c, sphinx/command_line.rst:
+-	Deprecated the -z option to the code generator.
+-	[b1dff38b9766] <4.16-maint>
+-
+-2015-02-06  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Fixed a couple of compiler warnings.
+-	[d653de687fd4] <4.16-maint>
+-
+-2015-02-04  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* Merged the current 4.16-maint branch into the trunk.
+-	[f207b8886557]
+-
+-2015-01-30  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Fixed the lookup of slots.
+-	[56c254273cd8] <4.16-maint>
+-
+-2015-01-05  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/metasrc/parser.y:
+-	Fixed an invalid deprecation warning.
+-	[3c5425fa3c80] <4.16-maint>
+-
+-2015-01-02  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/metasrc/parser.y, sipgen/sip.h.in,
+-	sphinx/annotations.rst:
+-	Added the /FileExtension/ class annotation.
+-	[51f7769fe32f] <4.16-maint>
+-
+-	* LICENSE, Roadmap.rst, build.py, configure.py.in, sipgen/export.c,
+-	sipgen/extracts.c, sipgen/gencode.c, sipgen/heap.c, sipgen/main.c,
+-	sipgen/metasrc/lexer.l, sipgen/metasrc/parser.y, sipgen/sip.h.in,
+-	sipgen/sipgen.sbf, sipgen/transform.c, siplib/apiversions.c,
+-	siplib/array.c, siplib/array.h, siplib/bool.cpp,
+-	siplib/descriptors.c, siplib/objmap.c, siplib/qtlib.c,
+-	siplib/sip.h.in.in, siplib/sipint.h, siplib/siplib.c.in,
+-	siplib/siplib.sbf.in, siplib/threads.c, siplib/voidptr.c,
+-	siputils.py, sphinx/conf.py.in, sphinx/directives.rst:
+-	Updated the copyright notices.
+-	[ccd0bdd9b21c] <4.16-maint>
+-
+-	* siputils.py, sphinx/build_system.rst, sphinx/c_api.rst,
+-	sphinx/python_api.rst:
+-	Updated the docs in preparation for snapshots being called previews.
+-	[c42e02f71e27] <4.16-maint>
+-
+-2014-12-31  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fixed a code generation bug when a C/C++ argument was a pointer to a
+-	struct/class and the Python argument was a void*.
+-	[51b0b1f31cea] <4.16-maint>
+-
+-2014-12-25  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* configure.py.in, siputils.py:
+-	Fixed the --target-py-version flag to configure.py.
+-	[0e9e078d2d18] <4.16-maint>
+-
+-2014-12-24  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.16.5 for changeset 9c27ed5e0d77
+-	[6aa131ac48e8] <4.16-maint>
+-
+-	* NEWS:
+-	Released as v4.16.5.
+-	[9c27ed5e0d77] [4.16.5] <4.16-maint>
+-
+-2014-12-23  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fixed SIP_SLOT_CON and SIP_SLOT_DIS so that they generate const
+-	char*.
+-	[7f4c922a779f] <4.16-maint>
+-
+-2014-12-18  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/array.c, siplib/voidptr.c, sphinx/c_api.rst,
+-	sphinx/python_api.rst:
+-	Added sip.voidptr.asarray().
+-	[d3b5a974ac69] <4.16-maint>
+-
+-2014-12-07  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/voidptr.c:
+-	Updated a deprecated definition of method arguments.
+-	[529b8cd2ab89] <4.16-maint>
+-
+-2014-11-29  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siputils.py:
+-	Fixed a regression when adding the VPATH support for moc.
+-	[c2c285a80412] <4.16-maint>
+-
+-2014-11-16  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* build.py:
+-	A source package now includes a full ChangeLog.
+-	[c005a6d2e53e] <4.16-maint>
+-
+-2014-11-05  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siputils.py:
+-	Build system fix so that generated Makefiles support VPATH with moc.
+-	[3f9301ccb08a] <4.16-maint>
+-
+-2014-11-04  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* configure.py.in, siputils.py, sphinx/build_system.rst:
+-	Fixed bugs with out-of-tree builds.
+-	[4579c80da1be] <4.16-maint>
+-
+-	* sphinx/build_system.rst, sphinx/distutils.rst:
+-	Updated the docs regarding the build system and SIP v5.
+-	[2828a3bb25af] <4.16-maint>
+-
+-	* sphinx/c_api.rst:
+-	Updated the docs for sip.SIP_VERSION_STR.
+-	[04e7630e6a41] <4.16-maint>
+-
+-2014-11-03  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* build.py:
+-	Removed the reference to MacHg in the internal build script.
+-	[b1668849c472] <4.16-maint>
+-
+-2014-10-23  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.16.4 for changeset c5d0da367a1e
+-	[cb045f5e074a] <4.16-maint>
+-
+-	* NEWS:
+-	Released as v4.16.4.
+-	[c5d0da367a1e] [4.16.4] <4.16-maint>
+-
+-2014-10-19  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fixed a code generation bug related to encoded C string arguments to
+-	virtuals.
+-	[f230cfcebc36] <4.16-maint>
+-
+-2014-10-15  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/descriptors.c:
+-	Minor fix for Python v2.5 and earlier.
+-	[3b7f6957ae4b] <4.16-maint>
+-
+-2014-10-06  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Reimplemented the __qualname__ support for enums so that it is
+-	always non_NULL (because Python accesses the value directly
+-	internally and doesn't go through the attribute interface).
+-	[c2cfa151229a] <4.16-maint>
+-
+-2014-10-04  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/sip.h.in.in, sphinx/c_api.rst:
+-	Removed SIP_REACQUIRE_GIL as we no longer need it.
+-	[7e026c2613ec] <4.16-maint>
+-
+-	* sipgen/transform.c:
+-	Fixed a recent regression in the de-duplication of virtual catchers.
+-	[65abadff114d] <4.16-maint>
+-
+-2014-10-03  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/sip.h.in.in, sphinx/c_api.rst:
+-	Added SIP_REACQUIRE_GIL.
+-	[9ff042abc188] <4.16-maint>
+-
+-2014-10-01  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/metasrc/parser.y, sipgen/sip.h.in,
+-	sipgen/transform.c, sphinx/annotations.rst:
+-	Added the /AbortOnException/ function annotation.
+-	[835f4d6bcb99] <4.16-maint>
+-
+-	* sipgen/gencode.c, sipgen/metasrc/parser.y, sipgen/transform.c,
+-	sphinx/annotations.rst:
+-	Added the /DisallowNone/ function annotation.
+-	[8b2f4c02e106] <4.16-maint>
+-
+-	* sipgen/export.c, sipgen/gencode.c, sipgen/metasrc/parser.y,
+-	sipgen/sip.h.in, sphinx/annotations.rst:
+-	Implemented the /DisallowNone/ argument annotation.
+-	[d3a7fd6b1344] <4.16-maint>
+-
+-	* sipgen/metasrc/parser.y, sipgen/transform.c, sphinx/annotations.rst,
+-	sphinx/c_api.rst:
+-	Added the AllowNone function annotation.
+-	[9d52162606b5] <4.16-maint>
+-
+-2014-09-26  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/transform.c:
+-	Virtual handlers with handwritten code can no longer be considered
+-	to be the same.
+-	[a4c712b72828] <4.16-maint>
+-
+-2014-09-11  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.16.3 for changeset 8ead57151bd1
+-	[de0c3c076ab3] <4.16-maint>
+-
+-	* NEWS:
+-	Released as v4.16.3.
+-	[8ead57151bd1] [4.16.3] <4.16-maint>
+-
+-2014-09-04  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS:
+-	Updated the NEWS file.
+-	[b5de96615389] <4.16-maint>
+-
+-2014-09-03  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/array.c, siplib/bool.cpp, siplib/siplib.c.in:
+-	Eliminated all compiler warnings when building on Windows with
+-	qmake.
+-	[1a321ad68223] <4.16-maint>
+-
+-2014-09-02  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Enums now support PEP 3155 fro Python v3.3 and later.
+-	[a3f8a9b56659] <4.16-maint>
+-
+-2014-07-10  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* build.py, configure.py.in:
+-	Added fixes for QTBUG-39300.
+-	[53f490fe8f52] <4.16-maint>
+-
+-2014-07-03  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.16.2 for changeset 4eb546b2c208
+-	[21412c346e75] <4.16-maint>
+-
+-	* NEWS:
+-	Released as v4.16.2.
+-	[4eb546b2c208] [4.16.2] <4.16-maint>
+-
+-2014-06-22  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fixed a regression that introduced some "modern" C code.
+-	[449e2866018a] <4.16-maint>
+-
+-2014-06-16  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, sipgen/metasrc/parser.y, sphinx/directives.rst:
+-	Deprecated the %ConsolidatedModule directive as it won't be
+-	supported in SIP v5.
+-	[e4dc9d633742] <4.16-maint>
+-
+-2014-06-15  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fixed a bug with /Out/ class pointer arguments in virtual methods.
+-	[8abafd34bfab] <4.16-maint>
+-
+-	* sipgen/gencode.c:
+-	Work around what looks like a Python2 bug in the handling of
+-	composite modules.
+-	[f113aea18630] <4.16-maint>
+-
+-2014-06-09  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.16.1 for changeset efd5e09a4024
+-	[787e2ce426f7] <4.16-maint>
+-
+-	* NEWS:
+-	Released as v4.16.1.
+-	[efd5e09a4024] [4.16.1] <4.16-maint>
+-
+-2014-06-03  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* configure.py.in:
+-	Fixes for Python v2.6.
+-	[3974dcb54776] <4.16-maint>
+-
+-2014-06-01  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fixed a regression in the creating of the build file when generating
+-	individual source files.
+-	[d9229cce7220] <4.16-maint>
+-
+-2014-05-26  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.16 for changeset d3a907d2acd1
+-	[2a310fa9719a]
+-
+-	* NEWS:
+-	Released as v4.16.
+-	[d3a907d2acd1] [4.16]
+-
+-2014-05-25  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/descriptors.c:
+-	Fixed a regression introduced when getting rid of warning messages.
+-	[9472e2f08313]
+-
+-2014-05-23  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* configure.py.in:
+-	Fixed a regression in the handling of the --platform configure.py
+-	option.
+-	[1cc4bd967882]
+-
+-2014-05-18  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Eliminated a couple of (benign) warning messages.
+-	[f6acb8ed7b65]
+-
+-2014-05-16  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS:
+-	Updated the NEWS file.
+-	[d3c64f5117e0]
+-
+-	* sipgen/main.c, sipgen/metasrc/parser.y, sipgen/sip.h.in,
+-	sphinx/command_line.rst, sphinx/directives.rst,
+-	sphinx/incompatibilities.rst:
+-	Changed the handling of timelines so that the latest version is
+-	enabled if no known version is explicitly enabled. Added the -B
+-	option to sip to allow timeline backstops to be defined.
+-	[8a3fb94329aa]
+-
+-2014-05-15  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* configure.py.in:
+-	Fixed a bug in the handling of configuration files.
+-	[61da788f455f]
+-
+-2014-05-14  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Don't generate an interface file if it will be empty.
+-	[3f7d0afde4ce]
+-
+-	* siplib/siplib.c.in:
+-	Ignore overflows when converting Python ints to C/C++.
+-	[8065fb1cb418]
+-
+-2014-05-13  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, sipgen/gencode.c, sipgen/metasrc/parser.y, sipgen/sip.h.in,
+-	sphinx/annotations.rst:
+-	Added the /NoSetter/ variable annotation.
+-	[422cc3b4ee5b]
+-
+-	* sipgen/gencode.c:
+-	Fixed a code generation bug for variables with multi-const types.
+-	[dd6840986c03]
+-
+-2014-05-12  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/array.c, siplib/descriptors.c, siplib/siplib.c.in,
+-	siplib/voidptr.c:
+-	Fixed building against Python v2.5 and earlier.
+-	[be46b0f3b785]
+-
+-	* NEWS, configure.py.in, sphinx/installation.rst:
+-	Added the --no-tools option to configure.py.
+-	[fcc0fc5d24c4]
+-
+-2014-05-11  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sphinx/installation.rst:
+-	Some documentation fixes.
+-	[210151d0ba6a]
+-
+-	* build.py, configurations/rpi_py3.cfg, sphinx/installation.rst:
+-	Removed the configurations directory.
+-	[4b482124587b]
+-
+-	* siplib/apiversions.c, siplib/array.c, siplib/descriptors.c,
+-	siplib/siplib.c.in, siplib/voidptr.c:
+-	Eliminated most warning messages. Fixed a memory leak in the
+-	handling of sip.array.
+-	[63626dea7508]
+-
+-	* configure.py.in, sphinx/installation.rst:
+-	Removed the unneeded support for continuation lines in configuration
+-	files.
+-	[95f40f9a8967]
+-
+-	* NEWS, build.py, configurations/rpi_py3.cfg, configure.py.in,
+-	siputils.py, sphinx/installation.rst:
+-	Removed the --static-root option. Added the --configuration,
+-	--sysroot and --target-py-version options. Added the Raspberry Pi
+-	configuration file.
+-	[e57308c0ef92]
+-
+-2014-05-05  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, build.py, configure.py.in, sphinx/installation.rst:
+-	Added the --use-qmake option to configure.py so that it can be
+-	cross-compiled.
+-	[163331dc90b0]
+-
+-2014-05-04  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* build.py, custom/custom.c, custom/customw.c, custom/mkcustom.py,
+-	sphinx/build_system.rst, sphinx/builtin.rst, sphinx/index.rst:
+-	Removed the (way out of date and superceded by pyqtdeploy) custom
+-	directory.
+-	[4e4a1cbe2f7e]
+-
+-	* NEWS, configure.py.in, sphinx/installation.rst:
+-	Added the --static-root option to configure.py.
+-	[c90befbc77d2]
+-
+-2014-04-26  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siputils.py:
+-	Handle in-line comments in spec files.
+-	[044852da62d4]
+-
+-2014-04-24  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/voidptr.c:
+-	Fixed the previous fix. (This is C not C++.)
+-	[a67e996e00d3]
+-
+-2014-04-23  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, siplib/voidptr.c:
+-	Implemented nb_bool for sip.voidptr.
+-	[7ca5aa6bde10]
+-
+-2014-04-21  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, siplib/qtlib.c, siplib/sipint.h:
+-	Reversed the sense of the argument to check for signal receivers.
+-	[e14829596147]
+-
+-	* NEWS, sipgen/gencode.c, siplib/qtlib.c, siplib/sip.h.in.in,
+-	siplib/sipint.h, siplib/siplib.c.in:
+-	Added sipInvokeSlotEx() as support for the upcoming 'check_receiver'
+-	flag in PyQt's connect().
+-	[d7ef32db3967]
+-
+-2014-04-20  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/lexer.l, sipgen/parser.y:
+-	Merged the v4.15 maintenance branch into the trunk.
+-	[8e55c9f2ba87]
+-
+-2014-04-15  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sphinx/conf.py.in:
+-	Fixed the missing logo thumbnail.
+-	[f53a9094e52e] <4.15-maint>
+-
+-2014-04-08  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in, sphinx/build_system.rst, sphinx/using.rst:
+-	Updated the docs so that pyqtconfig is only mentioned in the context
+-	of PyQt4. Fixed some typos.
+-	[efa359fde2a4] <4.15-maint>
+-
+-2014-03-25  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fixed the generation of Qt signal signatures so that they are
+-	correct for Qt5.
+-	[3f9633204687] <4.15-maint>
+-
+-2014-03-21  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/metasrc/parser.y, sipgen/sip.h.in:
+-	Fixed the handling of platforms and features that are disabled by
+-	other platforms or features.
+-	[0c1b13e45887] <4.15-maint>
+-
+-2014-03-20  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fixed the handling of enums for C++11.
+-	[85e544458789] <4.15-maint>
+-
+-2014-03-14  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.15.5 for changeset 13906834d910
+-	[411bbc879ae6] <4.15-maint>
+-
+-	* NEWS:
+-	Released as v4.15.5.
+-	[13906834d910] [4.15.5] <4.15-maint>
+-
+-2014-03-13  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Make sure an object doesn't already have a parent when adding it in
+-	__init__() (ie. avoid an infinite loop if __init__() is called twice
+-	for an object).
+-	[05c32deeaeed] <4.15-maint>
+-
+-2014-03-05  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS:
+-	Updated the NEWS file.
+-	[8d7c37ddc55d] <4.15-maint>
+-
+-2014-02-22  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in:
+-	Added the PyQt signal hack #3. All versions of signals with optional
+-	arguments are now generated for PyQt4 when built against Qt5.
+-	[22c03a345d4e] <4.15-maint>
+-
+-2014-02-21  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siputils.py:
+-	Fixed the creation of wrapper scripts for Python v3.4 on OS/X.
+-	[93e30c84cbf9] <4.15-maint>
+-
+-2014-02-20  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/metasrc/parser.y, sipgen/sip.h.in,
+-	siplib/sip.h.in.in:
+-	Support for the PyQt4 signal hacks when building against Qt5.
+-	[8bff7edb3c80] <4.15-maint>
+-
+-2014-02-18  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in:
+-	Implemented the PyQt5 signal emitters.
+-	[4fc63f9adb44] <4.15-maint>
+-
+-	* sipgen/gencode.c, sipgen/metasrc/parser.y, sipgen/sip.h.in,
+-	siplib/sip.h.in.in, siplib/siplib.c.in:
+-	Bumped the internal API to v11.0. The PyQt4 and PyQt5 specific data
+-	structures are now completely separate in preparation for the signal
+-	changes needed by PyQt5. Renamed the PyQt4Flags and
+-	PyQt4NoQMetaObject annotations so that they are not PyQt4 specific.
+-	[b96a5e69adb6] <4.15-maint>
+-
+-2014-02-09  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fixed a name clash for a type in a module that has the same name as
+-	the module when building against Python v2.
+-	[d45411f2a001] <4.15-maint>
+-
+-2014-02-06  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siputils.py:
+-	Relax a test in the build system for PyQt v4.10.3 and earlier so
+-	that we don't have to synch releases.
+-	[e6e10c9f08b5] <4.15-maint>
+-
+-2014-02-05  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	sip.wrapinstance() will now handle addresses >32 bits on Windows64.
+-	[5a95f257ccca] <4.15-maint>
+-
+-2014-02-04  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sphinx/annotations.rst:
+-	Fixed the /KeepReference/ function annotation when applied to static
+-	functions.
+-	[2737c3074f4d] <4.15-maint>
+-
+-	* siputils.py:
+-	Removed the requirement that Python must be built as a framework on
+-	OS/X.
+-	[fb6dbd80297b] <4.15-maint>
+-
+-2014-01-22  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/metasrc/parser.y, sipgen/sip.h.in:
+-	Removed the unnecessary (and broken) support for __unicode__().
+-	[0b19f77489ce] <4.15-maint>
+-
+-2014-01-17  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, siputils.py, sphinx/build_system.rst:
+-	The use_arch argument of sipconfig.create_wrapper() will now accept
+-	a space separated set of architectures.
+-	[6fe353128007] <4.15-maint>
+-
+-2014-01-10  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* configure.py.in:
+-	Fixed a bug building on OSX when passing a value of LIBDIR to
+-	configure.py on the command line.
+-	[577bff05ca6d] <4.15-maint>
+-
+-2014-01-07  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.15.4 for changeset 4d629a0d7510
+-	[79a5b5e82ca3] <4.15-maint>
+-
+-	* NEWS:
+-	Released as v4.15.4.
+-	[4d629a0d7510] [4.15.4] <4.15-maint>
+-
+-2014-01-02  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* LICENSE, Roadmap.rst, build.py, configure.py.in, sipgen/export.c,
+-	sipgen/extracts.c, sipgen/gencode.c, sipgen/heap.c, sipgen/main.c,
+-	sipgen/metasrc/lexer.l, sipgen/metasrc/parser.y, sipgen/sip.h.in,
+-	sipgen/sipgen.sbf, sipgen/transform.c, siplib/apiversions.c,
+-	siplib/array.c, siplib/array.h, siplib/bool.cpp,
+-	siplib/descriptors.c, siplib/objmap.c, siplib/qtlib.c,
+-	siplib/sip.h.in.in, siplib/sipint.h, siplib/siplib.c.in,
+-	siplib/siplib.sbf.in, siplib/threads.c, siplib/voidptr.c,
+-	siputils.py, sphinx/conf.py.in, sphinx/directives.rst:
+-	Updated the copyright notices.
+-	[b4a30e5b9970] <4.15-maint>
+-
+-2013-12-29  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Allow the pointers used to store the parsed results from Python
+-	reimplementations to be NULL.
+-	[7b83d16f7d28] <4.15-maint>
+-
+-	* build.py, sipgen/lexer.l, sipgen/metasrc/README,
+-	sipgen/metasrc/lexer.l, sipgen/metasrc/parser.y, sipgen/parser.y:
+-	Moved the lexer and parser meta-source files to a separate directory
+-	to avoid problems with make accidentaly regenerating them.
+-	[c8d48c22ebf7] <4.15-maint>
+-
+-	* build.py:
+-	Remove the __pycache__ directory when cleaning.
+-	[a0682feb1e94] <4.15-maint>
+-
+-2013-12-17  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, siplib/array.c, siplib/sip.h.in.in, siplib/siplib.c.in,
+-	sphinx/c_api.rst:
+-	Added SIP_SSIZE_T_FORMAT to the C API.
+-	[e74243fcc265] <4.15-maint>
+-
+-2013-12-16  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/parser.y:
+-	Fixed the parsing of C++ types involving multiple const and
+-	pointers.
+-	[7a74623b6967] <4.15-maint>
+-
+-2013-10-21  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/array.c, siplib/objmap.c, siplib/sipint.h,
+-	siplib/siplib.c.in, siplib/voidptr.c:
+-	Fixed all the compiler warning messages when building the sip
+-	module.
+-	[5e5fdf4cc35c] <4.15-maint>
+-
+-2013-10-16  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.15.3 for changeset a751e48db99a
+-	[dffbff1c0664] <4.15-maint>
+-
+-	* NEWS:
+-	Released as v4.15.3.
+-	[a751e48db99a] [4.15.3] <4.15-maint>
+-
+-2013-10-13  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/transform.c:
+-	Fixed virtual re-implementations so that the number of generated
+-	Python methods slots is correct and that re-implementations
+-	explicitly marked as virtual are handled correctly.
+-	[aa7806ed2405] <4.15-maint>
+-
+-2013-10-03  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Fixed the format of an exception with Python v2.
+-	[5dc8c370157e] <4.15-maint>
+-
+-2013-09-14  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.15.2 for changeset f8fdf4d1eb87
+-	[82b599f547b1] <4.15-maint>
+-
+-	* NEWS:
+-	Released as v4.15.2.
+-	[f8fdf4d1eb87] [4.15.2] <4.15-maint>
+-
+-2013-09-08  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/array.c, siplib/array.h, siplib/sip.h.in.in,
+-	sphinx/c_api.rst:
+-	sipConvertToArray() will now optionally take ownership of the array
+-	memory. Changed the signatures of sipConvertToArray() and
+-	sipConvertToTypedArray(), but in a source and binary compatible way.
+-	[908d49322dcf] <4.15-maint>
+-
+-	* siplib/array.c, sphinx/c_api.rst:
+-	Added support for char, unsigned char, short, int, float and double
+-	as array types.
+-	[fc41755d6481] <4.15-maint>
+-
+-2013-08-24  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/transform.c:
+-	Further fixes for the handling of virtual methods.
+-	[14732b487dda] <4.15-maint>
+-
+-2013-08-23  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.15.1 for changeset 148b813a559c
+-	[5ef6f2e04687] <4.15-maint>
+-
+-	* NEWS:
+-	Released as v4.15.1.
+-	[148b813a559c] [4.15.1] <4.15-maint>
+-
+-	* sipgen/transform.c:
+-	Fixed a regression in the handling of hidden virtuals.
+-	[15657c502e42] <4.15-maint>
+-
+-2013-08-21  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.15 for changeset 2f84fb045098
+-	[1f9737376184]
+-
+-	* NEWS:
+-	Released as v4.15.
+-	[2f84fb045098] [4.15]
+-
+-2013-08-18  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sphinx/annotations.rst:
+-	Fixed a mistake in the documentation for /Factory/.
+-	[4c2fe2e7397e]
+-
+-	* siplib/siplib.c.in:
+-	Fixed a C++ism that crept into the sip module code.
+-	[764f7fc80f1f]
+-
+-2013-08-17  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS:
+-	Updated the NEWS file.
+-	[69897cf50dea]
+-
+-2013-08-13  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in, siplib/siplib.c.in,
+-	sphinx/c_api.rst:
+-	Added sipRegisterProxyResolver() to the public API.
+-	[66235bf9625f]
+-
+-2013-08-07  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sphinx/c_api.rst:
+-	Documented sipConvertToArray() and sipConvertToTypedArray().
+-	[bf49a3ad5612]
+-
+-2013-08-05  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/array.c, siplib/sipint.h, siplib/siplib.c.in:
+-	Fixed the array support.
+-	[e2d05fb54872]
+-
+-	* sipgen/gencode.c, siplib/array.c, siplib/array.h,
+-	siplib/sip.h.in.in, siplib/siplib.c.in:
+-	Added sipConvertToArray().
+-	[660fdd5cb10e]
+-
+-	* sipgen/gencode.c:
+-	Eliminated unused arguments in the setters of constant variables.
+-	[e43b7d64c488]
+-
+-2013-08-04  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h.in,
+-	sphinx/annotations.rst:
+-	Added the /NoScope/ enum annotation.
+-	[aa4646c186d2]
+-
+-	* siplib/array.c, siplib/array.h, siplib/siplib.c.in:
+-	Properly initialise the sip.array type.
+-	[a7e4f6c62b8f]
+-
+-	* siplib/array.c, siplib/array.h, siplib/sip.h.in.in, siplib/sipint.h,
+-	siplib/siplib.c.in:
+-	Completed the array implementation for wrapped types.
+-	[9e5b63022e19]
+-
+-2013-08-03  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, siplib/array.c, siplib/array.h,
+-	siplib/sip.h.in.in, siplib/siplib.c.in, siplib/siplib.sbf.in:
+-	Added the stub of the array support.
+-	[ffb87d2e0fc5]
+-
+-2013-07-31  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sphinx/c_api.rst:
+-	Documented sipConvertFromNewPyType().
+-	[ba59d434b206]
+-
+-	* siplib/sip.h.in.in, siplib/siplib.c.in:
+-	Changed the signature of sipConvertFromNewPyType() to handle
+-	ownership and hide the internals of generated derived classes.
+-	[5a9ba502593c]
+-
+-	* sipgen/gencode.c:
+-	Fixed the PyQt5 generation of qt_metaobject() so that it supports
+-	QML.
+-	[2f18c4617542]
+-
+-2013-07-30  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in, siplib/sipint.h,
+-	siplib/siplib.c.in, siplib/threads.c:
+-	Added the (as yet undocumented) sipConvertFromNewPyType().
+-	[5a65f5bad461]
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h.in,
+-	sphinx/annotations.rst:
+-	Added the /ExportDerived/ class annotation.
+-	[e3c78dfd30b8]
+-
+-2013-07-26  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Clear any exceptions before trying to parse a reimplementation
+-	result.
+-	[7bebd55f50b2]
+-
+-2013-07-24  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Fixed a mixin bug where C++ was using the mixin (rather than Python)
+-	wasn't being detected properly.
+-	[52d3b8035dca]
+-
+-2013-07-23  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Fixed a bug in the dereferencing of mixins.
+-	[fc3df3e99932]
+-
+-2013-07-21  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h.in,
+-	siplib/sip.h.in.in, siplib/siplib.c.in, sphinx/c_api.rst:
+-	Implemented the PyQt5 plugin, including support for Qt interfaces.
+-	Added sipGetMixinAddress() to the public API. Python
+-	reimplementations of abstract mixins are now handled correctly.
+-	[972540270afa]
+-
+-2013-07-19  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h.in,
+-	sipgen/transform.c:
+-	The parser now handles multiple consts in type declarations.
+-	[e7b6e4b5b1de]
+-
+-	* sipgen/gencode.c:
+-	Properly implement /TransferBack/ even for return values that appear
+-	to be always new because the type may be a mapped collection type
+-	with elements that might not be new (e. QList<QTreeWidgetItem *>).
+-	[9c073a101fb6]
+-
+-2013-07-14  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/lexer.l:
+-	Make sure that source locations are always valid (if not always
+-	absolutely correct).
+-	[e5a66c9174a6]
+-
+-2013-07-13  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h.in:
+-	The parser can now handle expressions with casts.
+-	[54ec565cf24e]
+-
+-	* sipgen/lexer.l:
+-	Added support for numbers having trailing lLuU.
+-	[88cc29113b02]
+-
+-2013-07-11  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/transform.c:
+-	Backed out changeset bd5b9927361b The problem is real (but currently
+-	not triggered), but the fix breaks PyQt.
+-	[3529b7c08228]
+-
+-2013-07-10  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/transform.c:
+-	Fixed a bug where a method with %VirtualCatcherCode was being used
+-	by a method without if they had the same signature.
+-	[bd5b9927361b]
+-
+-	* configure.py.in:
+-	Invalidate the import caches before trying to import the newly
+-	created sipconfig.py.
+-	[1e3ae0d5e790]
+-
+-	* sipgen/gencode.c:
+-	Fixed the mixin support when the generated class definition may be a
+-	sub-type.
+-	[aec935209f0d]
+-
+-2013-07-07  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/sip.h.in, sipgen/transform.c:
+-	A virtual catcher now calls the super-class implementation by via
+-	the super-class rather than needing to know exactly where the
+-	nearest implementation is.
+-	[58987948b9fd]
+-
+-	* NEWS, sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h.in,
+-	siplib/descriptors.c, siplib/sip.h.in.in, siplib/sipint.h,
+-	siplib/siplib.c.in, sphinx/annotations.rst:
+-	Implemented the /Mixin/ class annotation.
+-	[8b1702ce3226]
+-
+-2013-07-01  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, sipgen/gencode.c, sipgen/lexer.l, sipgen/parser.y,
+-	sipgen/sip.h.in, siplib/siplib.c.in, sphinx/directives.rst:
+-	Added the call_super_init argument to the %Module directive. Updated
+-	the documentation.
+-	[42950b118753]
+-
+-	* siplib/sip.h.in.in, siplib/siplib.c.in:
+-	Support for cooperative multi-inheritance must now be explicitly
+-	enabled because it affects compatibility. Added a shortcut so that
+-	the cooperative multi-inheritance support is skipped when it isn't
+-	needed.
+-	[07984388686f]
+-
+-2013-06-30  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, siplib/siplib.c.in:
+-	Fixed the %Finalisation support so that QObject sub-classes work.
+-	[17fc8e27b7e9]
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in, siplib/siplib.c.in:
+-	Completed the support for cooperative multi-inheritance.
+-	[ddd13ea38870]
+-
+-	* siplib/sip.h.in.in, siplib/siplib.c.in:
+-	Changed the API of td_final to minimise the creation of new dicts.
+-	Fixed the calling of the super-class's __init__.
+-	[195f0d1ab91c]
+-
+-2013-06-29  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Instead of calling super() to implement the cooperative multi-
+-	inheritance, just call the __init__ of the next type in the MRO.
+-	[da9edad8f7b1]
+-
+-	* siplib/sip.h.in.in, siplib/siplib.c.in:
+-	Wrapped classes now support cooperative multi-inheritance with non-
+-	sip classes. Implemented %FinalisationCode.
+-	[aaedcb26099e]
+-
+-	* sipgen/gencode.c, sipgen/lexer.l, sipgen/parser.y, sipgen/sip.h.in,
+-	siplib/sip.h.in.in:
+-	Added the code generator support for %FinalisationCode.
+-	[e8b4b1ab730d]
+-
+-2013-06-28  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* Merged the v4.14 maintenance branch.
+-	[97beee973f94]
+-
+-2013-06-21  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/voidptr.c:
+-	Fixed a reference count bug when a sip.voidptr is created from a
+-	buffer object.
+-	[02bdf6cc32c1] <4.14-maint>
+-
+-2013-06-16  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.14.7 for changeset ee771b441704
+-	[6e6cc6c60a36] <4.14-maint>
+-
+-	* NEWS:
+-	Released as v4.14.7.
+-	[ee771b441704] [4.14.7] <4.14-maint>
+-
+-2013-06-12  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, build.py, sip.nsi.in, sphinx/installation.rst:
+-	Removed the Windows installer as we can't have co-existant PyQt4 and
+-	PyQt5 installers for other reasons.
+-	[74e1df1d9940] <4.14-maint>
+-
+-2013-06-11  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, sip.nsi.in, sphinx/installation.rst:
+-	Debugged the installer.
+-	[00678082f72e] <4.14-maint>
+-
+-	* build.py, sip.nsi.in:
+-	Added the initial (not debugged) installer.
+-	[d22b19884c62] <4.14-maint>
+-
+-	* sphinx/directives.rst:
+-	Fixed a broken reference to the Python documentation.
+-	[38ed755c797d] <4.14-maint>
+-
+-2013-06-10  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Fixed the last fix.
+-	[67258ffe885a] <4.14-maint>
+-
+-2013-06-08  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, sipgen/parser.y, sipgen/sip.h.in, siplib/siplib.c.in,
+-	sphinx/annotations.rst:
+-	Added the /Sequence/ function annotation. Added a work around for
+-	the Python bug whereby nb_inplace_add is wrongly copied to
+-	sq_inplace_concat if either are missing.
+-	[029828cabb4d] <4.14-maint>
+-
+-	* NEWS, sipgen/export.c, sipgen/gencode.c, sipgen/parser.y,
+-	sipgen/sip.h.in, siplib/sip.h.in.in, siplib/siplib.c.in,
+-	sphinx/c_api.rst, sphinx/directives.rst, sphinx/python_api.rst:
+-	Added support for classes to have %ConvertFromTypeCode. Added
+-	sipEnableAutoconversion() to the C API. Added
+-	sip.enableautoconversion() to the Python API.
+-	[4dbbc8c6c054] <4.14-maint>
+-
+-2013-06-07  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, sipgen/gencode.c, siplib/qtlib.c, siplib/sip.h.in.in,
+-	siplib/sipint.h, siplib/siplib.c.in, siplib/threads.c:
+-	Bumped the internal API to 10.0. Removed deprecated parts of the
+-	private API. Added the stub for the optional convert from class
+-	code.
+-	[50319794231a] <4.14-maint>
+-
+-2013-06-02  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/qtlib.c, siplib/siplib.c.in:
+-	Add more checks to make sure that PyQt5 isn't accidentally using
+-	features that will be deprecated in SIP5.
+-	[c80745f8ee0b] <4.14-maint>
+-
+-2013-06-01  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/qtlib.c:
+-	Added assertions for Qt support for all API functions that provide
+-	Qt support.
+-	[aa60efc50608] <4.14-maint>
+-
+-2013-05-04  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/voidptr.c:
+-	Fixed a bug in converting an int to a voidptr.
+-	[dd473964ac33] <4.14-maint>
+-
+-2013-05-01  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, sipgen/gencode.c, siplib/sip.h.in.in, siplib/siplib.c.in,
+-	sphinx/c_api.rst:
+-	Added sipSetDestroyOnExit() to the public C API.
+-	[40660935c75b] <4.14-maint>
+-
+-2013-04-25  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fixed a code generation bug that affected QObject sub-classes with
+-	dtor %MethodCode and with the GIL not released by default (ie.
+-	PyQt5).
+-	[bd9eccac4407] <4.14-maint>
+-
+-2013-04-21  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.14.6 for changeset 32dcb22f994c
+-	[23da2e18916b] <4.14-maint>
+-
+-	* NEWS, Roadmap.rst:
+-	Released as v4.14.6.
+-	[32dcb22f994c] [4.14.6] <4.14-maint>
+-
+-2013-04-17  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/parser.y, sphinx/annotations.rst:
+-	Documented that sub-classing from classes with different
+-	implementations is not supported.
+-	[1773f2100851] <4.14-maint>
+-
+-	* sipgen/parser.y:
+-	Fixed a grammar bug in the parsing of %Module with no parenthesis.
+-	[2d5256eda850] <4.14-maint>
+-
+-2013-04-09  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Fixed a bug in the parsing of SIP_ANYSLOT arguments.
+-	[a9f7473ba9c7] <4.14-maint>
+-
+-2013-04-06  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Removed some redundant code generated for a component module.
+-	[395bf9f00aa6] <4.14-maint>
+-
+-2013-03-26  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.14.5 for changeset e528e634d4db
+-	[6a2bda53d2c0] <4.14-maint>
+-
+-	* NEWS:
+-	Released as v4.14.5.
+-	[e528e634d4db] [4.14.5] <4.14-maint>
+-
+-2013-03-20  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fixed a code generation bug when using /Array, Transfer/.
+-	[054f1676c300] <4.14-maint>
+-
+-2013-03-06  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siputils.py:
+-	Fixed a build system bug for QtWebKit on Linux against Qt v5.
+-	[c65a525a0a17] <4.14-maint>
+-
+-2013-03-01  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.14.4 for changeset 4c818299f57a
+-	[72b69b39a7a8] <4.14-maint>
+-
+-	* NEWS:
+-	Released as v4.14.4.
+-	[4c818299f57a] [4.14.4] <4.14-maint>
+-
+-2013-02-26  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* configure.py.in, sphinx/installation.rst:
+-	The --sdk flag to configure.py will now default to the directory
+-	used by current versions of Xcode.
+-	[312a27229b3f] <4.14-maint>
+-
+-2013-02-20  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, siplib/sipint.h, siplib/siplib.c.in,
+-	siplib/threads.c:
+-	The thread support now only creates TLS when it is actually needed.
+-	This makes sipStartThread() redundant and it is now deprecated.
+-	Failing to allocate TLS will now raise an exception.
+-	[34f6f0d52c1e] <4.14-maint>
+-
+-	* NEWS, sipgen/gencode.c, siplib/sip.h.in.in, siplib/siplib.c.in,
+-	sphinx/c_api.rst, sphinx/directives.rst,
+-	sphinx/incompatibilities.rst:
+-	VirtualErrorHandler code is now called with the GIL and from the
+-	thread that raised the exception. This ensures that the details of
+-	the exception can be obtained. It also means that the default
+-	handler (ie. PyErr_Print()) can also get the details.
+-	VirtualErrorHandler code is now also provided sipGILState so that it
+-	can call SIP_RELEASE_GIL() prior to changing the execution path.
+-	[45a50c6d82fe] <4.14-maint>
+-
+-2013-02-14  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sphinx/introduction.rst.in:
+-	Documentation updates regarding SIP v5.
+-	[03f33e7fdfb1] <4.14-maint>
+-
+-2013-02-04  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, sipgen/gencode.c:
+-	Fixed the generation of an unnecessary variable for array arguments.
+-	[fb45cf6e775b] <4.14-maint>
+-
+-2013-02-03  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siputils.py:
+-	The problem of the moc pathname is more widespread.
+-	[bf2062f2318f] <4.14-maint>
+-
+-	* siputils.py:
+-	Fix the build of QtWebKit on Windows. Workaround the foward slash
+-	characters in the moc pathname on Windows/Qt5.
+-	[13ee5a9fc8bd] <4.14-maint>
+-
+-2013-02-02  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siputils.py:
+-	Fixed the QAxContainer dependencies for Qt5.
+-	[793be65e22b9] <4.14-maint>
+-
+-	* siputils.py:
+-	Fixed the renaming of QAxContainer for Qt5.
+-	[7e67f0559595] <4.14-maint>
+-
+-	* siputils.py:
+-	Fixed the QAxContainer dependency for Qt5.
+-	[d33f9eaa4394] <4.14-maint>
+-
+-	* siputils.py:
+-	Build system changes for Qt5 on Windows.
+-	[9abd1d0f5d3f] <4.14-maint>
+-
+-2013-01-28  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.14.3 for changeset 6e004d396299
+-	[c9a29107c8ef] <4.14-maint>
+-
+-	* NEWS:
+-	Released as v4.14.3.
+-	[6e004d396299] [4.14.3] <4.14-maint>
+-
+-2013-01-18  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	When a Python object is garbage collected SIP no longer creates an
+-	additional reference to any child Python objects so that those
+-	children can now be handled by the garbage collector if appropriate.
+-	We used to keep the extra reference to make sure any additional
+-	attributes set in the child were preserved, however if the parent is
+-	being deleted then the C++ object it wraps must have been (or is
+-	about to be) destroyed, and therefore (if the parent/child
+-	relationships between the Python objects are correct) the child
+-	Python object is about to be deleted anyway. Before we relied on the
+-	C++ child telling us when to garbage collect the Python child via
+-	its virtual dtor - but this won't work if it was the C++ library
+-	(rather than the Python application) that created the child.
+-	[dc06058c99dd] <4.14-maint>
+-
+-2013-01-17  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Backed out changeset 4ec79ea69263 Realised that the (slight) change
+-	in behaviour could break legitimate use cases.
+-	[597c864debcc] <4.14-maint>
+-
+-	* siplib/siplib.c.in:
+-	When a Python object is garbage collected its child Python objects
+-	are now garbage collected unless they have an instance dict.
+-	[4ec79ea69263] <4.14-maint>
+-
+-2013-01-11  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* LICENSE, build.py, configure.py.in, sipgen/export.c,
+-	sipgen/extracts.c, sipgen/gencode.c, sipgen/heap.c, sipgen/lexer.l,
+-	sipgen/main.c, sipgen/parser.y, sipgen/sip.h.in, sipgen/sipgen.sbf,
+-	sipgen/transform.c, siplib/apiversions.c, siplib/bool.cpp,
+-	siplib/descriptors.c, siplib/objmap.c, siplib/qtlib.c,
+-	siplib/sip.h.in.in, siplib/sipint.h, siplib/siplib.c.in,
+-	siplib/siplib.sbf.in, siplib/threads.c, siplib/voidptr.c,
+-	siputils.py, sphinx/conf.py.in, sphinx/directives.rst:
+-	Updated the copyright notices.
+-	[ee3b1348996c] <4.14-maint>
+-
+-2013-01-03  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, sipgen/gencode.c, sphinx/annotations.rst:
+-	The /KeepReference/ argument annotation, when applied to factories,
+-	will now keep the reference with the object created by the factory.
+-	[0ad6099f31fa] <4.14-maint>
+-
+-2013-01-02  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/voidptr.c:
+-	Properly implemented the support for passing objects that implement
+-	the buffer protocol where a voidptr is expected.
+-	[171bd8e1e037] <4.14-maint>
+-
+-	* siputils.py:
+-	Changed the test for a Python framework build so that it works with
+-	pyvenv.
+-	[a612391f667c] <4.14-maint>
+-
+-2012-12-29  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siputils.py:
+-	Further build system fixes for Linux/Qt5.
+-	[04dec290a15e] <4.14-maint>
+-
+-	* siputils.py:
+-	Fix the build system for the Linux specific naming conventions of
+-	the Qt5 libraries.
+-	[05cb90880c2b] <4.14-maint>
+-
+-2012-12-18  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siputils.py:
+-	Fixed the build system for QtTest in Qt5.
+-	[55188026fe6d] <4.14-maint>
+-
+-2012-12-08  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.14.2 for changeset e9180a8d374f
+-	[ed864cf2277f] <4.14-maint>
+-
+-	* NEWS:
+-	Released as v4.14.2.
+-	[e9180a8d374f] [4.14.2] <4.14-maint>
+-
+-2012-12-07  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siputils.py:
+-	Fixed the build system for Qt v5-rc1.
+-	[44586b952072] <4.14-maint>
+-
+-2012-11-14  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siputils.py:
+-	The build system now knows that QtWebKit is QtWebKitWidgets in Qt5.
+-	[b8261071d302] <4.14-maint>
+-
+-2012-11-11  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, siplib/siplib.c.in, sphinx/python_api.rst:
+-	Added sip.setdestroyonexit().
+-	[b063e90b6c20] <4.14-maint>
+-
+-	* siplib/voidptr.c:
+-	Backed out to keep the behaviour the same as memoryview.
+-	[e8f21b0950c8] <4.14-maint>
+-
+-	* siplib/voidptr.c:
+-	Backed out to keep the behaviour the same as memoryview.
+-	[26717fbefb61] <4.14-maint>
+-
+-2012-11-10  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Patch from Matt Newell to fix /HoldGIL/ when exceptions are enabled.
+-	[669ecadaaae1] <4.14-maint>
+-
+-2012-11-04  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/voidptr.c:
+-	A simple index of a sip.voidptr now returns an int rather than a
+-	string/bytes of length 1.
+-	[80ee79901dc9] <4.14-maint>
+-
+-	* siplib/voidptr.c:
+-	Fixed simple index item assignment for voidptr.
+-	[3cb217678514] <4.14-maint>
+-
+-	* siplib/voidptr.c:
+-	The new buffer interface was backported to v2.6.3.
+-	[47f4f489055e] <4.14-maint>
+-
+-	* NEWS, siplib/voidptr.c, sphinx/python_api.rst:
+-	sip.voidptr() will now accept any object that implements the (old or
+-	new) buffer protocols.
+-	[cb7799eb557b] <4.14-maint>
+-
+-	* sphinx/python_api.rst:
+-	Clarified the docs for __getitem__ and __setitem__ for sip.voidptr.
+-	[32fb8513b196] <4.14-maint>
+-
+-2012-10-27  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.14.1 for changeset d0431cee7920
+-	[6b278a98323b] <4.14-maint>
+-
+-	* NEWS:
+-	Released as v4.14.1.
+-	[d0431cee7920] [4.14.1] <4.14-maint>
+-
+-2012-10-26  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	More buffer support fixes.
+-	[1fe9c59f0f06] <4.14-maint>
+-
+-	* siplib/siplib.c.in:
+-	Both the old and new buffer protocols are now checked.
+-	[7227f121bac9] <4.14-maint>
+-
+-2012-10-23  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, sipgen/export.c, sipgen/gencode.c, sipgen/lexer.l,
+-	sipgen/parser.y, sipgen/sip.h.in, sipgen/transform.c,
+-	siplib/sip.h.in.in, siplib/siplib.c.in, sphinx/annotations.rst,
+-	sphinx/c_api.rst, sphinx/specification_files.rst:
+-	Added support for types that implement the buffer protocol.
+-	[4ec285852cba] <4.14-maint>
+-
+-	* siplib/siplib.c.in:
+-	None may be provided whenever a capsule is expected.
+-	[b90e3475bdfc] <4.14-maint>
+-
+-2012-10-17  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in:
+-	Renamed the sipCapsule_* macros to be consistent with other similar
+-	ones.
+-	[1913168e0c8d] <4.14-maint>
+-
+-	* sipgen/export.c:
+-	The type name of a capsule is now used in docstrings.
+-	[1c8ce8a61324] <4.14-maint>
+-
+-	* sphinx/directives.rst:
+-	Fixed a documentation typo.
+-	[94362407c872] <4.14-maint>
+-
+-2012-10-16  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Eliminated a C compiler warning message from the generated code.
+-	[e60f63cfe0d1] <4.14-maint>
+-
+-	* NEWS, sipgen/parser.y, sipgen/sip.h.in:
+-	The C prototype foo(void) is now accepted.
+-	[54aca3c0b75e] <4.14-maint>
+-
+-	* sipgen/lexer.l, sipgen/transform.c:
+-	Fixed a bug in the saving of line numbers for error messages when
+-	the error is on the last significant line.
+-	[7c77e368814f] <4.14-maint>
+-
+-	* NEWS, sipdistutils.py, sphinx/distutils.rst:
+-	If no sip-opts are defined sipdistutils.py will now use any
+-	swig_opts passed to the Extension ctor.
+-	[6fcc431a81bf] <4.14-maint>
+-
+-2012-10-15  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, sipgen/export.c, sipgen/gencode.c, sipgen/parser.y,
+-	sipgen/sip.h.in, sipgen/transform.c, siplib/sip.h.in.in,
+-	siplib/siplib.c.in, sphinx/annotations.rst, sphinx/c_api.rst:
+-	Increased the API version number to 9.1. Added the /Capsule/ typedef
+-	annotation. Added the 'z' format character to sipBuildResult().
+-	Added the 'z' format character to sipParseResult().
+-	[f4bc254f96d8] <4.14-maint>
+-
+-2012-10-12  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fixed regressions in the handling of types when generating code for
+-	C modules.
+-	[3eba5b9842f0] <4.14-maint>
+-
+-2012-10-09  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siputils.py:
+-	Explicity close files in siputils.py to avoid resource warning
+-	messages.
+-	[fdc332e116b2] <4.14-maint>
+-
+-2012-10-07  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in:
+-	Backed out the changes to the signal table generation (and revert
+-	the API version to 9.0) because they are no longer needed.
+-	[38235401ffbc] <4.14-maint>
+-
+-2012-10-03  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in:
+-	Renamed PYQT4_SIGNAL_EXPLICIT to PYQT4_SIGNAL_FIXED_ARGS. Renamed
+-	PYQT4_SIGNAL_MASK to PYQT4_SIGNAL_ARGS_MASK.
+-	[cfbd55297dcd] <4.14-maint>
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in:
+-	Added the flags member to the pyqt4QtSignal structure so that PyQT
+-	can distinguish between explicitly defined signals and those added
+-	to support optional arguments.
+-	[81617aa9e051] <4.14-maint>
+-
+-2012-10-01  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/export.c, sipgen/gencode.c, sipgen/sip.h.in:
+-	Revised the previous change to keep the brackets unless the signal
+-	has no arguments. (PyQt relies on the format for some of its
+-	exceptions.)
+-	[dd884ddcb239] <4.14-maint>
+-
+-	* sipgen/export.c, sipgen/gencode.c, sipgen/sip.h.in:
+-	Changed the docstrings for signals to use parenthesis rather than
+-	brackets as it is less confusing.
+-	[3f6128385aa2] <4.14-maint>
+-
+-2012-09-29  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.14 for changeset 90ea220ecc4b
+-	[76a18a32f759]
+-
+-	* NEWS:
+-	Released as v4.14.
+-	[90ea220ecc4b] [4.14]
+-
+-2012-09-28  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS:
+-	Updated the NEWS file.
+-	[214dd6433474]
+-
+-2012-09-27  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sphinx/directives.rst, sphinx/embedding.rst,
+-	sphinx/incompatibilities.rst, sphinx/python_api.rst,
+-	sphinx/using.rst:
+-	Got rid of all Sphinx warning messages.
+-	[cbf911605931]
+-
+-2012-09-25  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* configure.py.in, specs/win32-msvc2008, specs/win32-msvc2010:
+-	Updated the win32-msvc2008 spec file. Taught the build system about
+-	MSVC 2010.
+-	[5d3c5164342a]
+-
+-2012-09-24  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* configure.py.in, siputils.py:
+-	Taught the build system about Qt5's CXXFLAGS_APP macro.
+-	[4e2fddd95c07]
+-
+-	* sphinx/annotations.rst:
+-	Another correction to the /Factory/ documentation.
+-	[f030580a19f6]
+-
+-2012-09-21  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sphinx/annotations.rst:
+-	Fixed the incorrect /Factory/ documentation.
+-	[3b76a41a1f4a]
+-
+-2012-09-20  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fixed the signature for generated virtual error handler functions.
+-	[caa74f25dff8]
+-
+-2012-09-19  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/parser.y:
+-	Fixed an initialisation bug in the parser by making it resiliant to
+-	future changes.
+-	[fd2e76ea8e16]
+-
+-2012-09-18  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h.in:
+-	Fixed a few compiler warning messages.
+-	[a8aaecad7327]
+-
+-2012-09-17  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, sipgen/gencode.c, sipgen/main.c, sipgen/parser.y,
+-	sipgen/sip.h.in, sphinx/directives.rst:
+-	Added support for the SIP_PLATFORM_* and SIP_TIMELINE_* preprocessor
+-	symbols.
+-	[664ec65acb33]
+-
+-2012-09-14  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siputils.py:
+-	A build system fix for Qt v5-beta1.
+-	[6d704a7ab6c5]
+-
+-	* siplib/sip.h.in.in:
+-	Removed the ANY SIP v3 compatibility macro as it causes problems
+-	with Qt v5.
+-	[40aeb5a8f98e]
+-
+-2012-09-13  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/parser.y, sipgen/transform.c:
+-	The AllowNone and NoRelease mapped type annotations can now be
+-	applied to mapped type templates.
+-	[3da91337f333]
+-
+-	* sphinx/annotations.rst:
+-	Documented the PyName mapped type annotation.
+-	[b1a5b8cab2ab]
+-
+-	* sipgen/lexer.l:
+-	Improved the parsing of floating point literals thanks to Andrea
+-	Griffini.
+-	[be35aa0bb4b5]
+-
+-2012-09-01  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in, siplib/siplib.c.in,
+-	sphinx/c_api.rst, sphinx/directives.rst:
+-	Added sipCallErrorHandler() to the private API. A virtual error
+-	handler is now called with the GIL released. The sipGILState
+-	variable is no longer passed to an error handler.
+-	[be42df79035d]
+-
+-2012-08-31  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, sphinx/annotations.rst, sphinx/directives.rst:
+-	Updated the docs regarding the latest virtual error changes.
+-	[86a4f33db172]
+-
+-	* sipgen/gencode.c, sipgen/lexer.l, sipgen/parser.y, sipgen/sip.h.in,
+-	siplib/sip.h.in.in, siplib/siplib.c.in:
+-	Changed the virtual error handler support yet again so that error
+-	handlers are automatically exported to sub-classes and sub-modules.
+-	[118500886fa7]
+-
+-2012-08-30  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in, siplib/siplib.c.in:
+-	Completed the refactoring of virtual handlers to use
+-	sipParseResultEx().
+-	[397b4ade7900]
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in, siplib/siplib.c.in:
+-	Added sipParseResultEx() to the private API as a stub for future
+-	changes.
+-	[659fcb20bbc9]
+-
+-	* specs/macx-xcode:
+-	Merged the 4.13 branch into the trunk.
+-	[96ef5f43f010]
+-
+-	* NEWS, sipgen/gencode.c, sipgen/lexer.l, sipgen/parser.y,
+-	sipgen/sip.h.in, sipgen/transform.c, siplib/sip.h.in.in,
+-	sphinx/annotations.rst, sphinx/c_api.rst, sphinx/directives.rst:
+-	Replaced the virtual error support (again) with the
+-	%DefaultVirtualErrorHandler directive, the /NoVirtualErrorHandler/
+-	and /VirtualErrorHandler/ function annotations, and the
+-	/VirtualErrorHandler/ class annotation. Added sip_gilstate_t and
+-	SIP_RELEASE_GIL() to the public API. The Sphinx docs now use C
+-	domains where appropriate.
+-	[71c0d64913bc] <4.13-maint>
+-
+-2012-08-28  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, sipgen/gencode.c, siplib/descriptors.c, siplib/sip.h.in.in,
+-	siplib/siplib.c.in:
+-	Bumped the API version number to 9.0. Removed the support for
+-	pre-9.0 variable structures. Changed the sipVariableGetterFunc
+-	signature to pass the Python object.
+-	[d8824768aa51] <4.13-maint>
+-
+-	* sphinx/c_api.rst:
+-	Updated the documentation for sipConvertToType().
+-	[32c2c73f4c27] <4.13-maint>
+-
+-2012-08-27  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, sipgen/gencode.c, sipgen/lexer.l, sipgen/parser.y,
+-	sipgen/sip.h.in, sipgen/transform.c, siplib/sip.h.in.in,
+-	sphinx/annotations.rst, sphinx/directives.rst:
+-	Changed the support for flagging errors in Python reimplementations
+-	of virtuals by adding the %VirtualErrorCode directive and removing
+-	SIPPyException. Also replaced the all_throw_cpp_exception %Module
+-	argument with all_use_VirtualErrorCode, and the
+-	/NoThrowsCppException/ and /ThrowsCppException/ function annotations
+-	with /NoUsesVirtualErrorCode/ and /UsesVirtualErrorCode/.
+-	[523c3bccb41b] <4.13-maint>
+-
+-2012-08-26  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in:
+-	Fixed the support for virtual handler exceptions so that memory
+-	isn't leaked and the GIL is released.
+-	[f644e914b292] <4.13-maint>
+-
+-	* sipgen/transform.c:
+-	A simply tidy up after the previous change.
+-	[b3cd21a00d51] <4.13-maint>
+-
+-	* sipgen/transform.c:
+-	Backed out changeset 1066 and did it properly.
+-	[368eaa1143bd] <4.13-maint>
+-
+-2012-08-25  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, sipgen/gencode.c, sipgen/lexer.l, sipgen/parser.y,
+-	sipgen/sip.h.in, sipgen/transform.c, siplib/sip.h.in.in,
+-	sphinx/annotations.rst, sphinx/directives.rst:
+-	Added the all_throw_cpp_exception argument to the %Module directive.
+-	Added the /ThrowCppException/ and /NoThrowCppException/ function
+-	annotations.
+-	[5f97352e818f] <4.13-maint>
+-
+-2012-08-24  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/transform.c:
+-	No longer require that the types of the arguments of a C/C++
+-	signature are fully defined to SIP.
+-	[01e11dc52626] <4.13-maint>
+-
+-2012-08-15  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, siplib/siplib.c.in, sphinx/c_api.rst:
+-	sipTransferTo() now increments the reference count of an object if
+-	the owner is Py_None. Fixed a type checking bug in sip.transferto().
+-	Deprecated sipTransferBreak().
+-	[f59d135ae51c] <4.13-maint>
+-
+-2012-08-10  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	For Python v2.x unsigned short and unsigned byte are now converted
+-	to int rather than long objects (to be consistent with the signed
+-	versions).
+-	[897e085bdd97] <4.13-maint>
+-
+-	* siplib/siplib.c.in:
+-	Make sure an exception is raised when converting to a character when
+-	a string longer than one character is passed.
+-	[28ea90cba3a9] <4.13-maint>
+-
+-2012-07-22  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipdistutils.py:
+-	Applied a patch from Oliver Nagy to fix sipdistutils.py for Python
+-	v3.
+-	[5775580258b3] <4.13-maint>
+-
+-2012-07-09  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Fixed the use of a Python3 specific format character.
+-	[801ae4c35450] <4.13-maint>
+-
+-2012-07-03  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/lexer.l, sipgen/parser.y, sipgen/sip.h.in,
+-	sphinx/annotations.rst, sphinx/directives.rst,
+-	sphinx/specification_files.rst:
+-	Implemented the %InstanceCode directive.
+-	[9b330b545c65] <4.13-maint>
+-
+-2012-07-02  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Reformatted some comments.
+-	[fa8592b30bf5] <4.13-maint>
+-
+-	* configure.py.in, sipgen/export.c, sipgen/extracts.c,
+-	sipgen/gencode.c, sipgen/heap.c, sipgen/lexer.l, sipgen/main.c,
+-	sipgen/sip.h.in, sipgen/sipgen.sbf, sipgen/transform.c,
+-	siplib/apiversions.c, siplib/bool.cpp, siplib/descriptors.c,
+-	siplib/objmap.c, siplib/qtlib.c, siplib/sipint.h,
+-	siplib/siplib.sbf.in, siplib/threads.c, siplib/voidptr.c,
+-	sphinx/conf.py.in, sphinx/directives.rst:
+-	Updated the dates on various copyright notices.
+-	[257d223f5d45] <4.13-maint>
+-
+-2012-06-29  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sphinx/c_api.rst:
+-	Fixed a documentation typo.
+-	[e1a825c52e33] <4.13-maint>
+-
+-2012-06-20  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.13.3 for changeset 589228145d51
+-	[1cbf533ebe71] <4.13-maint>
+-
+-	* NEWS:
+-	Released as v4.13.3.
+-	[589228145d51] [4.13.3] <4.13-maint>
+-
+-2012-06-05  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, siplib/siplib.c.in:
+-	Another fix for the handling of keyword arguments when used with
+-	unbound methods.
+-	[377e9e4763f5] <4.13-maint>
+-
+-2012-06-04  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Fixed the handling of keyword arguments when used with unbound
+-	methods.
+-	[cdd78f0c72b2] <4.13-maint>
+-
+-2012-06-01  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Apply a cast to the argument to
+-	sipConvertFrom[Const]VoidPtr[AndSize]() when it was defined with a
+-	typedef. This makes it easier to use typedef as a way of hiding the
+-	complexities of a type that SIP doesn't handle.
+-	[c814c38523ff] <4.13-maint>
+-
+-2012-05-25  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h.in,
+-	siplib/siplib.c.in, sphinx/annotations.rst, sphinx/directives.rst:
+-	The /NoRaisesPyExceptions/ and /RaisesPyExceptions/ function
+-	annotations can no be used with constructors. Updated the NEWS file.
+-	[482aa7e3f1ab] <4.13-maint>
+-
+-2012-04-29  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* specs/macx-xcode:
+-	Removed the macx-xcode file at it isn't supported by the build
+-	system.
+-	[31ad477ff5ae] <4.13-maint>
+-
+-2012-04-26  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/parser.y:
+-	Removed the free() of a code block filename now that filenames are
+-	retained for error messages.
+-	[16ef20290565] <4.13-maint>
+-
+-	* sipgen/lexer.l, sipgen/parser.y, sipgen/sip.h.in,
+-	sipgen/transform.c:
+-	Error messages related to callables should now include the filename
+-	and line number of the callable in the .sip source file.
+-	[fa6c71904d78] <4.13-maint>
+-
+-2012-04-18  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fixed the support for keeping an extra reference to a containing
+-	class when refering to a member variable.
+-	[fbb9cdbad791] <4.13-maint>
+-
+-2012-04-16  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Eliminate a race condition in sip_api_is_py_method().
+-	[871a7b44c8f0] <4.13-maint>
+-
+-2012-04-14  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/sip.h.in.in, siplib/siplib.c.in:
+-	Improved the text of the exception raised when a wrapped C/C++
+-	object doesn't exist.
+-	[dd2d72cac87f] <4.13-maint>
+-
+-2012-04-09  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siputils.py:
+-	Taught the build system about Qt5's QtGui module.
+-	[8d2739f3225f] <4.13-maint>
+-
+-2012-04-02  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/parser.y:
+-	Allow a string as well as an identifier for arguments to various
+-	name= settings so that name="name" can be used.
+-	[d5e6a1fa39f2] <4.13-maint>
+-
+-2012-03-09  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Updated the Unicode support for Python v3.3.
+-	[0870e512d8dd] <4.13-maint>
+-
+-2012-03-04  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/parser.y, siplib/sip.h.in.in:
+-	Ensure a reference is kept to the containing object when getting an
+-	instance variable that is a non-const wrapped object. This should
+-	(safely) avoid a certain kind of application bug.
+-	[0dd3cb4eff0e] <4.13-maint>
+-
+-	* siplib/qtlib.c:
+-	Effectively backed out change 769 because it causes inconsistent
+-	behaviour when a method is connected to its object's destroyed()
+-	method.
+-	[ca0fb2b4bd89] <4.13-maint>
+-
+-2012-02-19  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	If a Python reimplementation is a descriptor then use the descriptor
+-	protocol to bind it (specifically added for Nuitka).
+-	[88844f85f705] <4.13-maint>
+-
+-2012-02-10  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.13.2 for changeset 4efeefee717e
+-	[389a142d1997] <4.13-maint>
+-
+-	* NEWS:
+-	Updated the NEWS file. Released as v4.13.2.
+-	[4efeefee717e] [4.13.2] <4.13-maint>
+-
+-2012-02-05  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/parser.y:
+-	Fixed bad pointer bugs in the parsing of exceptions.
+-	[1058b2c18309] <4.13-maint>
+-
+-2012-01-30  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/objmap.c:
+-	Handle aliases properly when discovering that an object has been
+-	deleted.
+-	[f51e159f6dff] <4.13-maint>
+-
+-2011-12-22  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.13.1 for changeset a782debccd42
+-	[8a56d87be977] <4.13-maint>
+-
+-	* NEWS:
+-	Released as v4.13.1.
+-	[a782debccd42] [4.13.1] <4.13-maint>
+-
+-2011-12-20  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fixed a bug in the generation of PyQt signal signatures that caused
+-	a "const" to be wrongly dropped.
+-	[39cf1d1d8167] <4.13-maint>
+-
+-2011-12-19  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Properly handle %PickleCode returning NULL.
+-	[29ec1c523114] <4.13-maint>
+-
+-2011-12-17  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, Roadmap.rst, sipgen/main.c:
+-	Deprecation warnings can no longer be suppressed. Updated the NEWS
+-	file. Updated the Roadmap.
+-	[358be4ede9fc] <4.13-maint>
+-
+-2011-12-07  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/objmap.c:
+-	Completed the support for object aliases when garbage collecting an
+-	object.
+-	[7ab562ae0e39] <4.13-maint>
+-
+-	* siplib/objmap.c, siplib/sip.h.in.in, siplib/sipint.h,
+-	siplib/siplib.c.in:
+-	When an object that uses multiple inheritance in its class hierachy
+-	is wrapped, all of its addresses when cast to the different super-
+-	classes are internally registered as aliases. This means that the
+-	original object will be found when given an address that is
+-	different as a result of a cast. (Note that the support for removing
+-	aliases when the object is garbage collected is not yet done.)
+-	[da88157d2f03] <4.13-maint>
+-
+-2011-12-05  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/sip.h.in, sipgen/transform.c:
+-	Backed out 1013. It breaks when the method is overloaded in a super-
+-	class but only one overload is reimplemented in this class so the
+-	compiler doesn't see the other overload in the super-class so we
+-	must refer to it explicitly.
+-	[82af71f0adcb] <4.13-maint>
+-
+-	* sipgen/gencode.c:
+-	Backed out 1014.
+-	[e50d347a15db] <4.13-maint>
+-
+-2011-11-30  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/parser.y:
+-	Fixed the generation of handlers for virtuals defined in templates.
+-	[98421b9cc511] <4.13-maint>
+-
+-	* siputils.py:
+-	The build system now handles recursively defined macros.
+-	[5d7476cbb504] <4.13-maint>
+-
+-2011-11-28  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	sipSelf is now generated with the correct const qualifier.
+-	[3c46012c8562] <4.13-maint>
+-
+-	* NEWS, sipgen/parser.y, sphinx/specification_files.rst:
+-	Protected and private super-classes can now be specified but are
+-	otherwise ignored.
+-	[f331e22716d9] <4.13-maint>
+-
+-	* custom/mkcustom.py:
+-	Support for sys.platform being 'linux3'.
+-	[01a339a7f2e9] <4.13-maint>
+-
+-2011-11-27  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, sipgen/parser.y, sphinx/annotations.rst:
+-	Added the /PyName/ typedef annotation.
+-	[8c147224120a] <4.13-maint>
+-
+-2011-11-23  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siputils.py:
+-	Fixed the build system for building a debug version of PyQt on OS/X.
+-	[3b44dc2f0efd] <4.13-maint>
+-
+-	* NEWS, sipgen/parser.y, sipgen/sip.h.in, sipgen/transform.c:
+-	Class templates now allow template arguments to be used as a super-
+-	class.
+-	[08e44ad74137] <4.13-maint>
+-
+-2011-11-22  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, sipgen/parser.y:
+-	Added support for 'public' preceding the name of a class in a super-
+-	class list.
+-	[7fbb8a754a81] <4.13-maint>
+-
+-	* sipgen/parser.y, sphinx/annotations.rst, sphinx/directives.rst,
+-	sphinx/specification_files.rst, sphinx/using.rst:
+-	Updated the docs where the examples refered to deprecated syntax.
+-	[36208e0a6773] <4.13-maint>
+-
+-	* NEWS, sipgen/lexer.l, sipgen/parser.y, sipgen/sip.h.in,
+-	sphinx/annotations.rst, sphinx/directives.rst:
+-	Added the all_raise_py_exception argument to the %Module directive.
+-	Added the /NoRaisesPyException/ function annotation.
+-	[bf725fdfd029] <4.13-maint>
+-
+-	* sipgen/gencode.c:
+-	Fixed the previous change for classes contained in namespaces.
+-	[09411053ef1b] <4.13-maint>
+-
+-	* sipgen/gencode.c, sipgen/sip.h.in, sipgen/transform.c:
+-	Virtual catchers will now call the most recent C++ implementation
+-	(if there is no Python reimplementation) even if it is unknown to
+-	SIP rather than the most recent implementation that SIP knows about.
+-	[8893e36b8ca3] <4.13-maint>
+-
+-2011-11-21  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Updated some code generator comments.
+-	[fad4bdca5bbd] <4.13-maint>
+-
+-2011-11-16  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siputils.py:
+-	Make sure PyQt's internal static support libraries don't get added
+-	to rpath.
+-	[91848382e6fd] <4.13-maint>
+-
+-2011-11-15  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/parser.y:
+-	Added support for void template arguments.
+-	[1c699c672ed7] <4.13-maint>
+-
+-2011-10-24  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.13 for changeset 0869eb93c773
+-	[3b2a3fb3fdda]
+-
+-	* NEWS:
+-	Released as v4.13.
+-	[0869eb93c773] [4.13]
+-
+-	* Merged the v4.12 maintenance branch into the trunk.
+-	[021e97baeeb0]
+-
+-	* NEWS:
+-	Updated the NEWS file.
+-	[af334da384fd] <4.12-maint>
+-
+-2011-10-13  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/parser.y, sphinx/specification_files.rst:
+-	'*' and '&' are now accepted as unary operators in expressions used
+-	to define the values of default arguments.
+-	[4eba42cb2457] <4.12-maint>
+-
+-	* sipgen/parser.y, sipgen/sip.h.in:
+-	Further fix for overloads with a variant that is protected and a
+-	variant that has optional arguments defined in a module that
+-	supports keyword arguments imported by a module that doesn't.
+-	[79951a333f30] <4.12-maint>
+-
+-2011-10-10  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sphinx/annotations.rst:
+-	The /Transfer/ annotation can now be used with the /Array/
+-	annotation to prevent the freeing of the temporary array of
+-	pointers.
+-	[3a009ee97d60] <4.12-maint>
+-
+-2011-10-07  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, siplib/siplib.c.in, sphinx/directives.rst:
+-	%ConvertToSubClassCode can now cause a restart of the conversion
+-	process using a different requested type. This enables the correct
+-	handling of PyQt's QLayoutItem.
+-	[fa212070a486] <4.12-maint>
+-
+-2011-10-06  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	sipIsPyMethod() now allows for an object's type's tp_mro to be NULL.
+-	This can happen when the only instance of a dynamically created type
+-	is in the process of being garbage collected.
+-	[d66046441fa8] <4.12-maint>
+-
+-2011-10-04  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Commit backout.
+-	[6e11ad753de6] <4.12-maint>
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in, siplib/siplib.c.in:
+-	Backed out changeset 0bcc2ce09ba0 This (and the following changeset)
+-	doesn't seem to make a difference.
+-	[2df67f4a3294] <4.12-maint>
+-
+-	* siplib/siplib.c.in:
+-	Commit backout.
+-	[4a9b20624f88] <4.12-maint>
+-
+-	* siplib/siplib.c.in:
+-	Backed out changeset de3fe63e5dec This (and the previous changeset)
+-	doesn't seem to make a difference.
+-	[78740eff2bf4] <4.12-maint>
+-
+-2011-09-27  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Add an atexit function that will disable all Python
+-	reimplementations of virtuals.
+-	[de6a700f5faa] <4.12-maint>
+-
+-2011-09-26  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, sipgen/lexer.l, sipgen/parser.y, sipgen/sip.h.in,
+-	sphinx/directives.rst:
+-	Added the %DefaultDocstringFormat directive. Added the format
+-	argument to the %Docstring directive.
+-	[dba052605539] <4.12-maint>
+-
+-2011-09-24  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Fixed the previous fix to sipIsPyMethod() so that it doesn't retain
+-	the GIL.
+-	[de3fe63e5dec] <4.12-maint>
+-
+-2011-09-17  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, siplib/sip.h.in.in, siplib/siplib.c.in:
+-	sipIsPyMethod() now acquires the GIL before checking if the Python
+-	object has been garbage collected.
+-	[0bcc2ce09ba0] <4.12-maint>
+-
+-	* siplib/siplib.c.in:
+-	Fixed a typo in a comment.
+-	[c4ad84eeed37] <4.12-maint>
+-
+-	* siplib/siplib.c.in:
+-	Added a missing Py_DECREF() on a (very rarely used) error handling
+-	path.
+-	[a99ab15f7b18] <4.12-maint>
+-
+-2011-09-03  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fixed a code generation bug where a module with keyword arguments
+-	disabled derives from a class imported from a module with them
+-	enabled.
+-	[1c3d2412e35a] <4.12-maint>
+-
+-2011-08-26  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	PyQt will now only delete a QObject if the QObject belongs to the
+-	current thread, otherwise it calls deleteLater().
+-	[c2987628087f] <4.12-maint>
+-
+-2011-08-02  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.12.4 for changeset 7dff386f6d8c
+-	[49580889fa23] <4.12-maint>
+-
+-	* NEWS:
+-	Released as v4.12.4.
+-	[7dff386f6d8c] [4.12.4] <4.12-maint>
+-
+-2011-07-29  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, siputils.py:
+-	Added support for Qt configured with -qtlibinfix based on a patch
+-	from Ian Scott.
+-	[d87cea364549] <4.12-maint>
+-
+-	* NEWS, sipgen/gencode.c, siplib/siplib.c.in:
+-	Switched to using PyLong_AsUnsignedLongMask() and
+-	PyLong_AsUnsignedLongLongMask() instead of the non-mask versions so
+-	that overflow is ignored.
+-	[533e6a9e3e3a] <4.12-maint>
+-
+-2011-07-10  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Make sure the %TypeHeaderCode of a /Default/ %Exception is included.
+-	[bbe43a0bad78] <4.12-maint>
+-
+-2011-06-23  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Fixed a regression introduced in the recent sipIsPyMethod() changes
+-	in the handling of special methods implemented by object (eg.
+-	__lt__).
+-	[f9f4b161c940] <4.12-maint>
+-
+-	* siplib/siplib.c.in:
+-	Fixed some other warnings from more (undocumented) Python v3.2
+-	changes.
+-	[df42f6bf92c8] <4.12-maint>
+-
+-	* siplib/sip.h.in.in, siplib/voidptr.c:
+-	Fixed sipConvertFromSliceObject() for Python v3.2.
+-	[3d0336c32dfa] <4.12-maint>
+-
+-2011-06-13  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* build.py:
+-	Fixed the build system for MacOS as the development platform.
+-	[fdd3cecee60d] <4.12-maint>
+-
+-2011-05-22  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.12.3 for changeset 50282bee0c60
+-	[54c00a0e9c01] <4.12-maint>
+-
+-	* NEWS:
+-	Released as v4.12.3.
+-	[50282bee0c60] [4.12.3] <4.12-maint>
+-
+-2011-05-20  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Generated signal signatures no longer remove the reference '&' for
+-	non-const arguments.
+-	[274e38133e7a] <4.12-maint>
+-
+-	* siplib/siplib.c.in:
+-	Fixed the calling of hooks for Python3.
+-	[192dfa04b3ac] <4.12-maint>
+-
+-2011-05-15  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in, sphinx/incompatibilities.rst:
+-	When searching for a Python reimplementation of a virtual C++
+-	method, any object that is not a C++ method wrapper is assumed to be
+-	valid. Previously, if it wasn't a Python function or method then it
+-	would be ignored. This is a potential incompatibility, but any code
+-	that is affected is either buggy or badly written.
+-	[f95ee221598d] <4.12-maint>
+-
+-2011-04-30  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.12.2 for changeset dd8f52a95d04
+-	[b99179c54a07] <4.12-maint>
+-
+-	* NEWS:
+-	Released as v4.12.2.
+-	[dd8f52a95d04] [4.12.2] <4.12-maint>
+-
+-2011-04-22  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/transform.c:
+-	Added support for global inplace numeric operators.
+-	[af33bd829af3] <4.12-maint>
+-
+-	* sipdistutils.py:
+-	Updated the license and copyright information for sipdistutils.py.
+-	[94f4971497a9] <4.12-maint>
+-
+-2011-04-18  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/parser.y:
+-	Made sure thngs were initialised to 0 properly when parsing new-
+-	style directives for variables.
+-	[c3f5a8b89968] <4.12-maint>
+-
+-2011-04-14  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, sipgen/parser.y:
+-	Handwritten code in class templates no longer has types substituted
+-	in lines that appear to be C preprocessor directives. This prevents
+-	#include'd file names getting substituted.
+-	[e039b65daa03] <4.12-maint>
+-
+-2011-04-08  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Fixed a regression in the handling of keyword arguments.
+-	[f68e042c94f5] <4.12-maint>
+-
+-2011-03-29  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS:
+-	Updated the news file.
+-	[ec9807971e08] <4.12-maint>
+-
+-2011-03-27  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/parser.y:
+-	The names of optional arguments to protected methods are generated
+-	no matter what module the method is defined in.
+-	[fe4c052830ff] <4.12-maint>
+-
+-	* sipgen/gencode.c:
+-	Another fix for the bad protected enum fix.
+-	[d112d90bcbfd] <4.12-maint>
+-
+-	* sipgen/parser.y:
+-	Fixed a bug where keyword argument names were being generated when
+-	being defined in a parent module.
+-	[3e11c4b7d541] <4.12-maint>
+-
+-2011-03-26  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/parser.y:
+-	Mapped type template arguments now include "const" if appropriate.
+-	[22c5009485a8] <4.12-maint>
+-
+-	* sipgen/gencode.c:
+-	Fixed a regression that caused enums in namespaces to be ignored.
+-	[f9b89f2c1c7d] <4.12-maint>
+-
+-2011-03-25  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	The keyword support now explicitly checks that keywords are
+-	provided. Python handles this for ordinary methods but not for
+-	__init__.
+-	[05718fa95834] <4.12-maint>
+-
+-2011-03-22  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Code is no longer generated for protected enums of /Abstract/
+-	classes.
+-	[d349bb35cdcc] <4.12-maint>
+-
+-2011-03-18  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	The /KeepReference/ function annotation now keeps a reference even
+-	if the result is already owned by Python.
+-	[ecb3e795382e] <4.12-maint>
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/transform.c,
+-	sphinx/annotations.rst:
+-	/KeepReference/ can now be used as a function annotation.
+-	[dc7effca2a82] <4.12-maint>
+-
+-	* configure.py.in:
+-	A fix for when building outside the source directory.
+-	[942f1b8ac66b] <4.12-maint>
+-
+-2011-03-03  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/lexer.l, sipgen/parser.y, sipgen/sip.h.in,
+-	sipgen/transform.c:
+-	The %TypeHeaderCode from a class template is now included in the
+-	generated code.
+-	[b5992208a757] <4.12-maint>
+-
+-2011-02-24  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/parser.y, sipgen/transform.c:
+-	typedefs in class templates are now handled correctly.
+-	[62e2faa4fb81] <4.12-maint>
+-
+-	* sipgen/transform.c:
+-	When comparing mapped type templates the number of dereferences of
+-	the template arguments is now taken into account.
+-	[9cf3969984a5] <4.12-maint>
+-
+-2011-02-22  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	%Docstring applied to a Qt signal is no longer ignored.
+-	[0fae9a0aae28] <4.12-maint>
+-
+-2011-02-21  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fixed /KeepReference/ when used with ctors.
+-	[1a5475b48b7c] <4.12-maint>
+-
+-2011-01-22  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.12.1 for changeset 6a8117e8b16a
+-	[2ead36288f97] <4.12-maint>
+-
+-	* NEWS, build.py:
+-	Released as v4.12.1.
+-	[6a8117e8b16a] [4.12.1] <4.12-maint>
+-
+-2011-01-21  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c.in:
+-	Tweaked an exception message to make it easier to mimic in
+-	handwritten code.
+-	[426308437843] <4.12-maint>
+-
+-	* sipgen/transform.c:
+-	sip will now longer complain about callables with the same Python
+-	signature if either of them has %MethodCode as it assumes that the
+-	%MethodCode will resolve any potential conflicts.
+-	[9ed59e5c8070] <4.12-maint>
+-
+-2011-01-15  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* build.py, sphinx/conf.py.in, sphinx/static/default.css,
+-	sphinx/static/logo.png, sphinx/static/logo_tn.ico:
+-	Added a new Sphinx stylesheet.
+-	[c0c94278423e] <4.12-maint>
+-
+-2011-01-14  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS:
+-	Updated the NEWS file.
+-	[fa100876a783] <4.12-maint>
+-
+-2011-01-07  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* LICENSE, build.py, configure.py.in, sipgen/export.c,
+-	sipgen/extracts.c, sipgen/gencode.c, sipgen/heap.c, sipgen/lexer.l,
+-	sipgen/main.c, sipgen/parser.y, sipgen/sip.h.in, sipgen/sipgen.sbf,
+-	sipgen/transform.c, siplib/apiversions.c, siplib/bool.cpp,
+-	siplib/descriptors.c, siplib/objmap.c, siplib/qtlib.c,
+-	siplib/sip.h.in.in, siplib/sipint.h, siplib/siplib.c.in,
+-	siplib/siplib.sbf.in, siplib/threads.c, siplib/voidptr.c,
+-	siputils.py, sphinx/conf.py.in, sphinx/directives.rst:
+-	Updated the copyright notices.
+-	[42e1cfe37140] <4.12-maint>
+-
+-	* sphinx/directives.rst:
+-	Fixed a documentation typo.
+-	[e54f022f78f6] <4.12-maint>
+-
+-	* NEWS, sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h.in,
+-	sphinx/annotations.rst:
+-	Added the /RaisesPyException/ function annotation.
+-	[649736ef0ab2] <4.12-maint>
+-
+-2011-01-03  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* configure.py.in, siputils.py, sphinx/build_system.rst,
+-	sphinx/installation.rst:
+-	Added the --deployment-target option to configure.py which should be
+-	used to work around bugs in the latest versions of Python on
+-	MacOS/X.
+-	[18c8fe174f38] <4.12-maint>
+-
+-2011-01-02  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fixed a code generation bug in the %MethodCode error handling for
+-	zero argument slots.
+-	[4ed8b04e7e7a] <4.12-maint>
+-
+-2010-12-31  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/lexer.l, sipgen/parser.y, sphinx/specification_files.rst:
+-	Added SIP_SSIZE_T as a pre-defined type so it can be used in .sip
+-	files.
+-	[1871ed7f3c9b] <4.12-maint>
+-
+-	* sipgen/parser.y, sphinx/specification_files.rst:
+-	PyObject * is now a synonym for SIP_PYOBJECT in .sip files.
+-	[56e378d55db0] <4.12-maint>
+-
+-	* siplib/siplib.c.in, sphinx/python_api.rst:
+-	Added sip.ispycreated().
+-	[e1efc2847290] <4.12-maint>
+-
+-2010-12-28  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, sipgen/parser.y, siplib/siplib.c.in,
+-	sphinx/specification_files.rst:
+-	Added support for the __getattribute__ and __getattr__ methods.
+-	[1da2e2e9fa1c] <4.12-maint>
+-
+-2010-12-27  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h.in,
+-	siplib/sip.h.in.in, siplib/siplib.c.in,
+-	sphinx/specification_files.rst:
+-	Added support for __setattr__ and __delattr__ methods.
+-	[3f7a1f5bff74] <4.12-maint>
+-
+-	* siplib/siplib.c.in:
+-	The lazy attributes of a type are added when the first instance of
+-	the type is created. This leaves the instance tp_getattro and
+-	tp_setattro slots available.
+-	[12a8fc4ee75a] <4.12-maint>
+-
+-2010-12-24  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS:
+-	Fixed some errors in the NEWS file.
+-	[44a6a3833477] <4.12-maint>
+-
+-2010-12-23  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.12 for changeset 4a79f5996bd7
+-	[111436ade941]
+-
+-	* NEWS:
+-	Released as v4.12.
+-	[4a79f5996bd7] [4.12]
+-
+-	* sipgen/gencode.c:
+-	A further fix for Python v2.4 and earlier.
+-	[5e655e94fc64]
+-
+-	* sipgen/gencode.c:
+-	Fixed the code generated for a composite module an Python v2.4 and
+-	earlier.
+-	[00b0fadcf6fc]
+-
+-	* siplib/voidptr.c:
+-	Add a couple of casts for MSVC2008.
+-	[68916b34ac59]
+-
+-2010-12-20  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sphinx/python_api.rst:
+-	Updated the documentation regarding the sip.simplewrapper type.
+-	[0f92caeb5770]
+-
+-	* sipgen/parser.y, sipgen/transform.c:
+-	Fixed a bug looking up mapped types that are templates with enum
+-	arguments.
+-	[1212ca61ef1d]
+-
+-2010-12-18  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/transform.c:
+-	Fixed the inclusion of header files for init extenders.
+-	[171d8f4e9f3a]
+-
+-2010-12-11  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/voidptr.c:
+-	sip.voidptr now uses PyLong_AsVoidPtr() for all versions of Python.
+-	[3d4ccc59c9c3]
+-
+-2010-12-09  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* configure.py.in:
+-	Improved the configure.py error message when an invalid build macro
+-	is given.
+-	[631ded439583]
+-
+-	* Roadmap.rst:
+-	Removed the section of the roadmap stating that SIP v5 will require
+-	types to be defined in advance of being used because (after thinking
+-	about it properly) in would be a complete pain for the user.
+-	[02eee09f591f]
+-
+-	* sipgen/sip.h, sipgen/sip.h.in:
+-	Fixed an apparent hg problem with sipgen/sip.h[.in].
+-	[1fd9ca0698a0]
+-
+-2010-12-07  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/lexer.l, sipgen/sip.h:
+-	Fixed the parsing of %Extract.
+-	[393564f2cfeb]
+-
+-	* sipgen/gencode.c:
+-	Make sure backslashes in generated #line directives are escaped.
+-	[cc58da4653e7]
+-
+-	* sipgen/parser.y, sipgen/sip.h:
+-	A deprecation warning is issues for any argument annotations in an
+-	explicit C/C++ signature.
+-	[8d0e2a1b1d1c]
+-
+-	* sipgen/parser.y, sipgen/sip.h, sphinx/directives.rst:
+-	/AllowNone/ is a valid class annotation.
+-	[e94d52f996d7]
+-
+-2010-12-06  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/parser.y, sipgen/sip.h, sphinx/annotations.rst:
+-	Deprecation warning are now generated for any invalid annotation.
+-	Updated the docs so that annotations are mentioned in all the
+-	contexts that they can applied to.
+-	[a3715d0c74a5]
+-
+-	* NEWS, build.py, sipgen/main.c, sipgen/main.c.in, sipgen/parser.y,
+-	sipgen/sip.h, sphinx/directives.rst:
+-	Added the automatic pseudo-%Timeline of SIP version numbers.
+-	[50fc306bfb6d]
+-
+-	* NEWS, sphinx/annotations.rst:
+-	Documented /PyInt/ as a typedef annotation.
+-	[0d8a873e3d30]
+-
+-2010-12-03  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, siplib/sip.h.in.in, siplib/siplib.c.in, sphinx/c_api.rst:
+-	Added sipGetAddress() to the public API.
+-	[b202f0d04ba6]
+-
+-2010-11-30  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/main.c.in, sphinx/command_line.rst:
+-	Don't try and issue warnings until the -w flag has been parsed.
+-	[64e98b58216b]
+-
+-	* NEWS, sipgen/gencode.c, sipgen/lexer.l, sipgen/main.c.in,
+-	sipgen/parser.y, sipgen/sip.h, sphinx/annotations.rst,
+-	sphinx/command_line.rst, sphinx/directives.rst:
+-	Added the 'keyword_arguments' argument to %Module. The /KeywordArgs/
+-	annotation now takes a string value describing the level of keyword
+-	argument support. The previous behavior is deprecated. Deprecated
+-	the /NoKeywordArgs/ annotation. Deprecated the code generator's -k
+-	command line option.
+-	[2294802123f4]
+-
+-2010-11-28  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/lexer.l, sipgen/parser.y, sipgen/sip.h:
+-	More generic parser fixes for directives that allow an argument
+-	without requiring parentheses.
+-	[1d6ba419952c]
+-
+-2010-11-27  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/parser.y, sphinx/directives.rst:
+-	Semi-colons are now not allowed after directives with no sub-
+-	directives but are now required after the closing brace after sub-
+-	directives.
+-	[1a300e9d7f80]
+-
+-	* sipgen/parser.y:
+-	Tidy up some coding inconsistencies in the parser.
+-	[c86ace2573fd]
+-
+-	* sipgen/lexer.l, sipgen/parser.y, sipgen/sip.h:
+-	The (internal) %Plgin directive now uses the revised syntax.
+-	[86a793919cd1]
+-
+-	* sipgen/lexer.l, sipgen/parser.y, sphinx/directives.rst:
+-	%Timeline now respects %If/%End.
+-	[d227e7ea1eac]
+-
+-	* sipgen/parser.y, sphinx/directives.rst:
+-	%Platforms now respects %If/%End.
+-	[3c1e4cb9dd4c]
+-
+-	* sipgen/parser.y, sphinx/directives.rst:
+-	%Doc and %ExportedDoc now respect %If/%End.
+-	[e3f95120f8c9]
+-
+-	* sipgen/lexer.l, sipgen/parser.y, sphinx/directives.rst:
+-	%OptionalInclude is now deprecated.
+-	[fbfa68d0b559]
+-
+-	* sipgen/parser.y, sphinx/directives.rst:
+-	The %MappedType sub-directives now respect %If/%End.
+-	[afb6cb9b21b9]
+-
+-	* sipgen/lexer.l, sipgen/parser.y, sipgen/sip.h,
+-	sphinx/annotations.rst, sphinx/conf.py.in, sphinx/directives.rst:
+-	%License now uses the revised syntax.
+-	[ebeed9b2838e]
+-
+-	* sipgen/lexer.l, sipgen/parser.y, sipgen/sip.h,
+-	sphinx/directives.rst:
+-	%Include now follows the new syntax and includes the functionality
+-	of %OptionalInclude.
+-	[b71dca41f194]
+-
+-	* sipgen/lexer.l, sipgen/parser.y, sipgen/sip.h,
+-	sphinx/directives.rst:
+-	%Import now uses the revised syntax.
+-	[df828f381c63]
+-
+-	* sipgen/lexer.l, sipgen/parser.y, sipgen/sip.h,
+-	sphinx/directives.rst:
+-	Changed the argument of %DefaultEncoding to 'name' to be consistent
+-	with other similar directives.
+-	[66c4f0e60cc5]
+-
+-2010-11-26  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/lexer.l, sipgen/parser.y, sipgen/sip.h,
+-	sphinx/directives.rst:
+-	%Feature now uses the revised syntax.
+-	[ca22b358ab05]
+-
+-	* sipgen/lexer.l, sipgen/parser.y, sipgen/sip.h,
+-	sphinx/directives.rst, sphinx/specification_files.rst:
+-	%Exception now (sort of) follows the revised syntax.
+-	[b19d67575786]
+-
+-	* sipgen/parser.y, sphinx/directives.rst:
+-	Reverted the change to make %Copying a sub-directive.
+-	[d59876780e53]
+-
+-	* sipgen/lexer.l, sipgen/parser.y, sipgen/sip.h,
+-	sphinx/directives.rst:
+-	%DefaultEncoding now uses the revised syntax.
+-	[111024e5bcbd]
+-
+-2010-11-25  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/lexer.l, sipgen/parser.y, sipgen/sip.h,
+-	sphinx/directives.rst, sphinx/incompatibilities.rst,
+-	sphinx/specification_files.rst:
+-	Fixed some more generic parser issues. %Copying is now a sub-
+-	directive of each of the different module directives. All the module
+-	directives now support docstrings.
+-	[6244dcb1fcb9]
+-
+-	* sipgen/parser.y, sipgen/sip.h, sphinx/directives.rst:
+-	%CompositeModule and %Consolidated module now conform to the revised
+-	syntax.
+-	[18da01aba948]
+-
+-	* sipgen/parser.y, sipgen/sip.h, sphinx/directives.rst,
+-	sphinx/using.rst:
+-	%API now uses the revised directive syntax.
+-	[b7ba07998b37]
+-
+-2010-11-23  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Generated #line directives now include the full path name of the
+-	file.
+-	[52ed45309f83]
+-
+-	* siplib/siplib.c.in:
+-	Reverted the broken "fixes" passing sub-int values as varargs.
+-	[167ff79ec560]
+-
+-2010-11-22  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/parser.y, sipgen/sip.h, sphinx/directives.rst:
+-	The %Module and %Property sub-directives now respect %If/%End.
+-	%AccessCode, %GetCode and %SetCode are now new-style sub-directives.
+-	[7dfe49a56ec7]
+-
+-	* Roadmap.rst:
+-	Added the v5 roadmap.
+-	[9ddab02f25a6]
+-
+-	* sipgen/parser.y:
+-	/PyInt/ can now be applied to pointer types.
+-	[0a986be7f8e4]
+-
+-2010-11-21  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, sipgen/export.c, sipgen/gencode.c, sipgen/parser.y,
+-	sipgen/sip.h, sipgen/transform.c, siplib/siplib.c.in,
+-	sphinx/annotations.rst, sphinx/c_api.rst:
+-	Added /PyInt/ as an argument and function annotation. Added the L
+-	and M format characters to sipBuildResult(), sipCallMethod() and
+-	sipParseResult(). Fixed a bug in sipParseResult() in the handling of
+-	encoded strings.
+-	[372703eb4e88]
+-
+-	* sipgen/gencode.c:
+-	Fixed a bug maintaining the current line number when generating
+-	docstrings.
+-	[2327d077f65a]
+-
+-2010-11-20  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/parser.y, sphinx/specification_files.rst:
+-	Added parser support for empty namespaces. Documented how namespaces
+-	are implemented and how to achieve the different behaviors.
+-	[9101c7412e89]
+-
+-	* sphinx/annotations.rst, sphinx/command_line.rst,
+-	sphinx/directives.rst:
+-	Documented that -I, %Import and %Include all expect POSIX style
+-	directory separators.
+-	[7b0d6bc17f28]
+-
+-2010-11-13  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/sip.h.in.in, siplib/siplib.c.in, siplib/voidptr.c:
+-	Eliminate compiler warnings when building the sip module.
+-	[93040d2c716c]
+-
+-	* siplib/siplib.c.in, siplib/voidptr.c:
+-	Fixed some Python v3 and MSVC build bugs.
+-	[43cb06769dd6]
+-
+-2010-11-12  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS:
+-	More updates to the NEWS file.
+-	[c38668e9dd93]
+-
+-	* NEWS:
+-	Updated the NEWS file.
+-	[37a725e0b83a]
+-
+-	* sipgen/lexer.l, sipgen/parser.y, sipgen/sip.h, siplib/siplib.c.in:
+-	Eliminated a couple of warning messages.
+-	[8d220ed77f02]
+-
+-	* sipgen/parser.y:
+-	%Module and %Property sub-directives can now be individually
+-	enclosed in %If/%End.
+-	[637f2357b1e4]
+-
+-	* sphinx/annotations.rst, sphinx/directives.rst:
+-	Documented the %AutoPyName directive.
+-	[e8106eb58553]
+-
+-	* sipgen/lexer.l, sipgen/parser.y, sipgen/sip.h:
+-	Added the %AutoPyName directive.
+-	[85d02c95ebf7]
+-
+-2010-11-11  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/main.c.in, sipgen/sip.h,
+-	sphinx/command_line.rst:
+-	Added the -T command line flag to suppress the timestamp in the
+-	header of generated source files.
+-	[d84b9db1d89d]
+-
+-	* sipgen/gencode.c:
+-	Fixed a bug where keyword strings where being generated for /Out/
+-	arguments.
+-	[2a314426e67a]
+-
+-	* sipgen/gencode.c, sipgen/lexer.l, sipgen/parser.y, sipgen/sip.h,
+-	sphinx/directives.rst:
+-	Replaced the %RealArgNames directive with the use_argument_names
+-	argument to the %Module directive.
+-	[0eb004659e3d]
+-
+-	* sipgen/parser.y, sphinx/directives.rst:
+-	The %Module directive now respects the %If directive.
+-	[9b99a6f7d295]
+-
+-	* sphinx/directives.rst:
+-	Documented the revised %Module directive syntax.
+-	[0a7d4b89a2eb]
+-
+-	* sipgen/gencode.c, sipgen/lexer.l, sipgen/parser.y, sipgen/sip.h:
+-	%Module now supports the revised directive syntax. Module docstrings
+-	are now supported. %CModule is deprecated.
+-	[2606deb743f2]
+-
+-2010-11-09  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fixed a bug in the generated of the variables table.
+-	[eac351f5cca7]
+-
+-	* sipgen/gencode.c, sipgen/sip.h, sipgen/transform.c:
+-	Fixed a bug in the tidying up of temporary class instances in unary
+-	operators.
+-	[990299a02451]
+-
+-	* sphinx/directives.rst:
+-	Documented the %Property directive.
+-	[455500391b43]
+-
+-	* sipgen/parser.y, sphinx/directives.rst:
+-	Documented the revised directive syntax. Updated %Extract so that it
+-	follows the revised syntax completely. %Extract no longer uses a
+-	quoted string as an identifer.
+-	[7970e4fa94ef]
+-
+-	* sipgen/gencode.c, sipgen/sip.h, sipgen/transform.c,
+-	siplib/sip.h.in.in, siplib/siplib.c.in:
+-	Completed the support for %Property.
+-	[dfd258dec260]
+-
+-	* sipgen/gencode.c, sipgen/sip.h:
+-	The code generator now generates the property structure.
+-	[07134d471acd]
+-
+-	* sipgen/gencode.c, siplib/descriptors.c, siplib/sip.h.in.in,
+-	siplib/siplib.c.in:
+-	Migrated the existing variable support to the new runtime structure.
+-	[c66412e816ab]
+-
+-2010-11-08  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/lexer.l:
+-	Fixed the parser so that C/C++ argument names don't get confused
+-	with directive argument names.
+-	[8bad8295e12f]
+-
+-2010-11-07  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/lexer.l, sipgen/parser.y, sipgen/sip.h, sipgen/transform.c:
+-	Renamed getter to get and setter to set to be consistent with
+-	%GetCode and %SetCode.
+-	[eef0c18dd0df]
+-
+-	* sipgen/parser.y, sipgen/transform.c:
+-	The %Property getters and setters are now validated.
+-	[caf6e4cee176]
+-
+-	* sipgen/lexer.l, sipgen/parser.y, sipgen/sip.h:
+-	Added parser support for %Property.
+-	[41f66dca2447]
+-
+-	* sipgen/extracts.c, sipgen/lexer.l, sipgen/main.c.in,
+-	sipgen/parser.y, sipgen/sip.h, sipgen/sipgen.sbf,
+-	sphinx/command_line.rst, sphinx/directives.rst,
+-	sphinx/specification_files.rst:
+-	Added the %Extract directive and the corresponding -X command line
+-	option.
+-	[37a7149135a9]
+-
+-2010-11-04  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/lexer.l, sipgen/main.c.in, sipgen/parser.y, sipgen/sip.h,
+-	sphinx/c_api.rst, sphinx/command_line.rst, sphinx/directives.rst,
+-	sphinx/introduction.rst.in, sphinx/python_api.rst:
+-	Issue warning messages from the parser about deprecated syntax.
+-	Updated the documentation regarding deprecations.
+-	[3a45afc8d9eb]
+-
+-	* siplib/voidptr.c:
+-	Fixed a bug in the new sip.voidptr code for Python v2.5 and earlier.
+-	[7ff903c5cb76]
+-
+-	* sphinx/python_api.rst:
+-	Updated the sip.voidptr documentation to describe the memoryview-
+-	like support.
+-	[b49b90639831]
+-
+-	* sipdistutils.py:
+-	sipdistutils.py now allows the output directory to be overriden in a
+-	derived class.
+-	[5a1f9d9fff30]
+-
+-2010-11-02  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/voidptr.c:
+-	Fixed a silly typo in the sip.voidptr changes.
+-	[af2d7120dd7f]
+-
+-	* siplib/voidptr.c:
+-	sip.voidptr now supports sub-script assignment for Python v2.4 and
+-	earlier.
+-	[14186a17d310]
+-
+-	* siplib/voidptr.c:
+-	sip.voidptr now supports sub-script assignment for Python v2.5.
+-	[67ef521ce467]
+-
+-	* siplib/voidptr.c:
+-	sip.voidptr now supports sub-script assignment (Python v2.6 and
+-	later only at the moment).
+-	[4ad087fd7e94]
+-
+-	* siplib/voidptr.c:
+-	sip.voidptr can now be indexed like memoryview.
+-	[76620ebb872e]
+-
+-	* siplib/voidptr.c:
+-	sip.voidptr now fully implements the new buffer protocol for Python
+-	v2 so that memoryview works.
+-	[f9dfbda5844f]
+-
+-	* NEWS, build.py, configure.py.in, sipgen/gencode.c, siplib/sip.h.in,
+-	siplib/sip.h.in.in, siplib/siplib.c, siplib/siplib.c.in,
+-	siplib/siplib.sbf, siplib/siplib.sbf.in, sphinx/installation.rst,
+-	sphinx/using.rst:
+-	Added the --sip-module flag to configure.py to allow private copies
+-	of the module to be built.
+-	[8b8e93a159c6]
+-
+-2010-10-25  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/lexer.l, sipgen/parser.y, sipgen/sip.h,
+-	sphinx/directives.rst, sphinx/specification_files.rst:
+-	Added the %RealArgNames directive.
+-	[12acbffd0085]
+-
+-2010-10-24  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/lexer.l:
+-	All directives now start with the first non-whitespace character of
+-	a line.
+-	[c5a525178196]
+-
+-	* .hgtags:
+-	Merged the v4.11 branch into the trunk.
+-	[a7689cef100b]
+-
+-2010-10-22  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS:
+-	Released as v4.11.2.
+-	[13f57fe7e992] [4.11.2] <4.11-maint>
+-
+-	* sipgen/gencode.c:
+-	Fixed the implementation of %MethodCode for dtors in C modules.
+-	[4f26704c5789] <4.11-maint>
+-
+-2010-10-21  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c:
+-	Make sure that lazy attributes have been added when searching for a
+-	Python reimplemention of a C++ method.
+-	[f45ff97a3c66] <4.11-maint>
+-
+-	* siplib/sip.h.in:
+-	Properly set SIP_SUPPORT_PYCOBJECT in sip.h.
+-	[f1cf3fef8eb5] <4.11-maint>
+-
+-2010-10-12  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h, siplib/sip.h.in,
+-	siplib/siplib.c:
+-	__enter__ and __exit__ are now handled as non-lazy methods and are
+-	added to the type dictionary when the type is created (rather than
+-	when the first attribute of the first instance is accessed). This
+-	required by a change in behaviour introduced in Python v2.7 and
+-	v3.2.
+-	[5167b98767e2] <4.11-maint>
+-
+-2010-10-11  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS:
+-	Updated the NEWS file.
+-	[ed3deec59b70] <4.11-maint>
+-
+-2010-10-09  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	/KeepReference/ now applies to global functions.
+-	[52e6a73fd81f] <4.11-maint>
+-
+-	* siplib/siplib.c:
+-	Fixed a regression in the handling of global class pointers (eg.
+-	qApp in PyQt3).
+-	[08328092b36b] <4.11-maint>
+-
+-2010-10-08  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, siplib/siplib.c:
+-	/KeepReference/ can now be applied to static methods.
+-	[43c2359df596] <4.11-maint>
+-
+-2010-10-03  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h,
+-	sphinx/directives.rst:
+-	%TypeCode can now be specified in a %MappedType directive.
+-	[8727e0eb0f5e] <4.11-maint>
+-
+-	* sipgen/transform.c:
+-	Mapped types for templates no longer require the template arguments
+-	to be defined.
+-	[7ed0e265a218] <4.11-maint>
+-
+-2010-10-01  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siputils.py:
+-	Added support for the MSBUILD Makefile generator introduced in Qt
+-	v4.7 for the win32-msvc2010 target.
+-	[ff2494c0e443] <4.11-maint>
+-
+-2010-09-30  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/parser.y:
+-	A protected class enum will now trigger the generation of a shadow
+-	class.
+-	[18681651c2c7] <4.11-maint>
+-
+-2010-09-27  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sphinx/c_api.rst:
+-	A minor documentation fix.
+-	[f6df40935e99] <4.11-maint>
+-
+-2010-09-24  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* configure.py.in:
+-	Fixed the rpaths problem properly (ie. didn't apply the fix to a
+-	generated file).
+-	[c93f5da3d4e4] <4.11-maint>
+-
+-	* NEWS, siputils.py:
+-	Taught the build system about QtDeclarative. Updated the NEWS file.
+-	[2487fb909ee1] <4.11-maint>
+-
+-2010-09-23  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siputils.py:
+-	Fixed rpaths for Qt v4.7.
+-	[4d12df6526e5] <4.11-maint>
+-
+-2010-09-14  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/sip.h.in:
+-	Ensured that uint is always defined.
+-	[b6508f053614] <4.11-maint>
+-
+-2010-09-06  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.11.1 for changeset fdf86b3115cd
+-	[3213dc5731bb] <4.11-maint>
+-
+-	* NEWS:
+-	Released as v4.11.1.
+-	[fdf86b3115cd] [4.11.1] <4.11-maint>
+-
+-2010-09-02  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/objmap.c:
+-	When deciding if an entry in the object map is valid the C/C++
+-	address is first checked to see if it is still valid. This detects
+-	the case (if there is a guard in place) where a new C/C++ object has
+-	been created at the same address of one that has been destroyed (but
+-	whose Python wrapper is still around).
+-
+-	HG commit message. Lines beginning with 'HG:' are removed.
+-	[13632c7f0f2c] <4.11-maint>
+-
+-2010-08-31  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.11 for changeset 80f7c6530416
+-	[86286537601c]
+-
+-	* NEWS:
+-	Released as v4.11.
+-	[80f7c6530416] [4.11]
+-
+-2010-08-23  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, siplib/objmap.c, siplib/sip.h.in, siplib/siplib.c,
+-	sphinx/c_api.rst:
+-	Objects with handwritten access functions are no longer placed in
+-	the object map as they don't have a usable key. Reworked the support
+-	for meta-type aupplied access functions so that the original address
+-	is still available (even if it is no longer valid) to be used to
+-	search the object map.
+-	[c38d259c1879]
+-
+-2010-08-21  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS:
+-	Updated the NEWS file.
+-	[7cff86d70dc7]
+-
+-2010-08-20  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c:
+-	The parsing of encoded strings is now done with two passes so that
+-	encoding errors are now picked up in the second pass and raise an
+-	appropriate exception.
+-	[89ff42be167c]
+-
+-2010-08-19  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h,
+-	sphinx/annotations.rst:
+-	The /KeepReference/ annotation now takes an optional integer key
+-	value.
+-	[efff0d2932e1]
+-
+-	* sipgen/gencode.c, sipgen/parser.y, siplib/siplib.c:
+-	operator() and __call__() now support keyword arguments.
+-	[0daacc25c6ce]
+-
+-2010-08-18  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/sip.h.in, siplib/siplib.c, sphinx/c_api.rst:
+-	Completed the access function implementation so that any resources
+-	created by access functions are released appropriately.
+-	[35cf486718d4]
+-
+-2010-08-17  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, siplib/sip.h.in, siplib/siplib.c,
+-	sphinx/c_api.rst:
+-	Removed sipRegisterObjectFinaliser() and assume that the equivalent
+-	functionality will be provided by a custom meta-class.
+-	[d028d0cecb7b]
+-
+-	* sipgen/gencode.c, siplib/sip.h.in, siplib/siplib.c:
+-	Added sipRegisterObjectFinaliser() and related infrastructure.
+-	(Though it will probably be replaced by a meta-type based
+-	implementation.)
+-	[d525d84c9d61]
+-
+-	* sipgen/gencode.c, siplib/objmap.c, siplib/qtlib.c, siplib/sip.h.in,
+-	siplib/sipint.h, siplib/siplib.c:
+-	All access to the C/C++ object now goes through
+-	sip_api_get_address(). Bumped the internal API version to 8.0
+-	(because the size of sipSimpleWrapper has changed).
+-	[956c80d8e9fa]
+-
+-2010-08-16  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/parser.y:
+-	Make sure #line 0 is not generated as the Intel compiler doesn't
+-	like it.
+-	[d715222f1f65]
+-
+-	* siplib/voidptr.c, sphinx/c_api.rst, sphinx/embedding.rst,
+-	sphinx/python_api.rst:
+-	Added support for Python v3.2. Exposed the SIP_USE_PYCAPSULE macro
+-	as part of the C API.
+-	[0e34dc4e0824]
+-
+-2010-08-15  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fixed a code generation bug affecting inplace operators.
+-	[6cddd9276220]
+-
+-2010-08-05  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c:
+-	Refactored the calls to assert() when creating types to catch any
+-	recursive calls.
+-	[052b642f04a8]
+-
+-2010-08-03  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Make sure the %UnitPostIncludeCode is after all #includes.
+-	[d45e8042c7da]
+-
+-	* NEWS, sipgen/gencode.c, sipgen/lexer.l, sipgen/parser.y,
+-	sipgen/sip.h, sphinx/directives.rst:
+-	Added the %UnitPostIncludeCode directive.
+-	[058d680384e7]
+-
+-	* NEWS, sipgen/export.c, sipgen/gencode.c, sipgen/lexer.l,
+-	sipgen/parser.y, sipgen/sip.h, sipgen/transform.c,
+-	sphinx/directives.rst:
+-	Removed the %RemoveNamespace directive.
+-	[18fc68280d49]
+-
+-	* sipgen/gencode.c:
+-	Removed 'const' and '&' from signal signatures so that Qt doesn't
+-	have to.
+-	[9e9795fa36a5]
+-
+-	* sipgen/transform.c:
+-	Fixed a problem with the recent change regarding the original types
+-	of template based mapped types.
+-	[83019d3299ea]
+-
+-	* sipgen/gencode.c, sipgen/parser.y:
+-	Generated code now uses 'uint' rather than 'unsigned'. This is
+-	because Qt's QMetaObject::normalizedType() converts the latter to
+-	the former.
+-	[0923d067541a]
+-
+-	* sipgen/gencode.c:
+-	The generated typedefs table now always defines a type in terms of a
+-	base type and never another typedef type.
+-	[5ed328590fd1]
+-
+-	* sipgen/transform.c:
+-	Template based mapped types now correctly keep a reference to the
+-	original types used when invoking the template.
+-	[691852c6b0b0]
+-
+-2010-07-31  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/transform.c:
+-	Const references are now assumed to be input arguments rather than
+-	output arguments.
+-	[d11b7adf095a]
+-
+-2010-07-29  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/parser.y:
+-	An improvement on the previous fix.
+-	[086a77b99464]
+-
+-	* sipgen/parser.y:
+-	Fixed global operators that are declared in a namespace.
+-	[c46ac8f9b1e9]
+-
+-2010-07-27  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* build.py:
+-	Switched to the new format of snapshot names.
+-	[4d30378c5622]
+-
+-	* NEWS, sipgen/export.c, sipgen/gencode.c, sipgen/lexer.l,
+-	sipgen/parser.y, sipgen/sip.h, sipgen/transform.c,
+-	sphinx/directives.rst:
+-	Implemented the %RemoveNamespace directive.
+-	[a2eb3fe46f43]
+-
+-	* lib/LICENSE, lib/LICENSE-GPL2.txt, lib/LICENSE-GPL3.txt,
+-	lib/LICENSE.short, lib/README, lib/configure.py,
+-	lib/sipdistutils.py, lib/siputils.py, sipgen/main.c, siplib/sip.h,
+-	sphinx/Makefile, sphinx/conf.py, sphinx/introduction.rst:
+-	Merged v4.10.5 into the trunk.
+-	[4cce948441da]
+-
+-2010-07-16  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, siplib/sip.h.in, siplib/voidptr.c, sphinx/python_api.rst:
+-	Released as v4.10.5. Fixed the build regression against Python v3
+-	introduced in SIP v4.10.4. Properly fixed the Python v2.7 workaround
+-	that SIP v4.10.4 was supposed to address.
+-	[834787fbcb72] [4.10.5] <4.10-maint>
+-
+-2010-07-15  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.10.4 for changeset 046c346a71fe
+-	[d0340fc3658c] <4.10-maint>
+-
+-	* NEWS:
+-	Released as v4.10.4.
+-	[046c346a71fe] [4.10.4] <4.10-maint>
+-
+-2010-07-13  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, sipgen/gencode.c, siplib/siplib.c, siplib/voidptr.c:
+-	Use PyCapsule when available to work around an apparent bug in
+-	PyCObject in Python v2.7.
+-	[f5574a061fd0] <4.10-maint>
+-
+-2010-07-12  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.10.3 for changeset 2ec1a8f8560c
+-	[254b8071446e] <4.10-maint>
+-
+-	* NEWS, README:
+-	Released as v4.10.3.
+-	[2ec1a8f8560c] [4.10.3] <4.10-maint>
+-
+-2010-07-08  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h,
+-	sipgen/transform.c, sphinx/annotations.rst:
+-	Added support for the __len__ annotation.
+-	[f760366cea3b] <4.10-maint>
+-
+-	* sipgen/transform.c:
+-	Assignment helpers are now generated for classes that have a ctor
+-	where all arguments are optional.
+-	[3e647ed0f2a2] <4.10-maint>
+-
+-2010-06-29  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fixed the code generator for /NewThread/ methods so that it no
+-	longer assumes that such methods are abstract (though it still
+-	assumes they don't return a value) as QThread.run() no longer is.
+-	[710b71e6f0c6] <4.10-maint>
+-
+-	* siputils.py:
+-	Fixed a regression introduced when fixing the += problem with spec.
+-	files.
+-	[94d177d8f426] <4.10-maint>
+-
+-2010-06-11  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/export.c, sipgen/gencode.c, sipgen/sip.h:
+-	Changed the generated docstrings for signals to use [] rather than
+-	() to surround the arguments.
+-	[1851f2d754e7] <4.10-maint>
+-
+-2010-06-10  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fixed a code generation bug where special methods that invoke
+-	sipNoMethod() were trying to tidy up sipParseErr rather than leaving
+-	it to sipNoMethod().
+-	[90aad46480b2] <4.10-maint>
+-
+-2010-06-08  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fixed the previous fix to avoid compiler warning messages.
+-	[0a3f45fea555] <4.10-maint>
+-
+-	* sipgen/gencode.c:
+-	Fixed a code generation bug caused by ctor handwritten code that
+-	sets the error flag and isn't handling unused keyword arguments.
+-	[d53889ad7abe] <4.10-maint>
+-
+-2010-06-06  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS, sipgen/lexer.l, sipgen/parser.y, sipgen/sip.h,
+-	sphinx/specification_files.rst:
+-	Added support for Q_SLOT and Q_SIGNAL.
+-	[cb323da88516] <4.10-maint>
+-
+-2010-06-05  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/lexer.l:
+-	Added support for Q_SIGNALS and Q_SLOTS as synonyms for signals and
+-	slots.
+-	[daf61465ef3c] <4.10-maint>
+-
+-	* siputils.py:
+-	Fixed a build system regression introduced when not linking against
+-	X11 when building QtCore.
+-	[ee5415b91040] <4.10-maint>
+-
+-2010-06-03  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siputils.py:
+-	The build system now handles += in spec files properly.
+-	[f292793d6c99] <4.10-maint>
+-
+-2010-05-28  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* configure.py.in, siputils.py:
+-	A build system fix for building a static version of QWebKit.
+-	[de0df36d3162] <4.10-maint>
+-
+-	* sipgen/transform.c:
+-	Fixed a bug in the error message when reporting an unsupported
+-	signal argument type.
+-	[7adbf28d075e] <4.10-maint>
+-
+-2010-05-07  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fix a code generation bug where a protected ctor had a protected
+-	enum argument.
+-	[529660fb77a9] <4.10-maint>
+-
+-2010-04-23  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/main.c.in, siplib/qtlib.c:
+-	Invoking a slot is ignored if the underlying C++ object no longer
+-	exists.
+-	[7387fa17a780] <4.10-maint>
+-
+-2010-04-16  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.10.2 for changeset 44ac47d02467
+-	[2a980c3f0e3a] <4.10-maint>
+-
+-	* NEWS:
+-	Released as v4.10.2.
+-	[44ac47d02467] [4.10.2] <4.10-maint>
+-
+-2010-04-06  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sphinx/using.rst:
+-	Updated the PyQt example for PyQt4.
+-	[275fa5a54910] <4.10-maint>
+-
+-2010-04-01  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c:
+-	Fixed a regression in the new-style error handling of C++ ctors that
+-	raise exceptions.
+-	[ea295d6e9e9c] <4.10-maint>
+-
+-2010-03-26  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siputils.py:
+-	The X11 libraries will only be linked for modules that depend on the
+-	QtGui module.
+-	[9fe1eb5bf1ac] <4.10-maint>
+-
+-2010-03-22  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* siplib/siplib.c:
+-	Fixed a bug in the pickle support under Python v3.
+-	[9c51fda2b963] <4.10-maint>
+-
+-2010-03-17  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* .hgtags:
+-	Added tag 4.10.1 for changeset 812aad0bacea
+-	[6f759792341f] <4.10-maint>
+-
+-	* NEWS, build.py:
+-	Fixed the generation of the change log after tagging a release.
+-	Updated the NEWS file. Released as v4.10.1.
+-	[812aad0bacea] [4.10.1] <4.10-maint>
+-
+-	* siplib/siplib.c:
+-	Removed an unused variable left over from the previous commit.
+-	[0068b2608046] <4.10-maint>
+-
+-	* siplib/siplib.c:
+-	Fixed the implementation of sip.cast().
+-	[93bc3ab3fef5] <4.10-maint>
+-
+-2010-03-02  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* NEWS:
+-	Updated the NEWS file.
+-	[752ab6580111] <4.10-maint>
+-
+-2010-02-26  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c:
+-	Fixed a memory leak with the new error handling and most Python
+-	special methods.
+-	[637497440cb5] <4.10-maint>
+-
+-	* sipgen/transform.c:
+-	Global operators, when moved to the correct class, are now appended
+-	to the list of any existing overloads to make sure the generated
+-	code is in the same order as the overloads in the .sip file.
+-	[5c0eb00cd19b] <4.10-maint>
+-
+-2010-02-25  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/export.c:
+-	Arguments in docstrings only have names if they are optional.
+-	[0f83f6c82600] <4.10-maint>
+-
+-2010-02-20  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, siplib/sip.h.in, siplib/siplib.c,
+-	sphinx/c_api.rst, sphinx/incompatibilities.rst:
+-	Fixed a bug in the handling of /Out/ arguments of virtuals where the
+-	type was a reference to a class by adding the 'H' format character
+-	to sipParseResult() (and deprecating the 'D' format character).
+-	[c723c4de2e22] <4.10-maint>
+-
+-2010-02-18  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sphinx/annotations.rst:
+-	Fixed a bug in the documentation of the NoCopy annotation.
+-	[cb2c1ea78ed5] <4.10-maint>
+-
+-2010-02-07  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h,
+-	sphinx/annotations.rst:
+-	Python reimplementations of C++ virtuals will now be given a copy of
+-	any const references to classes so that they can keep a reference
+-	without needing to do their own explicit copy. The previous
+-	behaviour can be obtained using the new NoCopy annotation. The
+-	NoCopy annotation can also be applied to functions and methods to
+-	prevent the automatic copying of const references to classes that
+-	are returned.
+-	[724e4236428b] <4.10-maint>
+-
+-2010-02-02  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/export.c:
+-	Fixed the XML exporting of mapped type arguments.
+-	[b514b2f196b8] <4.10-maint>
+-
+-	* siplib/sipint.h, siplib/siplib.c, siplib/siplib.sbf,
+-	siplib/voidptr.c:
+-	Moved the voidptr code to a separate file. Eliminated a few
+-	compilation warnings that have crept into the sip module. Refactored
+-	the sip module to eliminate the (wrong) forward declaration of the
+-	static type structures.
+-	[f07ec31fbdf9] <4.10-maint>
+-
+-	* build.py:
+-	Fixed a bug in the release action of build.py.
+-	[bcdd91cbf139] <4.10-maint>
+-
+-2010-01-31  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* sipgen/main.c.in:
+-	Added the -b command line argument to the sip usage text.
+-	[7ae3aa20dfc0] <4.10-maint>
+-
+-2010-01-29  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* build.py:
+-	Refactored build.py so that it can be easily used as an imported
+-	module.
+-	[9170df0b1ea3] <4.10-maint>
+-
+-2010-01-28  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* build.py:
+-	Fixed a regression in the release action of build.py.
+-	[e3611c1babe7] <4.10-maint>
+-
+-	* build.py:
+-	Changed the format of the changelog to be closer to the Mercurial
+-	default.
+-	[f1d6ba993e7f] <4.10-maint>
+-
+-	* build.py:
+-	Added the changelog action to build.py.
+-	[8189b0595d44] <4.10-maint>
+-
+-	* build.py:
+-	build.py now generates a version number corresponding to the next
+-	release (as the old build system did).
+-	[d09c61626663] <4.10-maint>
+-
+-	* build.py:
+-	build.py now doesn't care about the current working directory. Fixed
+-	the handling of branch names.
+-	[3402912a0176] <4.10-maint>
+-
+-2010-01-27  Phil Thompson  <phil at riverbankcomputing.com>
+-
+-	* README:
+-	Updated the README to document the need for flex, bison and Sphinx.
+-	[d785bd5471f8] <4.10-maint>
+-
+-	* sphinx/introduction.rst.in:
+-	Updated the documentation to include the URL of the Mercurial
+-	repository.
+-	[0a7fc3830b27] <4.10-maint>
+-
+-	* LICENSE, LICENSE-GPL2, LICENSE-GPL3, README, build.py,
+-	configure.py.in, lib/LICENSE, lib/LICENSE-GPL2.txt, lib/LICENSE-
+-	GPL3.txt, lib/LICENSE.short, lib/README, lib/configure.py,
+-	lib/sipdistutils.py, lib/siputils.py, sipdistutils.py,
+-	sipgen/export.c, sipgen/gencode.c, sipgen/heap.c, sipgen/lexer.l,
+-	sipgen/main.c, sipgen/main.c.in, sipgen/parser.y, sipgen/sip.h,
+-	sipgen/sipgen.sbf, sipgen/transform.c, siplib/apiversions.c,
+-	siplib/bool.cpp, siplib/descriptors.c, siplib/objmap.c,
+-	siplib/qtlib.c, siplib/sip.h, siplib/sip.h.in, siplib/sipint.h,
+-	siplib/siplib.c, siplib/siplib.sbf, siplib/threads.c, siputils.py,
+-	sphinx/Makefile, sphinx/conf.py, sphinx/conf.py.in,
+-	sphinx/introduction.rst, sphinx/introduction.rst.in:
+-	Refactored the build.py script so that it is a documented utility
+-	for allowing SIP to be built from a Mercurial repository or archive.
+-	Updated the directory structure accordingly.
+-	[3edc3f9c777f] <4.10-maint>
+-
+-2010-01-27  phil  <phil>
+-
+-	* .hgtags:
+-	Import from SVN.
+-	[d6529eb1c096]
+-
+-2010-01-14  phil  <phil>
+-
+-	* NEWS, lib/LICENSE.short:
+-	Released as v4.10.
+-	[d7aa01036415] [4.10]
+-
+-2010-01-08  phil  <phil>
+-
+-	* lib/siputils.py, sipgen/gencode.c, sipgen/transform.c,
+-	siplib/siplib.c:
+-	Taught the build system about QtMultimedia. Removed some potential
+-	warning messages in virtual catchers with handwritten code. Fixed
+-	docstrings that might contain C++ rather than Python scoping.
+-	[d1214a2c892d]
+-
+-2010-01-02  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	Fixed a crash in the error handling when trying to call sip.wrapper
+-	or sip.wrappertype explicitly.
+-	[4f7c7b09a3e4]
+-
+-2009-12-29  phil  <phil>
+-
+-	* siplib/apiversions.c:
+-	Fixed a memory corruption bug in the implementation of sip.setapi().
+-	[11cc05a59770]
+-
+-2009-12-28  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	A fix for building against Stackless.
+-	[a3ce099e5002]
+-
+-2009-12-27  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	Fixed a regression in the parsing of constrained enums.
+-	[eacac49b64df]
+-
+-	* siplib/siplib.c:
+-	Fixed a bug in the lookup of virtual reimplementations that may only
+-	be apparent when looking up Python special methods.
+-	[97c538d2e634]
+-
+-2009-12-26  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	Backed out the check for sub-classing from more than one wrapped
+-	type as it isn't sophisticated enough to handle mixins that share a
+-	meta-class.
+-	[34cf41855599]
+-
+-2009-12-23  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	Added a hack for va_copy() being missing in MSVC.
+-	[e3bd9f6c1a3a]
+-
+-2009-12-22  phil  <phil>
+-
+-	* lib/siputils.py:
+-	Another attempt to fix creating script wrappers on MacOS to
+-	invokethe right version of Python.
+-	[39d66e33acfd]
+-
+-	* sipgen/export.c, sipgen/gencode.c, sipgen/sip.h:
+-	Fixed a docstring bug handling default values that are literal
+-	strings.
+-	[a1fea3306f54]
+-
+-2009-12-21  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	Fixed a fundamental problem with the parsing of signatures that
+-	allow keyword arguments where the current position in the format
+-	string and the var_args was being lost.
+-	[afa78322cb2d]
+-
+-2009-12-19  phil  <phil>
+-
+-	* sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	Changed the signature of sipAddException(). Fixed a reference count
+-	bug in the handling of chained parse errors.
+-	[1e48cd06b448]
+-
+-2009-12-17  phil  <phil>
+-
+-	* NEWS, sipgen/gencode.c, siplib/sip.h, siplib/siplib.c,
+-	sphinx/c_api.rst:
+-	Added sipBadCallableArg() to the C API.
+-	[4046e5d6ca66]
+-
+-2009-12-15  phil  <phil>
+-
+-	* sipgen/parser.y:
+-	Fixed a NULL dereference when instantiating an unscoped class
+-	template.
+-	[908f41773044]
+-
+-2009-12-14  phil  <phil>
+-
+-	* NEWS, sipgen/gencode.c, siplib/sip.h, siplib/siplib.c,
+-	sphinx/directives.rst:
+-	Added support for sipError to %MethodCode to allow code to
+-	distinguish between user errors and system errors.
+-	[8cb9ae04484a]
+-
+-2009-12-12  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	Raise an exception if the automatically generated cast function
+-	fails (though this, theoretcally, shouldn't happed). Explicitly test
+-	for attempting to inherit from more than one wrapped type.
+-	[ae6cee8faa67]
+-
+-2009-12-11  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	Fixed the generation of a bad call to sipMalloc() when generating
+-	for a C library.
+-	[a174c9456eab]
+-
+-2009-12-04  phil  <phil>
+-
+-	* sipgen/parser.y:
+-	Finally fixed %DefaultEncoding when set in an imported module.
+-	[d1eec2d99a95]
+-
+-2009-12-03  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	Fixed a problem where Python wasn't creating descriptors for any
+-	enum slots which meant that explicitly calling special methods
+-	failed to invoke those slots.
+-	[ca934a1f4132]
+-
+-2009-12-02  phil  <phil>
+-
+-	* NEWS, sipgen/gencode.c, siplib/siplib.c, sphinx/python_api.rst:
+-	Use capsules for Python v3.1 and later. Added the
+-	sip.voidptr.ascapsule() method.
+-	[154f2c63c18d]
+-
+-2009-11-23  phil  <phil>
+-
+-	* NEWS, sipgen/transform.c:
+-	Fixed a bug where assignment helpers may not be generated for
+-	classes that have an alternate mapped type implementation.
+-	[6734e82522ee]
+-
+-2009-11-17  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	Fixed a problem that meant that circular references in slots
+-	connected to objects owned by C++ weren't being detected.
+-	[b38add3f63d9]
+-
+-2009-11-15  phil  <phil>
+-
+-	* sipgen/parser.y:
+-	Fixed a bug where %DefaultEncoding could be ignored if %Imports were
+-	being done in an inconvenient order.
+-	[ae075b6d08ea]
+-
+-	* sphinx/command_line.rst, sphinx/distutils.rst:
+-	Added the documentation for the updated sipdistutils.py.
+-	[c5547730f27b]
+-
+-	* lib/sipdistutils.py:
+-	An updated sipdistutils.py from Giovanni Bajo.
+-	[62a698e9f9bd]
+-
+-2009-11-14  phil  <phil>
+-
+-	* sipgen/export.c, sipgen/gencode.c, sipgen/sip.h:
+-	Signal docstrings no longer include default values as they are
+-	implemented as separate overloads.
+-	[339a2114ec6d]
+-
+-	* NEWS, sipgen/export.c, sipgen/gencode.c, sipgen/sip.h, siplib/sip.h:
+-	Docstrings are now generated for use by PyQt4 signals.
+-	[18bb2e74f269]
+-
+-2009-11-11  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	The docstrings are now wrapped with PyDoc_STRVAR().
+-	[ef3374625928]
+-
+-	* sipgen/transform.c:
+-	The /DocType/ annotation is now properly supported for typedefs.
+-	[b3bbd7202a88]
+-
+-	* sipgen/gencode.c:
+-	No docstrings are generated for any part of a class that isn't the
+-	default implementation.
+-	[9db19f2694a2]
+-
+-	* sipgen/heap.c, sipgen/parser.y, sipgen/transform.c:
+-	Added support for /DocType/ to mapped type templates.
+-	[74a135153c66]
+-
+-2009-11-10  phil  <phil>
+-
+-	* NEWS, sipgen/gencode.c, sipgen/lexer.l, sipgen/parser.y,
+-	sipgen/sip.h, siplib/siplib.c, sphinx/directives.rst,
+-	sphinx/introduction.rst, sphinx/specification_files.rst:
+-	Added the %Docstring directive to specify explicit docstrings.
+-	[61b4453a9ff4]
+-
+-	* sipgen/export.c, sipgen/gencode.c, sipgen/transform.c,
+-	siplib/siplib.c:
+-	More docstring fixes. Docstrings are not now generated for non-
+-	default implementations.
+-	[64779347846b]
+-
+-2009-11-09  phil  <phil>
+-
+-	* NEWS, sipgen/gencode.c:
+-	A fix for the formatting of function calls in default values for XML
+-	and docstrings.
+-	[cfd41d5169d1]
+-
+-	* sipgen/export.c, sipgen/parser.y, sipgen/sip.h,
+-	sphinx/annotations.rst:
+-	Added the /DocValue/ argument annotation.
+-	[63dbaa87cf17]
+-
+-	* NEWS, sipgen/parser.y:
+-	String annotations can now have feature selectors embedded in them.
+-	[d8fccc02cc21]
+-
+-2009-11-08  phil  <phil>
+-
+-	* NEWS, sipgen/export.c, sipgen/gencode.c, sipgen/parser.y:
+-	More docstring fixes.
+-	[98dc281a1a11]
+-
+-	* sphinx/annotations.rst:
+-	Updated the docs as /DocType/ is also a function and variable
+-	annotation.
+-	[cad85d54df79]
+-
+-	* sipgen/export.c:
+-	Docstrings now consider all C++ integer types to be "int".
+-	Docstrings now consider all C++ character types to be "str".
+-	[72ae0dd8d9dc]
+-
+-2009-11-07  phil  <phil>
+-
+-	* sipgen/export.c, sipgen/gencode.c, sipgen/main.c, sipgen/parser.y,
+-	sipgen/sip.h, siplib/sip.h, sphinx/annotations.rst:
+-	Added the /DocType/ argument and mapped type annotation. More fixes
+-	for the docstring support.
+-	[99ebe42a8e10]
+-
+-	* sipgen/export.c, sipgen/parser.y, sipgen/transform.c:
+-	Fixed a bug where a default copy ctor might be added when there
+-	aleady was one when the class had a alternative mapped type
+-	implementation.
+-	[0db8f014b7e7]
+-
+-2009-11-06  phil  <phil>
+-
+-	* sipgen/export.c, sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h,
+-	sipgen/transform.c:
+-	Completed the basic support for automated docstrings (some tweaking
+-	still needed).
+-	[3d914379ef28]
+-
+-	* sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	Added stub docstring support for methods and classes.
+-	[b52d1ef306ae]
+-
+-2009-11-05  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/main.c, sipgen/sip.h, siplib/apiversions.c,
+-	siplib/sip.h, siplib/siplib.c, sphinx/command_line.rst,
+-	sphinx/introduction.rst:
+-	Added stubbed support for function docstrings.
+-	[91a545605044]
+-
+-2009-11-04  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	Fixed building on Python v2.
+-	[af23791238c1]
+-
+-	* sipgen/gencode.c:
+-	Fixed a memory leak of class instances annotated with /Out/ when
+-	catching C++ exceptions.
+-	[7fe47a8dd71d]
+-
+-	* siplib/siplib.c:
+-	Completed the basic extended (ie. without docstrings) error messages
+-	on overload parse failures.
+-	[fe018c83a8df]
+-
+-	* siplib/siplib.c:
+-	More support for the extended errors when parsing signatures.
+-	[e837961dad1d]
+-
+-	* sipgen/gencode.c, sipgen/parser.y, siplib/sip.h, siplib/siplib.c:
+-	Fixed a problem where an overload that didn't take keyword arguments
+-	wasn't raising an error if one was supplied and there where other
+-	overloads that did.
+-	[f405b7102d19]
+-
+-2009-11-03  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	Added the error detail for unbound methods. Ctor errors now don't
+-	include the module name (to match other errors).
+-	[b176dda5f1e9]
+-
+-	* siplib/sip.h, siplib/siplib.c:
+-	Refactored the new error reporting so that it is much more
+-	lightweight in the common case of failure to parse an overload.
+-	[e801eb8ce7e6]
+-
+-	* sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	The SIP API major version number has changed. Implemented the basics
+-	of the revised error messages (still missing the message detail
+-	though).
+-	[aa4e0e8fd705]
+-
+-2009-11-02  phil  <phil>
+-
+-	* sphinx/directives.rst:
+-	Fixed a broken Sphinx directive.
+-	[fc0975814576]
+-
+-2009-10-30  phil  <phil>
+-
+-	* NEWS, sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h,
+-	sphinx/annotations.rst, sphinx/directives.rst:
+-	Added the /Default/ exception annotation to specify an exception
+-	that will be caught if there is no throw clause. A 'catch (...)'
+-	block will now always be generated.
+-	[d65ec4986067]
+-
+-	* siplib/siplib.c:
+-	Fixed a regression in the monkey patching of instances.
+-	[94348861afba]
+-
+-	* sphinx/directives.rst:
+-	...and another.
+-	[f90c80feb177]
+-
+-	* sphinx/directives.rst:
+-	...and another documentation typo.
+-	[c3a7ea01b1e5]
+-
+-	* sphinx/directives.rst:
+-	Fixed a documentation typo.
+-	[80259f3cc2f5]
+-
+-	* sipgen/gencode.c:
+-	Fixed a double delete bug with mapped types passed as references
+-	annotated with /Out/.
+-	[a788f308bbee]
+-
+-2009-10-28  phil  <phil>
+-
+-	* NEWS, lib/configure.py, lib/siputils.py, sphinx/build_system.rst:
+-	Adde support for out-of-tree building.
+-	[837ce5451585]
+-
+-	* lib/siputils.py, sipgen/gencode.c, sipgen/main.c, sipgen/parser.y,
+-	sipgen/sip.h, sphinx/build_system.rst, sphinx/c_api.rst,
+-	sphinx/command_line.rst, sphinx/directives.rst:
+-	Added support for building with "protected" redefined as "public" to
+-	reduce the size of generated modules.
+-	[6601a9a55993]
+-
+-2009-10-26  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	sipFindType() now handles references as well as pointers.
+-	[2228a1ad7d3f]
+-
+-	* specs/linux-arm-g++, specs/linux-arm-thumb-g++, specs/linux-
+-	armv6-g++:
+-	Added the Linux ARM spec files from David Boddie's PyQt embedded
+-	patch set.
+-	[9285dfaea8a2]
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h:
+-	More keyword argument bug fixing. (PyQt now seems to work with it
+-	enabled.)
+-	[d2f15ccd7460]
+-
+-	* sipgen/gencode.c:
+-	More keyword argument bug fixing. (PyQt now builds again.)
+-	[709ea5c81d46]
+-
+-2009-10-25  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	Bug fixing the keyword argument support.
+-	[9f8d9cc3f521]
+-
+-	* sipgen/gencode.c, sipgen/main.c, sipgen/parser.y, sipgen/sip.h,
+-	siplib/sip.h, siplib/siplib.c, sphinx/annotations.rst,
+-	sphinx/command_line.rst, sphinx/introduction.rst:
+-	Added support for (optional) keyword arguments - untested.
+-	[04504a7b338b]
+-
+-2009-10-24  phil  <phil>
+-
+-	* NEWS, sipgen/gencode.c, siplib/siplib.c:
+-	Merged v4.9.1 back into the trunk.
+-	[8e50e7601287]
+-
+-2009-09-26  phil  <phil>
+-
+-	* NEWS:
+-	Released as v4.9.
+-	[4d26f5a2ec9c] [4.9]
+-
+-2009-09-19  phil  <phil>
+-
+-	* lib/siputils.py:
+-	Fixed the dependency order of Qt libraries on Windows (which weems
+-	to only affect MinGW).
+-	[b3b353012242]
+-
+-2009-09-16  phil  <phil>
+-
+-	* lib/configure.py:
+-	Fixed a configure.py command line parsing problem on OS/X.
+-	[26287bd85bfd]
+-
+-	* lib/siputils.py, sphinx/build_system.rst:
+-	The default build system values of universal and arch are now taken
+-	from the configuration.
+-	[33fab9918a24]
+-
+-	* NEWS, siplib/siplib.c, sphinx/python_api.rst:
+-	Added sip.ispyowned().
+-	[ad556c1da3a4]
+-
+-2009-09-15  phil  <phil>
+-
+-	* lib/siputils.py:
+-	A fix for the last fix.
+-	[de0e5576ac75]
+-
+-	* lib/siputils.py:
+-	More fixes for Snow Leopard.
+-	[64601a49b403]
+-
+-2009-09-14  phil  <phil>
+-
+-	* NEWS, sipgen/gencode.c, sipgen/parser.y, siplib/siplib.c,
+-	sphinx/annotations.rst:
+-	Allowed the /NoArgParser/ annotation to be used for class methods.
+-	[e5ec799a3f70]
+-
+-2009-09-12  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	Fixed a problem when a function returns a class instance that SIP
+-	doesn't think can be copied.
+-	[bf71880486d0]
+-
+-	* lib/configure.py, lib/siputils.py, sphinx/build_system.rst,
+-	sphinx/installation.rst:
+-	The --arch option now only implies a universal binary if it is
+-	specified more than once.
+-	[8c16580e8c21]
+-
+-	* lib/configure.py, lib/siputils.py, sphinx/build_system.rst:
+-	Added support for specifying a MacOS architecture when creating a
+-	wrapper script.
+-	[8eeb8a1947b7]
+-
+-2009-09-11  phil  <phil>
+-
+-	* lib/configure.py:
+-	The MacOS specific configure.py options are no longer enabled on
+-	other platforms.
+-	[2dd928167cd9]
+-
+-	* lib/configure.py, sphinx/installation.rst:
+-	Removed the -a short form of --arch so that it will be the same as
+-	PyQt.
+-	[239f8861bc8e]
+-
+-	* NEWS, lib/configure.py, lib/siputils.py, sphinx/build_system.rst,
+-	sphinx/installation.rst:
+-	Added the --arch flag to configure.py to allow the architectures to
+-	be included in a MacOS/X universal binary to be specified.
+-	[b74bcfcb34b0]
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h, sipgen/transform.c:
+-	Fixed a problem with the name of an API version in modules that sub-
+-	class from classes with versioned methods in a different module.
+-	[5b327c45a283]
+-
+-2009-09-06  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	Added the support for handling keyword arguments to QObject ctors.
+-	[562b8ecd5e55]
+-
+-2009-09-04  phil  <phil>
+-
+-	* NEWS, sipgen/gencode.c, siplib/sip.h, siplib/siplib.c,
+-	sphinx/annotations.rst, sphinx/c_api.rst:
+-	Completed the support for /Array/ applied to classes and mapped
+-	types.
+-	[f32ceb5cb246]
+-
+-	* sipgen/gencode.c, sipgen/sip.h, siplib/siplib.c:
+-	Added support for /Array/ for classes and mapped types for non-
+-	virtual functions.
+-	[24bcbdbd0393]
+-
+-2009-09-03  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/transform.c, siplib/sip.h:
+-	Added the extended assignment helper and the array allocation helper
+-	for the future support of /Array/ for classes and mapped types.
+-	[61cf6b3635ab]
+-
+-2009-09-01  phil  <phil>
+-
+-	* NEWS, build.py, lib/LICENSE-GPL2.txt, lib/LICENSE-GPL3.txt,
+-	lib/LICENSE.short, sphinx/introduction.rst:
+-	Added the GPL as a licensing option.
+-	[1d372e99f512]
+-
+-	* NEWS, sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h, siplib/sip.h,
+-	siplib/siplib.c, sphinx/specification_files.rst:
+-	Added support for __iter__ and __next__.
+-	[d6cd069a434f]
+-
+-2009-08-21  phil  <phil>
+-
+-	* sipgen/parser.y, sipgen/sip.h, sipgen/transform.c:
+-	Added a check for recursive class hierarchies. Fixed the error
+-	message about type2string() by making sure it handles structs.
+-	[7af2d9cb07f8]
+-
+-2009-08-11  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	Fixed sipIsPyMethod() to not use PyObject_GetAttr() so that
+-	reimplementations defined in mixins will be found. This was a
+-	regression introduced when attribute lookup was made less lazy when
+-	getting super() to work properly.
+-	[710a488b84b4]
+-
+-	* siplib/siplib.c:
+-	Fixed the conversion of strings to wchar_t arrays as it was using
+-	calls that appeared in Python v2.6.
+-	[47cc56c95614]
+-
+-2009-08-08  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	sipFindType() will now find types given as a pointer.
+-	[b693f15869c8]
+-
+-2009-08-06  phil  <phil>
+-
+-	* lib/sipdistutils.py:
+-	Fixed sipdistutils.py for Python v3.
+-	[4574e78f607f]
+-
+-2009-08-05  phil  <phil>
+-
+-	* siplib/apiversions.c, siplib/sip.h, siplib/siplib.c:
+-	Fixes for looking up types when some times have no implementation
+-	for all API versions.
+-	[e77c51f40fe0]
+-
+-2009-08-04  phil  <phil>
+-
+-	* sipgen/transform.c:
+-	No longer complain about methods having the same Python signature if
+-	they all are versioned.
+-	[076cbeaeb3ad]
+-
+-	* sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	Init extenders now respect API version numbers.
+-	[4efa4f7f246b]
+-
+-2009-08-03  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/transform.c:
+-	Virtual methods now support API versions.
+-	[8ec049505369]
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sphinx/annotations.rst:
+-	Added support for the /API/ annotation to all overloaded methods.
+-	[fae5b6dd29d0]
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h, sipgen/transform.c,
+-	sphinx/annotations.rst:
+-	The /API/ annotation is now supported for ctors.
+-	[a24c25aede8d]
+-
+-2009-08-02  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/parser.y, siplib/siplib.c:
+-	Instantiated class templates now take their API from the scoping
+-	class.
+-	[39bf3e3fc6de]
+-
+-2009-08-01  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/transform.c:
+-	Operator casts and global slots now handle classes with alternate
+-	mapped type implementations. (In a limited way, but good enough for
+-	PyQt.)
+-	[c2ed8e5bbf11]
+-
+-2009-07-29  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	Fixed a crash with sipFindType() when the search happens to land on
+-	an unresolved external type.
+-	[ec4838cbf038]
+-
+-	* siplib/siplib.c:
+-	Fixed the Python v3 buffer interface for sip.voidptr.
+-	[4f800839bd44]
+-
+-2009-07-25  phil  <phil>
+-
+-	* sipgen/gencode.c, siplib/sip.h, siplib/siplib.c,
+-	sphinx/annotations.rst, sphinx/command_line.rst,
+-	sphinx/specification_files.rst:
+-	Fixed the '/' operator for Python v3 and future import for Python
+-	v2.
+-	[fe62bcd81fa3]
+-
+-2009-07-18  phil  <phil>
+-
+-	* sipgen/transform.c, sphinx/python_api.rst:
+-	Fixed a typo in a couple of error messages.
+-	[c7eb3170f527]
+-
+-2009-07-09  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	Fixed the nb_index initialiser for sip.voidptr for Python v2.4 and
+-	earler.
+-	[672b898935b5]
+-
+-	* siplib/siplib.c:
+-	Allow the meta-type to be used with with ordinary Python classes,
+-	not just SIP generated classes.
+-	[6f724709902c]
+-
+-2009-07-08  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	Complete the support for mapped type static methods.
+-	[f1cf7ebed748]
+-
+-2009-07-07  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h, sipgen/transform.c:
+-	Safety commit of (mostly complete) support for static functions in
+-	mapped types.
+-	[58aa805c1867]
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h,
+-	sphinx/annotations.rst:
+-	Extended the use of /AllowNone/ to classes with %ConvertToType code.
+-	[102fc846396e]
+-
+-2009-07-06  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h, siplib/sip.h,
+-	siplib/siplib.c, sphinx/annotations.rst:
+-	Added the /AllowNone/ mapped type annotation for mapped types that
+-	want to place a special interpretation on None.
+-	[d449e525c5e8]
+-
+-	* sipgen/gencode.c:
+-	The generated virtual handler code is now the same for classes and
+-	for mapped types that might have an alternate class implementation.
+-	[60ce12a7d248]
+-
+-	* sipgen/gencode.c, siplib/siplib.c:
+-	Make sure mapped types honour the /Constrained/ annotation.
+-	[0a8916fbe3b2]
+-
+-2009-07-05  phil  <phil>
+-
+-	* siplib/apiversions.c, siplib/siplib.c:
+-	Debugged mapped types with namespaces.
+-	[1f55210a89de]
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h,
+-	siplib/descriptors.c, siplib/sip.h, siplib/sipint.h,
+-	siplib/siplib.c:
+-	Safety checkin on the run-time support for mapped types with
+-	namespaces.
+-	[ec7ba808f36c]
+-
+-2009-06-29  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h, sipgen/transform.c:
+-	Finished the code generation support for enums in mapped types.
+-	(Runtime support still to do.)
+-	[552a2d4950a1]
+-
+-2009-06-28  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h, sipgen/transform.c:
+-	Safety commit of the support for mapped types containing enums.
+-	[d94e09ea5add]
+-
+-	* sipgen/gencode.c, sipgen/parser.y, siplib/sip.h, siplib/siplib.c:
+-	Implemented the sipContainerDef in anticipation of mapped types
+-	supporting enums (for the moment, static methods and variables at a
+-	later date). Fixed a problem where API version ranges wheren't being
+-	reused.
+-	[28f8f2aa4bcf]
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h, sipgen/transform.c,
+-	siplib/apiversions.c, siplib/sip.h, siplib/sipint.h,
+-	siplib/siplib.c:
+-	Fixed a problem with enums in a type with alternate APIs.
+-	[e320f9cb7d19]
+-
+-2009-06-27  phil  <phil>
+-
+-	* lib/siputils.py:
+-	Added a workaround to the build system when using virtualenv on
+-	MacOS.
+-	[ff5b09d449d5]
+-
+-2009-06-25  phil  <phil>
+-
+-	* sipgen/gencode.c, siplib/siplib.c, sphinx/c_api.rst:
+-	A Python string object can now be provided when a wide character
+-	(wchar_t) is expected.
+-	[5a629389629b]
+-
+-2009-06-23  phil  <phil>
+-
+-	* sipgen/gencode.c, siplib/siplib.c:
+-	Some fixes for generated code for mapped types and classes not being
+-	as completely interchangeable as needed. (Still more to do.)
+-	[438a66e8e0a4]
+-
+-2009-06-22  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h, sipgen/transform.c:
+-	Bug fixes to the multi-API type support - PyQt4 now builds again.
+-	[795308460def]
+-
+-	* siplib/apiversions.c, sphinx/annotations.rst:
+-	Completed the run-time support for multi-API types.
+-	[8888d5cd3feb]
+-
+-2009-06-21  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	Completed the code generation changes for multi-API types.
+-	[439a95ba643e]
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h, sipgen/transform.c:
+-	More refactoring in preparation for multi-API support for types.
+-	[a9c3de1478d8]
+-
+-	* sipgen/gencode.c:
+-	More changes to the multi-API support for types.
+-	[329493ac7802]
+-
+-2009-06-20  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h, sipgen/transform.c:
+-	Safety commit of latest changes for support of type API selection.
+-	[9443ed19b08b]
+-
+-2009-06-19  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h, sipgen/transform.c:
+-	Safety commit of parser changes to get at the API version of a class
+-	before it is defined.
+-	[c209ce56ea4d]
+-
+-2009-06-18  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h,
+-	siplib/apiversions.c, siplib/sip.h, siplib/sipint.h,
+-	siplib/siplib.c, sphinx/annotations.rst:
+-	Implemented API selection for global functions.
+-	[db777d90f374]
+-
+-2009-06-17  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h, sipgen/transform.c,
+-	siplib/apiversions.c, siplib/sip.h, sphinx/annotations.rst,
+-	sphinx/c_api.rst, sphinx/directives.rst, sphinx/using.rst:
+-	Completed the documentation for the API support. The %API directive
+-	can now be used any number of times in a module. Added the parser
+-	support for the API annotation.
+-	[9e63d5da36bd]
+-
+-	* sipgen/gencode.c, sipgen/lexer.l, sipgen/parser.y, sipgen/sip.h,
+-	siplib/apiversions.c, siplib/sip.h, siplib/sipint.h,
+-	siplib/siplib.c, sphinx/directives.rst,
+-	sphinx/specification_files.rst:
+-	Added support for the %API directive.
+-	[076c846bb8ca]
+-
+-2009-06-16  phil  <phil>
+-
+-	* siplib/apiversions.c, siplib/sipint.h, siplib/siplib.c,
+-	sphinx/c_api.rst:
+-	Implemented sipIsAPIEnabled().
+-	[ade852c2131a]
+-
+-	* siplib/apiversions.c:
+-	...and made sure it compiles.
+-	[3e8030fe1b76]
+-
+-	* siplib/apiversions.c, siplib/sipint.h, siplib/siplib.c,
+-	siplib/siplib.sbf, sphinx/python_api.rst, sphinx/using.rst:
+-	Fixed the reference count of the sip module in the error path if its
+-	initialisation fails. Added the sip.getapi() and sip.setapi()
+-	functions.
+-	[43c34f1c289a]
+-
+-	* NEWS, sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h,
+-	sipgen/transform.c, siplib/sip.h, siplib/siplib.c,
+-	sphinx/specification_files.rst:
+-	Merged v4.8.1 into the trunk.
+-	[d1bd8aecab5a]
+-
+-2009-06-05  phil  <phil>
+-
+-	* NEWS:
+-	Released as v4.8.
+-	[6e9fb584da32] [4.8]
+-
+-2009-06-03  phil  <phil>
+-
+-	* build.py:
+-	More internal build system fixes.
+-	[4f34294143b0]
+-
+-	* NEWS, build.py, siplib/descriptors.c, sphinx/Makefile:
+-	Fixed a Python v3 portability bug. Fixed the internal build system
+-	for Python v2.5.
+-	[144adbee9ea0]
+-
+-2009-06-02  phil  <phil>
+-
+-	* build.py, doc/sipref.txt, sphinx/conf.py,
+-	sphinx/extensions/siproles.py:
+-	Switched to the Sphinx documentation.
+-	[16b6a4f285a6]
+-
+-	* sphinx/build_system.rst, sphinx/builtin.rst, sphinx/distutils.rst,
+-	sphinx/python_api.rst, sphinx/using.rst:
+-	Completed the initial Sphinx docs.
+-	[d9202085c430]
+-
+-	* sphinx/c_api.rst, sphinx/embedding.rst, sphinx/python_api.rst,
+-	sphinx/using.rst:
+-	More Sphinx docs.
+-	[f3c5b7d3dcd4]
+-
+-2009-06-01  phil  <phil>
+-
+-	* sphinx/annotations.rst, sphinx/c_api.rst, sphinx/command_line.rst,
+-	sphinx/directives.rst, sphinx/extensions/siproles.py,
+-	sphinx/specification_files.rst, sphinx/using.rst:
+-	More Sphinx docs.
+-	[831112f389a5]
+-
+-	* sipgen/transform.c:
+-	Fixed a bug where nested templates where having their types resolved
+-	(when they should have been left as templates) which then meant that
+-	they were being found and were being instantiated again (possibly in
+-	a different module).
+-	[79d8261912c8]
+-
+-	* build.py:
+-	Fixed the build system after removing the TODO file.
+-	[93ea3b759b5f]
+-
+-2009-05-31  phil  <phil>
+-
+-	* sphinx/annotations.rst, sphinx/builtin.rst, sphinx/c_api.rst,
+-	sphinx/conf.py, sphinx/directives.rst,
+-	sphinx/extensions/annotations.py, sphinx/extensions/siproles.py,
+-	sphinx/incompatibilities.rst, sphinx/installation.rst:
+-	More Sphinx docs.
+-	[d28f3153b2f8]
+-
+-	* doc/sipref.txt, sphinx/annotations.rst, sphinx/c_api.rst,
+-	sphinx/conf.py, sphinx/extensions/annotations.py,
+-	sphinx/incompatibilities.rst, sphinx/using.rst:
+-	More Sphinx docs.
+-	[e4dcbba1bd9d]
+-
+-2009-05-30  phil  <phil>
+-
+-	* sphinx/build_system.rst, sphinx/conf.py, sphinx/distutils.rst,
+-	sphinx/introduction.rst, sphinx/python_api.rst, sphinx/using.rst:
+-	Sphinx documentation changes.
+-	[62644d47ee77]
+-
+-	* TODO, doc/sipref.txt, siplib/siplib.c, sphinx/Makefile,
+-	sphinx/annotations.rst, sphinx/build_system.rst, sphinx/builtin.rst,
+-	sphinx/c_api.rst, sphinx/command_line.rst, sphinx/conf.py,
+-	sphinx/directives.rst, sphinx/distutils.rst, sphinx/embedding.rst,
+-	sphinx/incompatibilities.rst, sphinx/index.rst,
+-	sphinx/installation.rst, sphinx/introduction.rst,
+-	sphinx/python_api.rst, sphinx/specification_files.rst,
+-	sphinx/using.rst:
+-	Initial commit of the Sphinx documentation.
+-	[432d95fdad2f]
+-
+-	* sipgen/parser.y, sipgen/transform.c:
+-	Reverted the previous fix and fixed the real bug which was that
+-	%DefaultEncoding wasn't being inherited properly by modules.
+-	[9abeaff1148a]
+-
+-2009-05-29  phil  <phil>
+-
+-	* sipgen/transform.c:
+-	Fixed a bug in comparing virtual handlers that had a char* result or
+-	argument and a default encoding was specified (ie. with Python v3).
+-	[3c92e9237373]
+-
+-	* sipgen/gencode.c, sipgen/parser.y, siplib/descriptors.c,
+-	siplib/qtlib.c, siplib/sip.h, siplib/siplib.c:
+-	Eliminated more warning messages.
+-	[a61fb0a096f2]
+-
+-	* sipgen/gencode.c, siplib/sip.h:
+-	Eliminated some compiler warning messages - particularly for Python
+-	v2.4.
+-	[374f079e7228]
+-
+-2009-05-28  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	Removed a compiler warning for the generated calls to
+-	PyInit_Module() for Python v2.5 and v2.6.
+-	[dc93a8fa4a5b]
+-
+-2009-05-27  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	The implicit copying of const& results is disabled for abstract
+-	classes.
+-	[705fc12e2144]
+-
+-2009-05-26  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	Fixed the generated code for abstract operators.
+-	[c56cc92b0917]
+-
+-	* siplib/siplib.c:
+-	Added the missing initialisation of the sipVariableDescr_Type type.
+-	[2c0779527ed3]
+-
+-2009-05-25  phil  <phil>
+-
+-	* NEWS, doc/sipref.txt, sipgen/gencode.c, sipgen/parser.y,
+-	sipgen/sip.h, siplib/sip.h, siplib/siplib.c:
+-	__bool__ is now synonymous with __nonzero__. __truediv__ and
+-	__itruediv__ are now explicit. __div__ and __idiv__ are now Python
+-	v2 only. Added support for __floordiv__, __ifloordiv__ and
+-	__index__.
+-	[537579d9318e]
+-
+-	* sipgen/parser.y:
+-	Hopefully fixed the regression with specific mapped types not
+-	properly superceding template mapped types that was affecting PyKDE3
+-	and PyKDE4.
+-	[25a665370099]
+-
+-2009-05-24  phil  <phil>
+-
+-	* siplib/descriptors.c, siplib/sipint.h:
+-	Added a repr() method to sip.methoddescriptor.
+-	[149f6c3f12a5]
+-
+-	* sipgen/transform.c:
+-	Fixed a bug where the name of an automatically generated
+-	complementary slot wasn't being generated.
+-	[0f304e850331]
+-
+-	* sipgen/export.c:
+-	Added support for images in the generated Scintilla API files from a
+-	patch from Detlev Offenbach.
+-	[83966cc9950a]
+-
+-2009-04-30  phil  <phil>
+-
+-	* doc/sipref.txt, sipgen/transform.c, siplib/qtlib.c:
+-	%DefaultSupertype now only changes the default for the current
+-	module. (%DefaultMetatype still affects importing modules.) This
+-	should mean that modules that extend PyQt4 will continue to work
+-	without having to make super-type or meta-type changes.
+-	[5fc24c675796]
+-
+-2009-04-24  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	Fixed the lookup of generated slot functions in sub-types. Moved
+-	some assertions to more appropriate places when a generated slot
+-	function isn't found.
+-	[5b59bd703dff]
+-
+-2009-04-20  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/sip.h, sipgen/transform.c:
+-	Disabled the new implicit copying of const reference results where
+-	the class doesn't have a public copy ctor.
+-	[70cd90b1d5b9]
+-
+-2009-04-18  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	Fixed a problem handling __setitem__ when being used to support
+-	multi-dimensional mappings.
+-	[705be62a3cd0]
+-
+-2009-04-09  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	Print any exception raised by __dtor__.
+-	[0d56ac42feac]
+-
+-2009-04-01  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/sip.h, siplib/sip.h, siplib/siplib.c:
+-	Added support for PyQt4's support for signals that have overloaded
+-	methods.
+-	[c0ad968503e4]
+-
+-2009-03-30  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	Fixed a compiler warning message if sipCpp isn't used by
+-	%BIGetBufferCode.
+-	[26269a7e86f4]
+-
+-	* sipgen/gencode.c, siplib/siplib.c:
+-	Fixed the declaration of the module initialisation function when
+-	building static modules for Python v3.
+-	[6f48c809c90b]
+-
+-2009-03-27  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	Fixed a couple of missing calls to clear the error flag while
+-	parsing strings.
+-	[2275585e4c08]
+-
+-2009-03-26  phil  <phil>
+-
+-	* NEWS, doc/sipref.txt, sipgen/gencode.c, sipgen/lexer.l,
+-	sipgen/parser.y, sipgen/sip.h, sipgen/transform.c, siplib/sip.h,
+-	siplib/siplib.c:
+-	Replaced the new /Byte/ annotation with the even newer /Encoding/
+-	annotation and %DefaultEncoding directive.
+-	[7c648d9cdd13]
+-
+-2009-03-24  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	Changed the order in which PyQt4 signals are generated so that those
+-	with optional arguments appear with the most arguments first and
+-	least last.
+-	[4d0b9c852cf8]
+-
+-2009-03-23  phil  <phil>
+-
+-	* doc/sipref.txt, sipgen/gencode.c:
+-	Backed out the removal of sipSelfWasArg and supporting code as it
+-	really is needed. However, changed how it was set so that super()
+-	should still work.
+-	[29d1813e4566]
+-
+-2009-03-21  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	Fixed a bug in the code generated for protected methods with
+-	multiple Python names.
+-	[7aa8d62ddf7c]
+-
+-2009-03-20  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	Bytes and the buffer protocol are now also supported for non-byte
+-	char and char * (howver the buffer protocol support seems to be
+-	broken).
+-	[1c5b994cd2d6]
+-
+-	* NEWS, doc/sipref.txt, sipgen/gencode.c, sipgen/parser.y,
+-	sipgen/sip.h, sipgen/transform.c, siplib/descriptors.c,
+-	siplib/sip.h, siplib/siplib.c:
+-	Many changes to the wrapping of strings for Python v3 so that char
+-	and char * (unless the /Byte/ annotation is specified) are handled
+-	as Unicode rather than bytes. Such strings must be able to be
+-	encoded as Latin-1. Related to the above, the generated code is much
+-	more careful than it used to be about keeping Python string objects
+-	alive while their data is being used.
+-	[49cf3c9e7b69]
+-
+-2009-03-18  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	Fixed a long-standing bug in the handling of the /NoArgParser/
+-	annotation that only came to light with Python v3.
+-	[2c44dd616d6d]
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/transform.c:
+-	More fixes for consolidated modules. Python v2 and v3 should now be
+-	working.
+-	[b966b1df2bb1]
+-
+-2009-03-17  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/transform.c:
+-	Some fixes for consolidated module support for both Python v2 and
+-	v3.
+-	[b17d4cdf4709]
+-
+-	* lib/siputils.py:
+-	Tweaked the build system to make it easier for Makefile sub-classes
+-	to add commands to targets.
+-	[abe3ecd83256]
+-
+-2009-03-16  phil  <phil>
+-
+-	* doc/sipref.txt, sipgen/gencode.c:
+-	Fixed a bug in generating Python v3 consolidated modules.
+-	[8fc22b7be6fd]
+-
+-	* siplib/siplib.c:
+-	Fixed a typo that broke the build of the sip module for Python v2.
+-	[348b333af022]
+-
+-2009-03-15  phil  <phil>
+-
+-	* siplib/sip.h:
+-	Tweaks to the Python portability macros.
+-	[c1f795ce8a5a]
+-
+-	* siplib/sip.h:
+-	More Python portability macros.
+-	[b3d39099f350]
+-
+-2009-03-14  phil  <phil>
+-
+-	* lib/configure.py:
+-	Fixed a Mac build regression handling the location of the SDK.
+-	[2c8cf43905e1]
+-
+-	* siplib/sip.h:
+-	Added some more Python porting macros.
+-	[c046cc5bb268]
+-
+-	* lib/siputils.py:
+-	Removed a remaining Python v2 specific call from the build system.
+-	[c1527c576e1d]
+-
+-	* NEWS, sipgen/gencode.c, siplib/sip.h:
+-	The generated code now supports Python v3.
+-	[c60f38353478]
+-
+-	* siplib/siplib.c:
+-	The sip module can now be imported by Python v3.
+-	[a8bd1e5a5a4b]
+-
+-2009-03-13  phil  <phil>
+-
+-	* doc/sipref.txt, siplib/siplib.c:
+-	Ported the PyString_ calls in the sip module to Python v3.
+-	[337e7e627054]
+-
+-	* sipgen/gencode.c:
+-	Updated the generated module initialisation code for Python v3 - but
+-	not for consolidated modules yet.
+-	[985c336dd059]
+-
+-	* sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	Moved to PyLong_* for Python v3.
+-	[a1d1a376920b]
+-
+-2009-03-12  phil  <phil>
+-
+-	* lib/siputils.py, sipgen/gencode.c, siplib/objmap.c, siplib/qtlib.c,
+-	siplib/sip.h, siplib/siplib.c:
+-	More porting of the sip module. It now compiles but still calls
+-	Python v2 functions.
+-	[9f4570a090e1]
+-
+-	* NEWS, doc/sipref.txt, sipgen/gencode.c, sipgen/lexer.l,
+-	sipgen/parser.y, sipgen/sip.h, siplib/descriptors.c, siplib/sip.h,
+-	siplib/siplib.c:
+-	Partially ported the sip module to Python v3. Added the
+-	%BIGetBufferCode and %BIReleaseBufferCode directives to support the
+-	buffer interface of Python v3.
+-	[0631013fd5ae]
+-
+-2009-03-11  phil  <phil>
+-
+-	* doc/sipref.txt, lib/configure.py, lib/siputils.py:
+-	configure.py now uses optparse. configure.py and the build system
+-	will now run under Python3.
+-	[89bbb0b49865]
+-
+-	* siplib/siplib.c:
+-	Implemented __dict__ for sipsimplewrapper.
+-	[cf1c9edeb56a]
+-
+-	* sipgen/gencode.c, siplib/sip.h:
+-	Added the SIP_PYMETHODDEF_CAST compatibility macro for Python v2.4
+-	and earlier.
+-	[43e5b0afa42d]
+-
+-2009-03-10  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	Changed the code generated for variable getters so that a copy is
+-	only returned if the variable is const.
+-	[22c2ae7bdc37]
+-
+-2009-03-09  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	Changed the generation of the string pool to get around MSVC's
+-	limitation on the size of a string.
+-	[e15683c4034a]
+-
+-	* NEWS:
+-	Updated the NEWS file.
+-	[262f29053a78]
+-
+-	* sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	Made sure all generated code doesn't break strict aliasing.
+-	[ae62345de148]
+-
+-	* sipgen/gencode.c:
+-	SIP now automatically copies objects when they are returned as a
+-	const reference.
+-	[3d0c7011cb93]
+-
+-	* doc/sipref.txt, sipgen/gencode.c, sipgen/sip.h, sipgen/transform.c:
+-	A further fix to the order in which modules have their types
+-	resolved.
+-	[d7ebeff5a7ce]
+-
+-2009-03-06  phil  <phil>
+-
+-	* lib/siputils.py:
+-	Taught the build system about the QtScriptTools module.
+-	[6c0d66e4ef0b]
+-
+-	* sipgen/transform.c:
+-	Fixed a bug where types were being resolved in outer modules before
+-	inner modules. This meant that template-based types created on the
+-	fly might be created in the wrong module.
+-	[cd2a99e505be]
+-
+-2009-03-05  phil  <phil>
+-
+-	* lib/siputils.py:
+-	Taught the build system about the new dependency of QtXmlPatterns on
+-	QtNetwork.
+-	[50a9e41802c2]
+-
+-2009-03-04  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	Fixes for the updated method cache.
+-	[d82c3be07e1b]
+-
+-	* sipgen/gencode.c, siplib/qtlib.c, siplib/sip.h, siplib/siplib.c:
+-	Greatly simplified the virtual reimplementation method cache now
+-	that attribute lookup has been cleaned up.
+-	[0cc40f47e6d5]
+-
+-2009-03-03  phil  <phil>
+-
+-	* NEWS, doc/sipref.txt, sipgen/gencode.c, sipgen/parser.y,
+-	sipgen/sip.h, siplib/sip.h, siplib/siplib.c:
+-	Implemented the /KeepReference/ argument annotation.
+-	[c8e2e1961f50]
+-
+-2009-02-27  phil  <phil>
+-
+-	* doc/sipref.txt, sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	Added sipCanConvertToEnum() to the public API.
+-	[2748f0bbb0ab]
+-
+-2009-02-26  phil  <phil>
+-
+-	* siplib/sipint.h, siplib/siplib.c:
+-	Removed the __dict__ getter as it is no longer needed. Changed the
+-	declaration of the descriptors as they don't need to be exported.
+-	[ddd2710b42fd]
+-
+-2009-02-25  phil  <phil>
+-
+-	* NEWS, doc/sipref.txt, siplib/sip.h, siplib/siplib.c:
+-	Reverted to using type's and object's attribute getters and setters
+-	now that we populate the type dictionary of a generated type with
+-	all its lazy attributes in one go. Changed how an external
+-	attributer getter works now that it only needs to populate the type
+-	dictionary.
+-	[8a22253728be]
+-
+-	* sipgen/gencode.c, siplib/siplib.c:
+-	Safety checking of the working (but still to be changed) attribute
+-	lookup code.
+-	[d7244d817b9f]
+-
+-	* sipgen/gencode.c, siplib/descriptors.c, siplib/sip.h,
+-	siplib/siplib.c:
+-	Refactored the support for setting instance variables.
+-	[cc8a22386009]
+-
+-	* sipgen/gencode.c, sipgen/parser.y, siplib/descriptors.c,
+-	siplib/sip.h, siplib/sipint.h, siplib/siplib.c:
+-	The refactored support for getting variables now works.
+-	[c3e7dc58b020]
+-
+-2009-02-24  phil  <phil>
+-
+-	* sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	Safety commit of refactored wrapping of class variables.
+-	[fa8ba6ef243b]
+-
+-2009-02-23  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	Fixed the problem with looking up external lazy attributes - wrapped
+-	variables are the only thing not working.
+-	[ab3e207d555b]
+-
+-	* siplib/descriptors.c, siplib/sip.h, siplib/sipint.h,
+-	siplib/siplib.c, siplib/siplib.sbf:
+-	Safety commit of new attribute lookup code. Don't use this - it's
+-	broken.
+-	[2673bc2add5c]
+-
+-	* siplib/siplib.c:
+-	Fixed a reference count leak when an external lazy attribute was a
+-	descriptor.
+-	[1047169d1ba8]
+-
+-	* siplib/siplib.c:
+-	Fixed a crash when accessing a wrapped instance variable as a class
+-	variable.
+-	[e922b386c5aa]
+-
+-2009-02-22  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	Fixed a bug in the refactored attribute lookup.
+-	[ddad97af22ec]
+-
+-	* doc/sipref.txt, sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	Completed the support for the lazy attribute lookup hook.
+-	[1f7bc8f488a8]
+-
+-2009-02-21  phil  <phil>
+-
+-	* sipgen/gencode.c, siplib/sip.h, siplib/sipint.h, siplib/siplib.c:
+-	Added initial support for registering lazy attribute getters.
+-	[9aae0eb78368]
+-
+-	* sipgen/export.c, sipgen/gencode.c:
+-	The PyQt4 signal table is now generated. The XML export now marks
+-	the default signal.
+-	[dbf0c7f47b6b]
+-
+-2009-02-20  phil  <phil>
+-
+-	* lib/LICENSE, sipgen/gencode.c, siplib/sip.h:
+-	Added the stub of signal table for PyQt4.
+-	[f53134503038]
+-
+-2009-02-16  phil  <phil>
+-
+-	* siplib/sip.h, siplib/siplib.c:
+-	Removed some compiler warnings.
+-	[a3c24034045a]
+-
+-2009-02-14  phil  <phil>
+-
+-	* sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	More signal/slot refactoring fixes.
+-	[e1c0b895f0d1]
+-
+-	* sipgen/gencode.c, siplib/qtlib.c, siplib/sip.h:
+-	Debugged the signal/slot refactoring.
+-	[a4a47ea6fd1e]
+-
+-	* doc/sipref.txt, sipgen/gencode.c, siplib/qtlib.c, siplib/sip.h,
+-	siplib/sipint.h, siplib/siplib.c:
+-	Safety commit of latest signal/slot refactoring.
+-	[751cebc544cc]
+-
+-2009-02-13  phil  <phil>
+-
+-	* siplib/qtlib.c, siplib/siplib.c:
+-	Fixed a build problem with Python 2.4.x and earlier.
+-	[df846f30a329]
+-
+-	* sipgen/gencode.c, sipgen/lexer.l, sipgen/parser.y, sipgen/sip.h,
+-	sipgen/transform.c, siplib/siplib.c:
+-	PyQt3 signal support is now enabled with the %Plugin directive
+-	instead of %SIPOptions. Removed %SIPOptions.
+-	[d511ad00cc71]
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h, sipgen/transform.c,
+-	siplib/sip.h, siplib/siplib.c:
+-	The generated typedefs table is now sorted.
+-	[abd1a7d60330]
+-
+-2009-02-12  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	An unconstrained enum can now be a sub-class of int.
+-	[60366594aa80]
+-
+-2009-02-11  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h, siplib/sip.h:
+-	Renamed TypeFlags to PyQt4Flags. Renamed NoQMetaObject to
+-	PyQt4NoQMetaObject. Moved the type flags into the PyQt4-specific
+-	type structure.
+-	[259fceeadbbe]
+-
+-	* sipgen/gencode.c, sipgen/sip.h, sipgen/transform.c:
+-	Removed the registration of wrapped types with the Qt meta-type
+-	system as it is no longer needed by PyQt4.
+-	[71f80e789732]
+-
+-2009-02-07  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h, sipgen/transform.c,
+-	siplib/qtlib.c, siplib/sip.h, siplib/siplib.c:
+-	Removed sipAssignType() and moved the helpers to the PyQt4 plugin.
+-	[305f07cd3ce2]
+-
+-2009-02-02  phil  <phil>
+-
+-	* sipgen/gencode.c, siplib/qtlib.c:
+-	The QObject.sender() support is now PyQt3 only again.
+-	[e732e65c15b5]
+-
+-2009-02-01  phil  <phil>
+-
+-	* sipgen/gencode.c, siplib/siplib.c:
+-	Fixed a bug in the generation of the sipParseArgs() sub-format
+-	character for types.
+-	[fadc9f7074f1]
+-
+-	* sipgen/gencode.c, siplib/qtlib.c, siplib/sip.h:
+-	Changed the QObject::sender() support for PyQt4.
+-	[9d6d9918bb1f]
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h, sipgen/transform.c:
+-	Debugged the merged types table.
+-	[cf4e643c28b5]
+-
+-2009-01-31  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/heap.c, sipgen/sip.h, sipgen/transform.c,
+-	siplib/sip.h, siplib/siplib.c:
+-	Safety commit of the merge of the class, mapped types and enum
+-	tables.
+-	[33a1dbf992df]
+-
+-2009-01-30  phil  <phil>
+-
+-	* siplib/sip.h, siplib/siplib.c:
+-	Wrapped classes are now created as they are needed and not in the
+-	order they appear in the generated class table. Therefore the class,
+-	mapped type and enum tables can now be merged and ordered by the
+-	type name (and searched using a binary search).
+-	[4a72c9cee88f]
+-
+-2009-01-29  phil  <phil>
+-
+-	* sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	Moved the last of the type parsing to PyQt3.
+-	[b7d7695e3d8e]
+-
+-	* sipgen/gencode.c, siplib/qtlib.c, siplib/sip.h, siplib/siplib.c:
+-	Moved the registering of int types to PyQt4.
+-	[e63f85d857bd]
+-
+-2009-01-28  phil  <phil>
+-
+-	* doc/sipref.txt, sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	Refactored the support for looking up typedefs.
+-	[42851fe9a2cb]
+-
+-	* sipgen/gencode.c, siplib/qtlib.c, siplib/sip.h, siplib/sipint.h,
+-	siplib/siplib.c:
+-	Moved the type parsing support to PyQt3.
+-	[531e8244cfd3]
+-
+-2009-01-27  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	Removed a remaining call to sipReleaseMappedType().
+-	[2a9cbf86c86a]
+-
+-2009-01-25  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	Fixed a too-few-arguments-to-a-print bug in the code generator.
+-	[1260503c2021]
+-
+-	* siplib/siplib.c:
+-	Fixed compilation issues.
+-	[635ffd53597b]
+-
+-2009-01-18  phil  <phil>
+-
+-	* sipgen/gencode.c, siplib/qtlib.c, siplib/sip.h, siplib/sipint.h:
+-	Replaced sipFindConnection() with sipFindSlot().
+-	[30f0174c05f4]
+-
+-2009-01-13  phil  <phil>
+-
+-	* sipgen/gencode.c, siplib/qtlib.c, siplib/sip.h, siplib/sipint.h,
+-	siplib/siplib.c:
+-	Replaced sipFreeSignature() with sipFreeSipslot().
+-	[e5275f031458]
+-
+-2009-01-12  phil  <phil>
+-
+-	* sipgen/gencode.c, siplib/qtlib.c, siplib/sip.h, siplib/sipint.h,
+-	siplib/siplib.c:
+-	Pushed the parsing of signatures into PyQt.
+-	[b2e616d5c92f]
+-
+-2009-01-11  phil  <phil>
+-
+-	* sipgen/gencode.c, siplib/qtlib.c, siplib/sip.h, siplib/sipint.h,
+-	siplib/siplib.c:
+-	Replaced sipConvertRx() with sipConvertRxEx().
+-	[cc0e4fe70f50]
+-
+-2009-01-10  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	Removed the generation of an old Qt API entry.
+-	[30f044ed1723]
+-
+-2009-01-09  phil  <phil>
+-
+-	* sipgen/gencode.c, siplib/qtlib.c, siplib/sip.h:
+-	Safety commit of partial refactoring of the Qt signal support.
+-	[429673b02dcd]
+-
+-2009-01-04  phil  <phil>
+-
+-	* lib/LICENSE, lib/LICENSE.short, sipgen/gencode.c:
+-	Don't import the qt_register_type symbol if it isn't needed. Updated
+-	copyright notices.
+-	[f2dbc98f7144]
+-
+-2008-12-30  phil  <phil>
+-
+-	* doc/sipref.txt, siplib/sip.h, siplib/siplib.c:
+-	sipTypeFromPyTypeObject() now takes a PyTypeObject* rather than a
+-	PyObject*.
+-	[077c2ad4451f]
+-
+-	* doc/sipref.txt, sipgen/gencode.c, siplib/objmap.c, siplib/sip.h,
+-	siplib/sipint.h, siplib/siplib.c, siplib/threads.c:
+-	Added sipTypeName() and sipTypeScope() to the public SIP API.
+-	[701c6915d3e3]
+-
+-2008-12-29  phil  <phil>
+-
+-	* doc/sipref.txt, sipgen/gencode.c, sipgen/parser.y, siplib/sip.h,
+-	siplib/sipint.h, siplib/siplib.c:
+-	Migrated sipEnum_* to sipType_*.
+-	[e0417099f5a9]
+-
+-2008-12-27  phil  <phil>
+-
+-	* doc/sipref.txt, sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	sipType_* are now generated for enums. These are used internally but
+-	the SIP API has not yet been changed.
+-	[ca45e1d31af2]
+-
+-	* sipgen/gencode.c, siplib/qtlib.c, siplib/sip.h, siplib/siplib.c:
+-	Broke out the generated type structures for mapped and class types
+-	to different structures with a common header.
+-	[ff4bec0abd37]
+-
+-2008-12-26  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	Wrapped enums now have their own meta-type. This is the hook that
+-	will allow the C++ name of an enum to be derived from the enum's
+-	Python type object.
+-	[ea550b12904c]
+-
+-2008-12-24  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h, siplib/sip.h,
+-	siplib/siplib.c:
+-	Added sip_api_init_module() to make sure dependent modules can be
+-	fully initialised before they are needed.
+-	[fed394659169]
+-
+-	* sipgen/gencode.c, siplib/sip.h:
+-	Removed the Qt meta-type id from the pyqt4TypeDef structure as we
+-	want to use it for mapped types as well but we would never know when
+-	it was safe to cast from a sipTypeDef pointer.
+-	[92c012de8c02]
+-
+-2008-12-21  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	The PyQt4-specific extension to the generated type structure is now
+-	used for mapped types as well.
+-	[f49b6d447292]
+-
+-2008-12-20  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h, sipgen/transform.c,
+-	siplib/sip.h, siplib/siplib.c:
+-	Changed the PyQt4-specifc handling of Qt meta-type registration.
+-	[d112840accfd]
+-
+-	* sipgen/gencode.c, siplib/siplib.c:
+-	A generated type structure now has its Python type object set
+-	earlier so that sub-meta-types can use sipIsExactWrappedType().
+-	Calls to QObject::metaObject() are no longer need to trigger the
+-	creation of the meta-object.
+-	[8d816e1f3008]
+-
+-	* doc/sipref.txt, sipgen/gencode.c, sipgen/lexer.l, sipgen/parser.y,
+-	sipgen/sip.h, siplib/sip.h:
+-	Added %Plugin and use it to support pyqt4TypeDef.
+-	[0f236470d582]
+-
+-2008-12-19  phil  <phil>
+-
+-	* siplib/sip.h:
+-	Moved the qt_qobject member out of sipWrapperType and into PyQt
+-	where it belongs.
+-	[babe6a91d801]
+-
+-	* sipgen/gencode.c, siplib/siplib.c:
+-	Completed the migration of sipClass_* to sipType_*.
+-	[e7c00163d819]
+-
+-	* doc/sipref.txt:
+-	Documentation updates. All uses of sipClass_* are only by deprecated
+-	parts of the API.
+-	[cfa2b5ca880e]
+-
+-	* doc/sipref.txt, sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	Deprecated the 'B' and 'C' format characters to sipBuildResult() and
+-	sipCallMethod(). Added the new 'N' format character to
+-	sipBuildResult() and sipCallMethod().
+-	[d685f1b18287]
+-
+-2008-12-17  phil  <phil>
+-
+-	* doc/sipref.txt, sipgen/gencode.c, siplib/siplib.c:
+-	Deprecated the 'C' format character of sipParseResult() in favor of
+-	the existing 'D' character.
+-	[be1f044d9828]
+-
+-	* doc/sipref.txt, sipgen/gencode.c, siplib/qtlib.c, siplib/sip.h,
+-	siplib/siplib.c:
+-	Migrated the sub-class convertor code to using sipType rather than
+-	sipClass.
+-	[a4424a9ac5a5]
+-
+-2008-12-16  phil  <phil>
+-
+-	* sipgen/transform.c:
+-	Fixed a bug where names of mapped type templates where being
+-	generated for modules that didn't need them.
+-	[176171583343]
+-
+-2008-12-14  phil  <phil>
+-
+-	* doc/sipref.txt, sipgen/gencode.c, siplib/qtlib.c, siplib/sip.h,
+-	siplib/sipint.h, siplib/siplib.c:
+-	Replaced the deprecated sipConvertFromInstance() and
+-	sipConvertFromNewInstance() with sipConvertFromType() and
+-	sipConvertFromNewType().
+-	[6f6e06ceaace]
+-
+-	* doc/sipref.txt, sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	Replaced the deprecated sipForceConvertToInstance() and
+-	sipForceConvertToMappedType() with sipForceConvertToType().
+-	[fc54ee3b5308]
+-
+-	* doc/sipref.txt, sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	Replaced the deprecated sipConvertToInstance() and
+-	sipConvertToMappedType() with sipConvertToType().
+-	[8e66284398dd]
+-
+-	* doc/sipref.txt, sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	Replaced the deprecated sipCanConvertToInstance() and
+-	sipCanConvertToMappedType() by sipCanConvertToType().
+-	[c1f1b170b263]
+-
+-2008-12-13  phil  <phil>
+-
+-	* doc/sipref.txt, sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	Replaced the deprecated sipReleaseInstance() and
+-	sipReleaseMappedType() with sipReleaseType().
+-	[7ce45ed9ae89]
+-
+-	* doc/sipref.txt, sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	Replaced the deprecated sipGetWrapper() with sipGetPyObject().
+-	[8cb295b72e62]
+-
+-	* doc/sipref.txt, sipgen/gencode.c, siplib/objmap.c, siplib/qtlib.c,
+-	siplib/sip.h, siplib/sipint.h, siplib/siplib.c:
+-	More moves from sipClass_* to sipType_*.
+-	[4e7936a90f99]
+-
+-	* sipgen/gencode.c, siplib/objmap.c, siplib/sip.h, siplib/sipint.h,
+-	siplib/siplib.c:
+-	More conversions from sipClass_* to sipType_*.
+-	[75eed80555d4]
+-
+-2008-12-12  phil  <phil>
+-
+-	* sipgen/gencode.c, siplib/sip.h, siplib/sipint.h, siplib/siplib.c,
+-	siplib/threads.c:
+-	Merged the adding of type instances.
+-	[d2db3775a993]
+-
+-2008-12-08  phil  <phil>
+-
+-	* lib/siputils.py, sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	Started the port from sipClass_* to sipType_*. Added support for
+-	assert() to the build system.
+-	[231826fe6d04]
+-
+-	* sipgen/gencode.c:
+-	Renamed sipMappedType_* to sipType_*.
+-	[8df5a86247e8]
+-
+-2008-12-07  phil  <phil>
+-
+-	* sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	Added sipType_* for wrapped types. sipClass_* is now defined in
+-	terms of sipType_*.
+-	[bb37272a3113]
+-
+-	* doc/sipref.txt, sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	Deprecated sipClassName().
+-	[de0402f5112c]
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h, sipgen/transform.c,
+-	siplib/sip.h, siplib/siplib.c:
+-	Mapped types are now described by the same sipTypeDef structure that
+-	describes wrapped types.
+-	[77ce210b751e]
+-
+-2008-12-06  phil  <phil>
+-
+-	* doc/sipref.txt, siplib/sip.h, siplib/siplib.c:
+-	Moved the 'user' field from sip.wrapper to sip.simplewrapper because
+-	PyQt uses it for some non-QObject types.
+-	[0bb916ce4818]
+-
+-	* doc/sipref.txt, sipgen/gencode.c, sipgen/lexer.l, sipgen/parser.y,
+-	sipgen/sip.h, sipgen/transform.c, siplib/sip.h, siplib/siplib.c:
+-	Restored %DefaultMetatype and the /Metatype/ class annotation. This
+-	support is now complete. Documented the meta-type and super-type
+-	support.
+-	[15f1b60f808f]
+-
+-2008-12-03  phil  <phil>
+-
+-	* doc/sipref.txt, sipgen/gencode.c, siplib/qtlib.c, siplib/sipint.h,
+-	siplib/siplib.c:
+-	Code generator changes to support sipSimpleWrapper.
+-	[ebd5b0b103ae]
+-
+-	* siplib/qtlib.c, siplib/sip.h, siplib/sipint.h, siplib/siplib.c:
+-	The sip module now compiles again without any unexpected warnings.
+-	[6fb536d5333e]
+-
+-2008-12-02  phil  <phil>
+-
+-	* siplib/objmap.c, siplib/qtlib.c, siplib/sip.h, siplib/sipint.h,
+-	siplib/siplib.c:
+-	Various compilation fixes.
+-	[ace8e0f95607]
+-
+-2008-12-01  phil  <phil>
+-
+-	* sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	Safety checkin of the support for the new sip.simplewrapper type.
+-	[3d87512e3a5c]
+-
+-	* NEWS, doc/sipref.txt, siplib/siplib.c:
+-	Added support for %InitialisationCode. (Actually in the previous
+-	commit but I forgotto mention it.) The text of an attribute
+-	exception now mimics that produced by the Python interpreter.
+-	[70d0f5dc259b]
+-
+-2008-11-30  phil  <phil>
+-
+-	* doc/sipref.txt, sipgen/gencode.c, sipgen/lexer.l, sipgen/parser.y,
+-	sipgen/sip.h, sipgen/transform.c, siplib/sip.h, siplib/siplib.c:
+-	Refactored the super-type and meta-type support. Meta-types are now
+-	handled implicitly.
+-	[2676976c88bf]
+-
+-2008-11-29  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h, sipgen/transform.c,
+-	siplib/siplib.c:
+-	Debugged the metatype support.
+-	[e7e9b5d303c3]
+-
+-2008-11-27  phil  <phil>
+-
+-	* sipgen/gencode.c, siplib/siplib.c:
+-	The metatypes are now registered and readied.
+-	[5c4757c83b70]
+-
+-	* sipgen/export.c, sipgen/gencode.c, sipgen/parser.y,
+-	sipgen/transform.c, siplib/siplib.c:
+-	Fixes for various regressions.
+-	[eea6dc713727]
+-
+-2008-11-26  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	Use the string pool for calls to qRegisterMetaType().
+-	[954bd63eb830]
+-
+-	* sipgen/gencode.c, sipgen/transform.c, siplib/sip.h, siplib/siplib.c:
+-	Completed the code generator support for user defined metatypes.
+-	[6c09f41b9eec]
+-
+-2008-11-24  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/lexer.l, sipgen/parser.y, sipgen/sip.h,
+-	sipgen/transform.c, siplib/sip.h:
+-	Added the parser support for %Metatype and %DefaultMetatype.
+-	[6af8f6a12eb5]
+-
+-2008-11-23  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h, sipgen/transform.c:
+-	The string pool now overlaps strings where possible.
+-	[4873718f6e82]
+-
+-	* sipgen/export.c, sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h,
+-	siplib/sip.h, siplib/siplib.c:
+-	Enum names now use the string pool.
+-	[b6414c99a03a]
+-
+-	* sipgen/parser.y, siplib/sip.h, siplib/siplib.c:
+-	Fixed a regression in the handling of nested namespaces.
+-	[a49433be0291]
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h, sipgen/transform.c,
+-	siplib/sip.h, siplib/siplib.c:
+-	Python and C++ type names now use the string pool. The string pool
+-	is currently broken for namespace extenders.
+-	[b08a2ca9d7fd]
+-
+-2008-11-22  phil  <phil>
+-
+-	* doc/sipref.txt, sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h,
+-	sipgen/transform.c, siplib/sip.h, siplib/siplib.c:
+-	The generated name cache is now a single (const) string.
+-	[0296eda5e61a]
+-
+-	* doc/sipref.txt, lib/configure.py, lib/siputils.py, sipgen/gencode.c,
+-	siplib/sip.h, siplib/siplib.c:
+-	Removed all deprecated parts of the API and generated code.
+-	[0a00c20f5c5b]
+-
+-2008-11-21  phil  <phil>
+-
+-	* lib/siputils.py:
+-	Use "-undefined dynamic_lookup" rather than linking against the
+-	Python framework on MacOS.
+-	[773c8920c04f]
+-
+-2008-11-18  phil  <phil>
+-
+-	* doc/sipref.txt, sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	Added sipWrapperType_Check() to the public API.
+-	[42d9ec7403f4]
+-
+-2008-11-17  phil  <phil>
+-
+-	* NEWS, sipgen/gencode.c:
+-	Merged v4.7.9 into the trunk.
+-	[63aff4a6e0f0]
+-
+-2008-11-08  phil  <phil>
+-
+-	* NEWS, TODO, build.py, doc/default.css, doc/sipref.txt, lib/LICENSE,
+-	lib/LICENSE.short, lib/README.HP-UX, lib/THANKS, lib/configure.py,
+-	lib/siputils.py, sipgen/export.c, sipgen/gencode.c, sipgen/heap.c,
+-	sipgen/lexer.l, sipgen/main.c, sipgen/parser.y, sipgen/sip.h,
+-	sipgen/transform.c, siplib/objmap.c, siplib/qtlib.c, siplib/sip.h,
+-	siplib/sipint.h, siplib/siplib.c, specs/linux-icc,
+-	specs/win32-msvc2005, specs/win32-msvc2008:
+-	Merged v4.7.8 into the trunk.
+-	[9cc6147a1067]
+-
+-2007-07-30  phil  <phil>
+-
+-	* NEWS:
+-	Released as v4.7.
+-	[a458d43a6fbb] [4.7]
+-
+-2007-07-28  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	Fixed a memory leak with mapped types with the /Out/ annotation.
+-	[5c156cb3b313]
+-
+-2007-07-27  phil  <phil>
+-
+-	* siplib/qtlib.c:
+-	Fixed a bug preventing wrapped C++ slots from being disconnected.
+-	[43fc1981c30d]
+-
+-2007-07-14  phil  <phil>
+-
+-	* siplib/qtlib.c, siplib/sip.h, siplib/sipint.h, siplib/siplib.c:
+-	Rather than only lambda functions being given an extra reference
+-	when used as a slot, anything other that a method or wrapped C
+-	function is given an extra reference. Specifically this means that
+-	partial functions can now be used as slots.
+-	[2562db168ce9]
+-
+-2007-07-04  phil  <phil>
+-
+-	* sipgen/transform.c:
+-	Relaxed the restriction that /Out/ arguments couldn't be const.
+-	[546fba30aac6]
+-
+-2007-06-25  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	Fixed a compiler warning message about an unused argument in
+-	generated code.
+-	[5713835ff863]
+-
+-	* sipgen/parser.y:
+-	Fixed a bug in the previous fix so that it only applies to mapped
+-	types.
+-	[68a7fd2c1ea4]
+-
+-	* sipgen/parser.y, sipgen/sip.h, sipgen/transform.c:
+-	Fixed a bug where template based types where overwriting the header
+-	code of any previously defined type based on the same interface
+-	file.
+-	[f41edc04b3cf]
+-
+-2007-06-23  phil  <phil>
+-
+-	* NEWS, sipgen/gencode.c:
+-	Consolidated modules are now generated as either C or C++ (rather
+-	than always C) so that the name cache names are consistently
+-	mangled.
+-	[83c24c956277]
+-
+-2007-06-22  phil  <phil>
+-
+-	* lib/siputils.py:
+-	Fixed a build system problem for PyQt on Windows against a static
+-	Qt.
+-	[3ff5f3d1e074]
+-
+-	* sipgen/gencode.c:
+-	Fixed silly code generation typo.
+-	[3232af13c3f6]
+-
+-	* lib/siputils.py:
+-	Changed the build system so that missing macros default to being
+-	empty rather than causing an error. (Qt v4.3.0 contains such a
+-	case.)
+-	[213c1dd11448]
+-
+-2007-06-20  phil  <phil>
+-
+-	* doc/sipref.txt, sipgen/gencode.c, sipgen/lexer.l, sipgen/main.c,
+-	sipgen/parser.y, sipgen/sip.h, sipgen/transform.c, siplib/sip.h,
+-	siplib/siplib.c:
+-	Split the consolidated module concept into separate consolidated and
+-	composite module types, which significantly simplifies things.
+-	[eb0502b5bb27]
+-
+-2007-06-19  phil  <phil>
+-
+-	* lib/siputils.py:
+-	Updated some comments in the build system.
+-	[f38ba63f0f97]
+-
+-	* siplib/siplib.c:
+-	Fixed a bug in the sip module consolidated module support. Otherwise
+-	everything seems to work.
+-	[a9d7eeffdf81]
+-
+-	* sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	More consolidated module refactoring.
+-	[9c629ca01a4a]
+-
+-2007-06-18  phil  <phil>
+-
+-	* sipgen/export.c, sipgen/gencode.c, sipgen/main.c, sipgen/parser.y,
+-	sipgen/sip.h, sipgen/transform.c:
+-	More consolidated module refactoring. PyQt4 with only QtCore enabled
+-	now compiles.
+-	[bec649674da2]
+-
+-2007-06-16  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/parser.y:
+-	More consolidated module support.
+-	[b7455f328486]
+-
+-2007-06-12  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	Hopefully fixed a bug in the handling of the 'C' and 'D' format
+-	characters in sipParseResult().
+-	[c28fa1333976]
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h, sipgen/transform.c:
+-	More refactoring for consolidated module support. SIP no longer
+-	generates lots of .h files. Note that SIP is now less tolerant of
+-	missing #includes in %TypeHeaderCode and %ModuleHeaderCode.
+-	[ae2dec8da410]
+-
+-2007-06-04  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	Removed the need to generate the shadow class definition in a header
+-	file and put it in the original class's C++ file instead.
+-	[30cd539612c7]
+-
+-2007-06-03  phil  <phil>
+-
+-	* sipgen/export.c, sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h,
+-	sipgen/transform.c:
+-	More consolidated module refactoring.
+-	[9fbe5340767f]
+-
+-2007-06-01  phil  <phil>
+-
+-	* sipgen/parser.y:
+-	Fixed a missing return in parser.y.
+-	[3f160ab4ae5b]
+-
+-2007-05-28  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h, sipgen/transform.c:
+-	A bit more consolidated module support.
+-	[f714935139bb]
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h, siplib/sip.h,
+-	siplib/siplib.c:
+-	More work on consolidated modules.
+-	[bde47f2343cf]
+-
+-2007-05-27  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/sip.h, siplib/sip.h, siplib/siplib.c:
+-	The component stub modules (ie. those requested with the -p flag)
+-	are now generated.
+-	[21119384ab4f]
+-
+-	* doc/sipref.txt, sipgen/gencode.c, sipgen/main.c, sipgen/sip.h:
+-	Added the stubs of the -n and -p command line options for the
+-	remaining consolidated module support. Documented the
+-	%ConsolidatedModule directive.
+-	[744cf0ed0857]
+-
+-2007-05-24  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/lexer.l, sipgen/parser.y, sipgen/sip.h:
+-	Completed the implementation of %ConsolidatedModule for the simple
+-	case (where the consolidated module populates itself from the
+-	component modules).
+-	[78406f2fdcb4]
+-
+-2007-05-23  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h:
+-	A bit more refactoring for the consolidated module support.
+-	[51a36ed46e45]
+-
+-	* siplib/objmap.c, siplib/sip.h, siplib/sipint.h, siplib/siplib.c:
+-	When deciding if an instance is already wrapped, sip only considers
+-	if the candidate is a sub-class of the expected class. (Before it
+-	used to consider if the candidate was a super-class of the expected
+-	class as well. However this shouldn't be necessary as the candidates
+-	class should be correct if all the sub-class convertor code is
+-	working properly.)
+-	[014d6fb553a9]
+-
+-	* sipgen/lexer.l, sipgen/parser.y, sipgen/sip.h, siplib/objmap.c:
+-	Added the start of the support for %ConsolidatedModule.
+-	[2cdafc7810be]
+-
+-2007-05-20  phil  <phil>
+-
+-	* doc/sipref.txt, siplib/siplib.c:
+-	Added the dump() funtion to the sip module.
+-	[299d67a0fe51]
+-
+-2007-05-13  phil  <phil>
+-
+-	* doc/sipref.txt, sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	Added sipTransferBreak() for removing hidden references without
+-	changing owndership.
+-	[5d298052a2e5]
+-
+-	* doc/sipref.txt, sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h:
+-	Added support for /Transfer/ as a function annotation.
+-	[ab6bd827b7a0]
+-
+-2007-05-12  phil  <phil>
+-
+-	* lib/siputils.py:
+-	Added the build system hooks for PyQt's QtScript module.
+-	[6fdf6cb0ade1]
+-
+-	* sipgen/parser.y:
+-	Fixed some parser problems related to versioning.
+-	[a4ffe24c61bd]
+-
+-2007-05-11  phil  <phil>
+-
+-	* sipgen/parser.y:
+-	Relaxed the restriction that the arguments to mapped type templates
+-	had to be simple names and not basic types.
+-	[04d512a7ddee]
+-
+-	* sipgen/gencode.c:
+-	Generated the sipClass_* for namespaces.
+-	[234dfbd619d5]
+-
+-2007-05-07  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	More fixes to mapped type templates - should be Ok now.
+-	[3e7528f5ec18]
+-
+-2007-05-04  phil  <phil>
+-
+-	* doc/sipref.txt:
+-	Fixed a couple of documentation bugs regarding exceptions.
+-	[21138bd0e4dd]
+-
+-2007-05-03  phil  <phil>
+-
+-	* sipgen/transform.c:
+-	Fixed a bug where generated .h files for template argument types
+-	were being included in the mapped type rather than the mapped type's
+-	own .h file.
+-	[015e7bc362e3]
+-
+-2007-04-28  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	Removed the need for the copy_reg module. This marks the completion
+-	if the pickle support.
+-	[855e5b2a3bfc]
+-
+-	* sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	Pickling nested types now works.
+-	[d10779f3268e]
+-
+-	* siplib/siplib.c:
+-	Minor refactoring of the pickle code prior to adding support for
+-	nested classes.
+-	[33badbfc5ee1]
+-
+-2007-04-27  phil  <phil>
+-
+-	* doc/sipref.txt, siplib/siplib.c:
+-	Named enums that are nested within other types can now be pickled.
+-	(Note that the pickle format for classes will be changed in the next
+-	few days to allow nested classes to be pickled in the same way.)
+-	[ad31cd17972b]
+-
+-2007-04-26  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	More improvements to the pick code.
+-	[7387a6436f4f]
+-
+-	* sipgen/gencode.c:
+-	Slight improvement to the generated pickle code.
+-	[250d4acde794]
+-
+-2007-04-22  phil  <phil>
+-
+-	* NEWS, doc/sipref.txt, sipgen/gencode.c, sipgen/lexer.l,
+-	sipgen/parser.y, sipgen/sip.h, sipgen/transform.c, siplib/sip.h,
+-	siplib/siplib.c:
+-	Added %PickleCode to allow wrapped objects to be pickled.
+-	[45059aeff1d0]
+-
+-	* siplib/siplib.c:
+-	Module level enums can now be pickled. Removed the None
+-	implementations of __reduce__ and __reduce_ex__ and fixed the
+-	segfault that pickling was causing.
+-	[960a54bd61d7]
+-
+-2007-04-10  phil  <phil>
+-
+-	* NEWS:
+-	Released as v4.6.
+-	[9d849b09a8d4] [4.6]
+-
+-2007-04-07  phil  <phil>
+-
+-	* sipgen/export.c:
+-	Changed the API file generation to generate the __init__ form of a
+-	ctor as well as the callable type form.
+-	[316e430f8a37]
+-
+-2007-04-02  phil  <phil>
+-
+-	* NEWS:
+-	Updated the NEWS file.
+-	[5c6477d8ee0d]
+-
+-	* NEWS, doc/sipref.txt, lib/configure.py, lib/siputils.py:
+-	Added the -n flag to configure.py to build universal binaries on
+-	MacOS/X.
+-	[e892f0a63956]
+-
+-	* siplib/siplib.c:
+-	Fixed a MinGW warning message.
+-	[79ac369e6efa]
+-
+-	* siplib/siplib.c:
+-	Backed out the save and restore of the exception state in
+-	sipWrapper_dealloc() as it can get called when there is no current
+-	thread state (which results in a segfault).
+-	[f66e13ead83b]
+-
+-	* NEWS:
+-	Updated the NEWS file.
+-	[c7488adf6abf]
+-
+-	* siplib/siplib.c:
+-	Fixed a bug handling sub-class convertor code with multiple
+-	inheritance.
+-	[8ac3a23e1e3c]
+-
+-	* doc/sipref.txt, sipgen/gencode.c:
+-	Virtuals that return a wchar_t * now keep then free the previous
+-	result to limit the possible memory leaks.
+-	[48b87ba8bc6a]
+-
+-2007-04-01  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/transform.c:
+-	Fixed a bug in the wchar_t support with const wchar_t * arguments.
+-	Fixed a bug in the wchar_t support with char and wchar_t being
+-	considered equivalent.
+-	[541c7556314d]
+-
+-2007-03-26  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	Fixed problem where lambda slots connected to QObject.destroyed()
+-	were cleared before the signal was emitted.
+-	[2ace696800c4]
+-
+-2007-03-25  phil  <phil>
+-
+-	* doc/sipref.txt, sipgen/gencode.c:
+-	Completed the wchar_t support.
+-	[14c15deefc3b]
+-
+-2007-03-24  phil  <phil>
+-
+-	* sipgen/export.c, sipgen/gencode.c, sipgen/lexer.l, sipgen/parser.y,
+-	sipgen/sip.h, sipgen/transform.c, siplib/qtlib.c, siplib/sip.h,
+-	siplib/siplib.c:
+-	Added support for wchar_t - undocumented and certainly untested.
+-	[14559b49bd9d]
+-
+-2007-03-10  phil  <phil>
+-
+-	* sipgen/gencode.c, siplib/siplib.c:
+-	No longer generate the forward declaration of an opaque class. It
+-	shouldn't be necessary and means that the class could be a C
+-	structure.
+-	[647d2f4b8561]
+-
+-2007-03-02  phil  <phil>
+-
+-	* sipgen/lexer.l:
+-	SIP should now handle DOS format files on UNIX systems.
+-	[1935d8be814b]
+-
+-2007-02-27  phil  <phil>
+-
+-	* doc/sipref.txt, sipgen/gencode.c, sipgen/main.c, sipgen/parser.y,
+-	sipgen/sip.h:
+-	Undeprecated the -g command line option. Added the /HoldGIL/
+-	annotation.
+-	[fbf1aaec1094]
+-
+-2007-02-25  phil  <phil>
+-
+-	* sipgen/transform.c, siplib/siplib.c:
+-	Fixed the previous fix related to signatures for the cases where the
+-	Python and C++ signatures have different numbers of arguments.
+-	[66f4866a1393]
+-
+-	* doc/sipref.txt, siplib/siplib.c:
+-	Included Matt Newell's fix for making sure that a sub-class
+-	convertor returns the most specific type available.
+-	[7b9b628d5c50]
+-
+-2007-02-24  phil  <phil>
+-
+-	* doc/sipref.txt, sipgen/transform.c:
+-	Fixed some documentation references to Py_ssize_t. sip now takes C++
+-	as well as Python signatures into account when deciding what
+-	interface files a class need to include.
+-	[ac3ecfcc08d3]
+-
+-	* doc/sipref.txt, siplib/qtlib.c:
+-	Leave it to the Qt support code to release the GIL when connecting
+-	signals.
+-	[8c907b07ad8f]
+-
+-2007-02-20  phil  <phil>
+-
+-	* siplib/qtlib.c, siplib/sipint.h, siplib/siplib.c:
+-	An instance dictionary is not longer created automatically. Python
+-	will create it if and when it is needed. lambda slots are now
+-	cleaned up in the clear function rather than being left to the slot
+-	proxy dtor.
+-	[61eac95ed77e]
+-
+-	* siplib/siplib.c:
+-	Fixed a bug in the implementation of /Transfer/ when the object was
+-	aleady owned by C++ but the owning object had been garbage
+-	collected.
+-	[4d64b0e0db86]
+-
+-2007-02-18  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	Fixed a bug in the clearing of reference cycles with lambda slots.
+-	Although the slot is visited, it is no longer cleared - that is left
+-	to the proxy dtor.
+-	[aac8236a8970]
+-
+-2007-02-16  phil  <phil>
+-
+-	* lib/siputils.py, sipgen/gencode.c:
+-	Fixed a bug in the build system for QtDesigner on Windows. The
+-	Q_OBJECT support code now uses metaObject() rather than
+-	staticMetaObject because the latter is private in the ActiveQt
+-	classes.
+-	[4b8647dbb036]
+-
+-2007-02-10  phil  <phil>
+-
+-	* doc/sipref.txt, sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h,
+-	sipgen/transform.c, siplib/sip.h, siplib/siplib.c:
+-	Added support for /TypeFlags/. Added sipFindClass() and
+-	sipFindNamedEnum() to the public API.
+-	[530b7a1aa547]
+-
+-2007-02-06  phil  <phil>
+-
+-	* sipgen/gencode.c, siplib/sip.h:
+-	More changes to the Q_OBJECT support.
+-	[b46c77268a1c]
+-
+-2007-02-04  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h, siplib/sip.h:
+-	Renamed "Qt4MetaObject" to "Qt4Q_OBJECT".
+-	[9b8809b3f254]
+-
+-2007-02-01  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	Changed the metaObject() hook so that it won't crash if the C++
+-	instance has gone.
+-	[5241cd5c39d3]
+-
+-2007-01-30  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	Changed the metaObject() hook again.
+-	[77da534919cb]
+-
+-	* sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	Changed the metaObject() hooks.
+-	[272f63959180]
+-
+-2007-01-27  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	Changed the way the Qt support API is created so that new SIPs can
+-	build old PyQts.
+-	[15c8d8be611d]
+-
+-	* NEWS, sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	Added the hooks to allow PyQt to build a proper meta-object when a
+-	new Python class is defined.
+-	[c82c3d1b50aa]
+-
+-2007-01-25  phil  <phil>
+-
+-	* lib/siputils.py, siplib/qtlib.c:
+-	Fixed a build system bug that affected non-MinGW Windows compilers
+-	when building static modules. Taught the build system about the
+-	QtDesigner module.
+-	[0029d3937d59]
+-
+-2007-01-23  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h, sipgen/transform.c:
+-	Reimplemented the support for qt_metacall() so that it is a bit
+-	cleaner and can't be called from Python.
+-	[c3701e916110]
+-
+-2007-01-22  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h, siplib/qtlib.c,
+-	siplib/sip.h, siplib/sipint.h, siplib/siplib.c:
+-	Added support for the QtMetaClass option. Added sipParseSignature()
+-	to the private Qt API. (Both of the above are needed for David
+-	Boddie's support for Python widgets in Qt Designer.)
+-	[51250dc9185b]
+-
+-2007-01-21  phil  <phil>
+-
+-	* sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	Extended the cyclic garbage collector support for lambda slots so it
+-	works with SIGNALs as well as PYSIGNALs. Incremented the SIP API
+-	version number to 3.4.
+-	[fcf4f2b51bd7]
+-
+-	* siplib/qtlib.c, siplib/sip.h, siplib/sipint.h, siplib/siplib.c:
+-	Fixed garbage collection support for lambda slots (at the moment
+-	only when the slot is connected to a PYSIGNAL).
+-	[8bf735cda5bf]
+-
+-2007-01-16  phil  <phil>
+-
+-	* siplib/sip.h:
+-	Added #undef slots to sip.h for when embedding Python 2.3 in Qt
+-	applications.
+-	[33ab2adb9d0c]
+-
+-	* sipgen/gencode.c:
+-	qRegisterMetaType() is now called for every candidate class at
+-	module initialisation rather than when the first instance is created
+-	from Python.
+-	[a31d12e3d9c2]
+-
+-2007-01-15  phil  <phil>
+-
+-	* doc/sipref.txt, sipgen/gencode.c, siplib/siplib.c:
+-	Allowed /TransferThis/ to be specified more than once.
+-	[e8246e9dc928]
+-
+-	* doc/sipref.txt, lib/LICENSE.short, siplib/threads.c:
+-	Updated the copyright notices. Fixed a reentrancy problem in
+-	wrapping objects obtained from C/C++ (thanks to Giovanni Bajo for
+-	the fix).
+-	[117d2c42c517]
+-
+-2007-01-10  phil  <phil>
+-
+-	* siplib/sip.h, siplib/siplib.c:
+-	Added support for __truediv__ and __itruediv__ by making them
+-	synonyms for __div__ and __idiv__.
+-	[1c6e71aeb203]
+-
+-2007-01-07  phil  <phil>
+-
+-	* sipgen/gencode.c, siplib/siplib.c:
+-	Hopefully fixed a bug in the generation of the typedefs table that
+-	wasn't using the full name of foreign modules.
+-	[a193602041a2]
+-
+-2006-12-28  phil  <phil>
+-
+-	* siplib/sip.h:
+-	Fixed a bug in the sipResetCppHasRef() macro that breaks the
+-	/TransferBack/ annotation.
+-	[30e9fc168db0]
+-
+-2006-12-20  phil  <phil>
+-
+-	* lib/siputils.py:
+-	Fixed a MacOS specific bug in create_wrapper() in the build system.
+-	[34641513890f]
+-
+-	* lib/sipdistutils.py:
+-	Applied a patch to sipdistutils.py from Giovanni Bajo to allow .sip
+-	files to be used in the "depends" argument to setup().
+-	[912613b39701]
+-
+-2006-12-16  phil  <phil>
+-
+-	* NEWS, lib/siputils.py:
+-	Fixed a bug in the build system that meant that lines in the top
+-	level mkspec file were being ignored after the last include.
+-	[c2ee167686b7]
+-
+-2006-12-09  phil  <phil>
+-
+-	* lib/siputils.py:
+-	Fixed a MacOS build problem caused by another change to Qt installs.
+-	[90c588f6fa54]
+-
+-	* NEWS, build.py:
+-	Updated the NEWS file. Fixed the internal build system for later
+-	versions of docutils.
+-	[4bcf93b8836e]
+-
+-2006-12-06  phil  <phil>
+-
+-	* NEWS, siplib/qtlib.c:
+-	"PyQt_PyObject" is now used instead of "PyObject *". lamda functions
+-	can now be used as slots.
+-	[33493621d63e]
+-
+-2006-11-26  phil  <phil>
+-
+-	* siplib/sip.h, siplib/siplib.c:
+-	Fixed an incorrect assumption that if a Python wrapper of a C++
+-	owned object was being garbage collected then its Python children
+-	(ie. things it owns) should also be garbage collected. It may be
+-	that the parent is a "temporary" object (eg. the argument of a
+-	reimplementation of a virtual) but the children are "permanent". The
+-	case in PyQt is the parent argument of
+-	QAbstractItemDelegate.createEditor().
+-	[b981a814a1b2]
+-
+-2006-11-25  phil  <phil>
+-
+-	* doc/sipref.txt, sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	PEP 353 fixes from Ulli.
+-	[d22c558be4b9]
+-
+-	* siplib/qtlib.c, siplib/sip.h, siplib/siplib.c:
+-	Some "char *" to "const char *" fixes from Ulli.
+-	[208ba44fcddc]
+-
+-2006-11-18  phil  <phil>
+-
+-	* sipgen/transform.c:
+-	Fixed a broken pointer bug in the API file generation.
+-	[b80f4ae42e97]
+-
+-2006-11-17  phil  <phil>
+-
+-	* sipgen/export.c, sipgen/lexer.l:
+-	Fixed a misleading error message when instantiating templates. Fixed
+-	a bug generating global functions in API files.
+-	[6b6804bacc4f]
+-
+-2006-11-11  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h, sipgen/transform.c:
+-	Fixed a bug with virtual handlers when a module %Imports from two
+-	other (independent) modules.
+-	[56ca50343b62]
+-
+-2006-11-04  phil  <phil>
+-
+-	* NEWS:
+-	Released as v4.5.
+-	[5982951360f3] [4.5]
+-
+-2006-10-28  phil  <phil>
+-
+-	* lib/siputils.py:
+-	The build system now handles .prl files on MacOS.
+-	[25b8444de255]
+-
+-2006-10-27  phil  <phil>
+-
+-	* NEWS, doc/sipref.txt, sipgen/gencode.c, sipgen/parser.y,
+-	sipgen/sip.h, sipgen/transform.c:
+-	Changed NoDefaultCopyCtor to NoDefaultCtors. Updated the NEWS file.
+-	[57307ed6d154]
+-
+-2006-10-22  phil  <phil>
+-
+-	* doc/sipref.txt, lib/siputils.py, sipgen/parser.y, sipgen/sip.h,
+-	sipgen/transform.c, siplib/qtlib.c:
+-	A fix for configuring QtAssistant in PyQt for Qt v4.2 on MacOS.
+-	Added the NoDefaultCopyCtor class annotation.
+-	[ed57b3a6fd1c]
+-
+-2006-10-21  phil  <phil>
+-
+-	* doc/sipref.txt, siplib/siplib.c:
+-	Fixed a Python 2.4/2.5 change that was missed. Added
+-	sip.setdeleted().
+-	[2db4a119d6c6]
+-
+-2006-10-20  phil  <phil>
+-
+-	* doc/sipref.txt, lib/siputils.py, specs/hurd-g++, specs/solaris-cc:
+-	Platform portability fixes from Ulli. Fix for conditional includes
+-	in spec files from Ulli. Qt4 module include directories are now
+-	searched before the main Qt4 include directory. Handle the change in
+-	debug libraries in Qt v4.2.
+-	[3f72b2b88460]
+-
+-2006-10-15  phil  <phil>
+-
+-	* sipgen/parser.y:
+-	Allow virtual signals if the NoEmitters option is set.
+-	[6657a8d15171]
+-
+-	* sipgen/gencode.c, sipgen/sip.h, sipgen/transform.c:
+-	Fixed a bug where the first argument to a global comparison operator
+-	was mishandled if it was a pointer rather than a reference.
+-	[5c5c0d5f6b65]
+-
+-2006-10-13  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	Improved the previous fix for the incorrect ctor exception.
+-	[3d9f787fedf8]
+-
+-2006-10-08  phil  <phil>
+-
+-	* lib/siputils.py, siplib/siplib.c:
+-	Fixed bug where handwritten traverse and clear code wasn't being
+-	called for derived classes. Fixed an incorrect Python exception
+-	raised when a C++ exception is thrown by a ctor. The build system
+-	now displayed an error if a non-framework build of Python is used on
+-	MacOS. Untested fix for building a static module with MinGW.
+-	[9c60ee47e4d5]
+-
+-2006-10-07  phil  <phil>
+-
+-	* lib/siputils.py:
+-	Build system fixes for Qt v4.2.0 based on a patch from Matt Newell.
+-	[e7f12b65d105]
+-
+-2006-09-30  phil  <phil>
+-
+-	* lib/siputils.py:
+-	Fixes for building QtTest on Windows.
+-	[a8b3716e682a]
+-
+-2006-09-23  phil  <phil>
+-
+-	* lib/siputils.py, sipgen/parser.y:
+-	Taught the build system about QtTest. Fixed a bug in the handling of
+-	namespaces split across multiple header files.
+-	[89b8c6c6b8c6]
+-
+-	* TODO, doc/sipref.txt, siplib/siplib.c:
+-	Added support for hooking into the C++ dtor from Python by
+-	implementing __dtor__() from a patch by Jean Jacques Lecler.
+-	[38da61ef1711]
+-
+-	* NEWS, doc/sipref.txt, siplib/siplib.c:
+-	Added sip.delete() (based on a patch from Jean Jacques Lecler) and
+-	sip.isdeleted().
+-	[8946500be6fa]
+-
+-	* doc/sipref.txt, sipgen/export.c, sipgen/main.c, sipgen/sip.h:
+-	Removed the -n flag to sip now I think I've decided how to change
+-	code completion in QScintilla.
+-	[69cb56ba58f1]
+-
+-2006-09-22  phil  <phil>
+-
+-	* sipgen/parser.y:
+-	Backed out the check that abstract methods are virtual - because
+-	they don't have to be.
+-	[1c753a1e011a]
+-
+-2006-09-17  phil  <phil>
+-
+-	* doc/sipref.txt, sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h,
+-	sipgen/transform.c:
+-	Added support for pure virtual dtors. Fixed a bug where abstract
+-	operators weren't flagging the class as being abstract.
+-	[867e6aa1d499]
+-
+-2006-09-03  phil  <phil>
+-
+-	* sipgen/gencode.c, siplib/siplib.c:
+-	Defeated a GCC v4 warning message on generated code.
+-	[be5889f172fb]
+-
+-2006-08-17  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	Minor code generation formatting tidyups.
+-	[c4397d6c3aca]
+-
+-	* siplib/sip.h, siplib/siplib.c, specs/linux-lsb:
+-	Added argument type checking to sipRegisterIntTypes().
+-	[aa1a3cf373d0]
+-
+-2006-08-16  phil  <phil>
+-
+-	* sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	Added sipRegisterIntTypes() to the private Qt support API so that
+-	PyQt4 can implement Q_ENUMS and Q_FLAGS.
+-	[0909d2f2b376]
+-
+-2006-08-05  phil  <phil>
+-
+-	* lib/siputils.py:
+-	Added support for QAxContainer in the build system.
+-	[5ddf72d045fb]
+-
+-2006-07-19  phil  <phil>
+-
+-	* lib/configure.py, lib/siputils.py, specs/hurd-g++, specs/linux-pgcc,
+-	specs/solaris-cc, specs/solaris-cc-64, specs/solaris-g++,
+-	specs/solaris-g++-64, specs/win32-icc, specs/win32-msvc,
+-	specs/win32-msvc.net, specs/win32-msvc2005:
+-	Updated the spec files from Qt v4.1.4. Added (completely untested)
+-	support for embedding manifests for MSVC v8.
+-	[db5efb4cac5b]
+-
+-2006-07-16  phil  <phil>
+-
+-	* doc/sipref.txt, siplib/sip.h, siplib/siplib.c:
+-	More Python v2.5 changes.
+-	[d54e5c462956]
+-
+-2006-07-15  phil  <phil>
+-
+-	* siplib/objmap.c, siplib/sip.h, siplib/siplib.c:
+-	The sip module will now build against Python v2.5. (The 64 bit
+-	changes still need to be done.)
+-	[00cc5cf214cf]
+-
+-2006-07-08  phil  <phil>
+-
+-	* lib/configure.py:
+-	Fixed the use of sys.lib in configure.py.
+-	[a10f12367272]
+-
+-2006-07-06  phil  <phil>
+-
+-	* lib/configure.py:
+-	configure.py uses sys.lib if it is defined (for some 64 bit Linux
+-	distros).
+-	[0dbaacd9a231]
+-
+-2006-07-04  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	Always call a dtor if there is one, even if we can't see how the
+-	instance could have been created.
+-	[47bb2a6a914a]
+-
+-2006-07-01  phil  <phil>
+-
+-	* sipgen/export.c:
+-	Fixed default arguments and C++ scoped names in the new API file
+-	handling.
+-	[6909ffb3bb65]
+-
+-2006-06-30  phil  <phil>
+-
+-	* NEWS, doc/sipref.txt, sipgen/export.c, sipgen/gencode.c,
+-	sipgen/genxml.c, sipgen/main.c, sipgen/sip.h, sipgen/sipgen.sbf:
+-	Added the -n command line option (possibly only temporarily).
+-	Changed the API generation so that it is more complete and uses
+-	Python types rather than C/C++ types.
+-	[1cd867db4c66]
+-
+-2006-06-29  phil  <phil>
+-
+-	* lib/configure.py:
+-	Added sip_config_args to sipconfig.py. Added __hex__() to
+-	sip.voidptr.
+-	[d60d22ffda1c]
+-
+-	* NEWS, doc/sipref.txt, lib/configure.py, siplib/siplib.c:
+-	
+-	[16c887e1169c]
+-
+-2006-06-19  phil  <phil>
+-
+-	* lib/siputils.py, sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	More warning fixes from Ulli.
+-	[4ba06471ee46]
+-
+-2006-06-17  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	Changed the explicit C linkage to retain the benefit of using
+-	static.
+-	[b2f02ca5a819]
+-
+-2006-06-13  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/parser.y:
+-	Signals and slots are now const char * rather than char *.
+-	[a43a225ba180]
+-
+-2006-06-10  phil  <phil>
+-
+-	* doc/sipref.txt, sipgen/gencode.c, sipgen/parser.y, siplib/sip.h,
+-	siplib/siplib.c:
+-	Fixed the implementation of /TransferBack/ for virtuals. Changed all
+-	API arguments that take a format string from char * to const char *
+-	for Solaris. Used explicit C linkage for all generated function
+-	calls when genarting C++. (May need more work in this area.)
+-	[2d05ea691d29]
+-
+-2006-06-06  phil  <phil>
+-
+-	* sipgen/genxml.c:
+-	Changed the XML handling of opaque classes.
+-	[86888971690a]
+-
+-2006-06-05  phil  <phil>
+-
+-	* sipgen/genxml.c:
+-	Added support for opaque classes to the XML.
+-	[427fc4186f14]
+-
+-2006-06-03  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	More XML generation changes.
+-	[b204d646b580]
+-
+-2006-05-31  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/genxml.c, sipgen/sip.h:
+-	More XML generation changes.
+-	[91acee878afd]
+-
+-2006-05-30  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/genxml.c, sipgen/parser.y, sipgen/sip.h:
+-	More XML generation changes.
+-	[7d79341cfc58]
+-
+-2006-05-28  phil  <phil>
+-
+-	* sipgen/genxml.c:
+-	More XML generation changes.
+-	[a95f90a9f6d2]
+-
+-2006-05-25  phil  <phil>
+-
+-	* sipgen/genxml.c, siplib/qtlib.c:
+-	Fixed bug disconnecting Python signals.
+-	[7a44ec54ef69]
+-
+-2006-05-20  phil  <phil>
+-
+-	* sipgen/genxml.c:
+-	More XML generation changes.
+-	[7e8538e5e080]
+-
+-	* sipgen/genxml.c, sipgen/transform.c:
+-	Backed out the change that treated "char" and "char *" as equivalent
+-	when comparing Python signatures. (The former is different to the
+-	latter if it appears first.)
+-	[f411eb8c010c]
+-
+-2006-05-18  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/genxml.c, sipgen/sip.h:
+-	More XML generation changes.
+-	[e42fe590a33c]
+-
+-2006-05-16  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/genxml.c, sipgen/sip.h, sipgen/transform.c:
+-	Tightened up on detecting clashing Python signatures involving
+-	strings and longs. Changes to the XML file generation.
+-	[180930e69638]
+-
+-2006-05-13  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	Removed some Python API calls made after the interpreter is known to
+-	have gone.
+-	[dc80be8d888f]
+-
+-	* siplib/siplib.c:
+-	Fixed a sip module bug that meant that the Python API might be
+-	called after the interpreter had gone.
+-	[a9470b7f1479]
+-
+-	* sipgen/gencode.c:
+-	Fixed code generation bug with abstract operators.
+-	[473bd3cea296]
+-
+-	* NEWS, doc/sipref.txt, sipgen/gencode.c, sipgen/lexer.l,
+-	sipgen/parser.y, sipgen/sip.h:
+-	Added %UnitCode.
+-	[2f3ad3e3a582]
+-
+-2006-05-11  phil  <phil>
+-
+-	* NEWS, doc/sipref.txt, sipgen/gencode.c, siplib/sip.h,
+-	siplib/siplib.c:
+-	Added sipExportSymbol() and sipImportSymbol(). Bumped the API
+-	version number to 3.2.
+-	[ee671f33f9a8]
+-
+-2006-05-08  phil  <phil>
+-
+-	* sipgen/heap.c:
+-	Removed (hopefully) two new warning messages.
+-	[a347b1964dd2]
+-
+-2006-05-07  phil  <phil>
+-
+-	* NEWS, doc/sipref.txt, sipgen/gencode.c, sipgen/lexer.l,
+-	sipgen/parser.y, sipgen/sip.h:
+-	Added support for %ExportedHeaderCode.
+-	[1fc6cbb5421c]
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h, sipgen/transform.c:
+-	Fixed bug in handling of virtuals with different Python and C++
+-	signatures.
+-	[7c64bcb52e90]
+-
+-2006-05-05  phil  <phil>
+-
+-	* NEWS, doc/sipref.txt, sipgen/gencode.c, sipgen/heap.c,
+-	sipgen/lexer.l, sipgen/main.c, sipgen/parser.y, sipgen/sip.h,
+-	sipgen/transform.c, siplib/qtlib.c, siplib/sip.h, siplib/siplib.c:
+-	Fixes for compiler warnings and a couple of minor bugs from Ulli.
+-	Deprecated %SIPNoEmitters and replaced it with %SIPOptions. Added
+-	the RegisterTypes option so that appropriate classes are registered
+-	with Qt automatically when needed - so PyQt4 doesn't need to
+-	implement qRegisterMetaType().
+-	[b80581e367f3]
+-
+-	* sipgen/gencode.c, sipgen/genxml.c, sipgen/sip.h:
+-	Fixed some compiler warnings.
+-	[5c4467450cbe]
+-
+-2006-05-01  phil  <phil>
+-
+-	* sipgen/genxml.c, sipgen/transform.c:
+-	More work on the XML generation.
+-	[cb5eec12561a]
+-
+-2006-04-30  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/genxml.c, sipgen/main.c, sipgen/sip.h,
+-	sipgen/sipgen.sbf:
+-	Added the -m flag to generate the XML representation of the Pythonic
+-	API.
+-	[57d825e6a61f]
+-
+-2006-04-28  phil  <phil>
+-
+-	* sipgen/gencode.c, siplib/qtlib.c, siplib/sip.h, siplib/siplib.c:
+-	Replaced long long with PY_LONG_LONG for MSVC 6.
+-	[19dc39dffac6]
+-
+-2006-04-27  phil  <phil>
+-
+-	* lib/siputils.py, sipgen/parser.y:
+-	Fixed bug in handling multiple instances of the same namespace. The
+-	build system allows Apple's Python to be used if there is also a
+-	later python.org installation. MacOS modules are now bundles rather
+-	than dynamic libraries and can now be loaded by Pythons from
+-	python.org. Released as v4.4.3.
+-	[809972a88944]
+-
+-2006-04-21  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	Fixed the previous const mapped type fix.
+-	[1a5385651af1]
+-
+-2006-04-20  phil  <phil>
+-
+-	* lib/siputils.py, sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	Fixed the GUI enabled interpreter in sipconfig.create_wrapper() for
+-	MacOS. Fixed static const mapped types.
+-	[def8fea45725]
+-
+-2006-04-18  phil  <phil>
+-
+-	* doc/sipref.txt, lib/configure.py, lib/siputils.py:
+-	Fixed the build system for when sys.prefix != sys.exec_prefix.
+-	[83449c4ab4f2]
+-
+-2006-04-16  phil  <phil>
+-
+-	* doc/sipref.txt, lib/siputils.py:
+-	Added the export_all argument to the ModuleMakefile constructor of
+-	the build system so that exports can be handled on a per module
+-	basis. This is needed to get around a (not properly understood)
+-	problem with modules that wrap C++ exceptions.
+-	[89709d0957bd]
+-
+-2006-04-15  phil  <phil>
+-
+-	* lib/siputils.py, siplib/qtlib.c, specs/hurd-g++, specs/solaris-cc:
+-	The build system now complains if a property is used in a spec file
+-	when no properties have been defined. Removed Qt specific properties
+-	from the solaris-cc and hurd-g++ spec files. Fixed the disconnecting
+-	of short-circuited signals.
+-	[0c4ee0a3db80]
+-
+-2006-04-08  phil  <phil>
+-
+-	* lib/siputils.py:
+-	Fixed the build system to better support frameworks on MacOS.
+-	[864b17931a7b]
+-
+-2006-04-07  phil  <phil>
+-
+-	* doc/sipref.txt, siplib/sip.h, siplib/siplib.c:
+-	Made sure that all uses of sipMappedType * in the API are const.
+-	[0d3533b681e3]
+-
+-2006-04-06  phil  <phil>
+-
+-	* lib/siputils.py:
+-	The sipconfig module now uses qt_data_dir (if set) to find the qmake
+-	spec files.
+-	[2f81428640de]
+-
+-2006-04-05  phil  <phil>
+-
+-	* NEWS, TODO, sipgen/parser.y, sipgen/transform.c:
+-	Merged v4.4.1 into the trunk. SIP now properly detects duplicate
+-	Python signatures.
+-	[9c53b26de67b]
+-
+-2006-04-02  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	Fixed a regression in the handling of __dict__.
+-	[33a17c1ed42d]
+-
+-2006-04-01  phil  <phil>
+-
+-	* siplib/sip.h, siplib/siplib.c:
+-	Make the sip module's support for long long and unsigned long long
+-	conditional on HAVE_LONG_LONG so that it will build with older
+-	compilers.
+-	[e655c6a8a748]
+-
+-2006-03-29  phil  <phil>
+-
+-	* NEWS, sipgen/gencode.c:
+-	Removed extraneous brackets in generated code.
+-	[a64c7cdb2ee9]
+-
+-2006-03-28  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	Fixed some C++ code wrongly appearing in C modules.
+-	[7e80756dae4d]
+-
+-2006-03-25  phil  <phil>
+-
+-	* NEWS, sipgen/parser.y:
+-	Fixed a regression in the handling of namespaces.
+-	[7a22e2205ba9]
+-
+-2006-03-24  phil  <phil>
+-
+-	* NEWS, doc/sipref.txt, sipgen/gencode.c:
+-	Documented sipModule and sipModuleDict as being available to
+-	%PostInitialisationCode. Released as v4.4.
+-	[8acdabcf6a08] [4.4]
+-
+-2006-03-21  phil  <phil>
+-
+-	* doc/sipref.txt, lib/sipdistutils.py, siplib/sip.h, siplib/siplib.c:
+-	Applied patch for sipdistuils.py from Giovanni. Documented
+-	sipConvertFromNamedEnum(). Wrapped types now define __reduce_ex__
+-	and __reduce__ attributes set to None so that pickle knows they
+-	can't be pickled.
+-	[94694c47891e]
+-
+-2006-03-20  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	Fixed the special handling of the __dict__ attribute so that it
+-	doesn't apply to Python sub-classes of wrapped classes.
+-	[6835562cf526]
+-
+-2006-03-19  phil  <phil>
+-
+-	* doc/sipref.txt, sipgen/gencode.c, siplib/qtlib.c, siplib/sipint.h,
+-	siplib/siplib.c, siplib/threads.c:
+-	Documentation tweaks. Generate sipSelf for ctor %MethodCode now that
+-	it's existence is documented. Fixed a second place where slots with
+-	no underlying C++ instance might be invoked.
+-	[ba7b9c9371e1]
+-
+-2006-03-17  phil  <phil>
+-
+-	* doc/sipref.txt, sipgen/gencode.c:
+-	Removed __unicode__ from the documentation. Fixed a bug with virtual
+-	methods that returned a reference to a type that had
+-	%ConvertToTypeCode.
+-	[6dc8ddba43ed]
+-
+-2006-03-15  phil  <phil>
+-
+-	* sipgen/gencode.c, siplib/qtlib.c, siplib/sipint.h, siplib/siplib.c:
+-	Removal of a now redundant error message. Fixed a leaking weak
+-	reference object. Another attempt at fixing calling slots where the
+-	underlying C++ instance has disappeared.
+-	[8f7b10cbc372]
+-
+-2006-03-14  phil  <phil>
+-
+-	* lib/siputils.py, sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h,
+-	sipgen/transform.c:
+-	More const void * fixes. Fixed bug with building debug modules using
+-	MinGW. Fixed feature where too many names were being generated from
+-	imported modules. SIP now handles nested imports properly and
+-	doesn't require all modules to be explcitly imported.
+-	[f7b3774f05bf]
+-
+-2006-03-13  phil  <phil>
+-
+-	* build.py, doc/sipref.txt, lib/README.Fink, lib/siputils.py,
+-	sipgen/parser.y:
+-	Build system changes to support MacOS properly. Fixed crash when
+-	%TypeHeaderCode was used outside of a scope.
+-	[fc9cf357273b]
+-
+-2006-03-12  phil  <phil>
+-
+-	* TODO, sipgen/gencode.c:
+-	Fixed calls to sipConvertFromVoidPtr() with a const argument.
+-	[1d20b7ddf5b7]
+-
+-2006-03-11  phil  <phil>
+-
+-	* lib/siputils.py:
+-	Minor changes to sipconfig.py for PyQt4's pyqtconfig.py.
+-	[5c35ed3d0e90]
+-
+-	* lib/siputils.py, sipgen/parser.y:
+-	Fixed handling of generating code for the version before the first
+-	%Timeline version.
+-	[3ffe3ddaa678]
+-
+-2006-03-08  phil  <phil>
+-
+-	* siplib/qtlib.c:
+-	Fixed a bug in the handling of QVariant * and PyObject * signal
+-	arguments.
+-	[c04f60565120]
+-
+-2006-03-06  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	Fixed a regression in handling of enums defined in an imported
+-	module.
+-	[305954bab24d]
+-
+-	* sipgen/gencode.c:
+-	Fixed bug in handling the typedef void hack.
+-	[f5ec81faf924]
+-
+-2006-03-05  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h, siplib/sip.h,
+-	siplib/siplib.c:
+-	Fixed bug with abstract classes with %ConvertToSubClassCode.
+-	Reimplemented namspaces split across modules so that there is a
+-	single namespace implemented in the original module.
+-	[e04e87b70f29]
+-
+-	* sipgen/transform.c:
+-	Fixed missing #include for classes that aren't an immediate parent.
+-	[5f28954fe478]
+-
+-2006-03-04  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	Fixed a regression in the wrappers around protected methods.
+-	[65fc03434a16]
+-
+-	* siplib/qtlib.c:
+-	Suppressed the exception about the underlying object disappearing
+-	when calling a Python slot. This is because we don't automatically
+-	disconnect Python slots.
+-	[5a90239b615c]
+-
+-2006-03-02  phil  <phil>
+-
+-	* NEWS, doc/sipref.txt, sipgen/gencode.c, siplib/sip.h,
+-	siplib/siplib.c:
+-	Added sipLong_AsUnsignedLong() to work around a bug in
+-	PyLong_AsUnsignedLong().
+-	[ae6bdfc7d774]
+-
+-2006-02-26  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	Fixed bug in handling class arguments with /Out/ specified.
+-	[a39d9d9a8d5a]
+-
+-	* lib/siputils.py, sipgen/gencode.c, sipgen/lexer.l, sipgen/parser.y:
+-	Recognise NULL as a synonym for 0. Some build system changes for
+-	Cygwin. Fixed the deletion of temporary instances in catch clauses.
+-	[1b9e30dd13fb]
+-
+-	* NEWS, doc/sipref.txt, sipgen/gencode.c, sipgen/lexer.l,
+-	sipgen/parser.y, sipgen/sip.h, sipgen/transform.c, siplib/qtlib.c,
+-	siplib/sip.h:
+-	SIP now treats signed char as a type distinct from char.
+-	[01500c239ace]
+-
+-	* sipgen/gencode.c, sipgen/parser.y, sipgen/sip.h, sipgen/transform.c,
+-	siplib/sip.h, siplib/siplib.c:
+-	Tore up the recent changes for handling cross module namespaces. A
+-	namespace is now defined in each module it is used. That makes
+-	things easier to implement and should be less confusing for the
+-	user. The API and data structures should now be stable.
+-	[02277356e12c]
+-
+-2006-02-25  phil  <phil>
+-
+-	* sipgen/parser.y:
+-	Fixed bug in handling of variables introduced in the previous
+-	commit.
+-	[aadd2d0daa3e]
+-
+-	* sipgen/gencode.c, sipgen/parser.y:
+-	Added support for variables defined in namespaces defined in other
+-	modules.
+-	[a1210912bb6c]
+-
+-	* sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	Completed the support for enums in namespaces originating in other
+-	modules.
+-	[590dbde2e463]
+-
+-2006-02-21  phil  <phil>
+-
+-	* NEWS, doc/sipref.txt, sipgen/gencode.c, siplib/siplib.c:
+-	Added the 't' and 'u' format characters to sipParseArgs(),
+-	sipParseResult(), sipCallMethod() and sipBuildResult(). unsigned and
+-	unsigned short are now implemented as Python long objects instead of
+-	integer objects.
+-	[f8c047d7f8df]
+-
+-2006-02-19  phil  <phil>
+-
+-	* sipgen/gencode.c, siplib/qtlib.c, siplib/sip.h:
+-	Implemented disconnects for universal signals.
+-	[6cd1a4dc4e73]
+-
+-2006-02-18  phil  <phil>
+-
+-	* sipgen/gencode.c, siplib/qtlib.c, siplib/sip.h:
+-	Implemented support for signal arguments of type PyObject *.
+-	Implemented support for shortcircuited Python signals (ie. just the
+-	name without arguments) that will only work with other
+-	shortcircuited Python signals and Python slots - bit don't need to
+-	do any conversions between Python and C++.
+-	[6748c4088281]
+-
+-2006-02-17  phil  <phil>
+-
+-	* doc/sipref.txt, sipgen/gencode.c:
+-	Fixed bug in the implementation of /TransferBack/ in virtual
+-	handlers. Fixed bug in methods with a void result and a single /Out/
+-	argument that was a mapped type or class.
+-	[f6486c697de5]
+-
+-2006-02-16  phil  <phil>
+-
+-	* doc/sipref.txt, sipgen/gencode.c:
+-	Fixed bug in generating code that called sipCallMethod(). Updated
+-	the documentation where it was still referring to the legacy type
+-	convertors.
+-	[acdd622dba74]
+-
+-	* sipgen/gencode.c:
+-	Fixed bug in generated legacy mapped type convertor names.
+-	[8424561f0d54]
+-
+-2006-02-15  phil  <phil>
+-
+-	* sipgen/gencode.c:
+-	Fixed bug that could easily result in deleting non-heap instances.
+-	[9ab37451f8f0]
+-
+-2006-02-13  phil  <phil>
+-
+-	* doc/sipref.txt, lib/siputils.py:
+-	Fixes to PythonModuleMakefile.
+-	[684799b183d5]
+-
+-	* NEWS, doc/sipref.txt, sipgen/gencode.c, siplib/qtlib.c,
+-	siplib/sip.h, siplib/sipint.h, siplib/siplib.c:
+-	Renamed the new sipCheckConvert functions to sipForceConvert
+-	functions. Added the 'B', 'C' and 'D' format character to
+-	sipBuildResult() and sipCallMethod(). Removed the 'L' format
+-	character from sipBuildResult() and sipCallMethod(). Added
+-	sipConvertFromInstance(), sipConvertFromNewInstance() and
+-	sipConvertFromMappedType().
+-	[f6324b7c7ab1]
+-
+-2006-02-12  phil  <phil>
+-
+-	* NEWS, TODO, doc/sipref.txt, sipgen/gencode.c, sipgen/parser.y,
+-	siplib/sip.h, siplib/siplib.c, siplib/threads.c:
+-	Overhauled how %ConvertToTypeCode should be written - detail below.
+-	(Still need to overhaul %ConvertFromTypeCode.) Added
+-	sipCanConvertToInstance(), sipConvertToInstance(),
+-	sipCheckConvertToInstance() and sipReleaseInstance(). Added
+-	sipCanConvertToMappedType(), sipConvertToMappedType(),
+-	sipCheckConvertToMappedType(), sipReleaseMappedType() and
+-	sipFindMappedType(). Changed the order of the arguments to
+-	sipConvertToCppTransfer(). Added the 'C' and 'D' format characters
+-	to sipParseResult(). Changed the meaning of the 'J' and 'M' format
+-	characters in sipParseArgs(). Removed the sipConvertTo_*()
+-	functions. Removed sipConvertToCppTransfer(). Took all of the None
+-	handling out of %ConvertToTypeCode.
+-	[7122e755a332]
+-
+-2006-01-28  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/sip.h, sipgen/transform.c:
+-	Fixed the support for __hash__.
+-	[f57b38d29839]
+-
+-2006-01-26  phil  <phil>
+-
+-	* NEWS, doc/sipref.txt, sipgen/gencode.c, sipgen/lexer.l,
+-	sipgen/parser.y, sipgen/sip.h, siplib/qtlib.c, siplib/sip.h,
+-	siplib/sipint.h:
+-	Added %SIPNoEmitters to stop SIP generating signal emitters for a
+-	module and any module that imports it. Changed the signal/slot
+-	support so that Python signals can be implemented with proxies.
+-	[ebc0499b0e99]
+-
+-2006-01-20  phil  <phil>
+-
+-	* sipgen/gencode.c, siplib/sip.h, siplib/siplib.c:
+-	Fixed a bug in sipTransferTo() that caused some objects to be
+-	garbage collected while ownership was being transferred. Check that
+-	abstract methods are only ever called as bound methods.
+-	[7f66705a98e7]
+-
+-2006-01-19  phil  <phil>
+-
+-	* doc/sipref.txt, siplib/siplib.c:
+-	Updated the documentation for sipConnectRx(). The __dict__ attribute
+-	of a wrapper type now returns a regular dictionary rather than a
+-	proxy (because PyDict_Next() doesn't iterate over proxies).
+-	[b7b57265c54c]
+-
+-2006-01-14  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	Fixed the searching of signal types.
+-	[d24efdbe5952]
+-
+-2006-01-11  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	The previous fix wasn't quite so trivial.
+-	[a598de0cf451]
+-
+-	* siplib/siplib.c:
+-	Added missing function prototype.
+-	[5d6320a5e0a1]
+-
+-2006-01-10  phil  <phil>
+-
+-	* NEWS, doc/sipref.txt, lib/siputils.py, sipgen/gencode.c,
+-	sipgen/parser.y, sipgen/sip.h, sipgen/transform.c, siplib/sip.h,
+-	siplib/siplib.c:
+-	Fixed code generation bugs in new virtual handling code that was
+-	triggered by PyKDE. Build system changes for MinGW. Added support
+-	for constrained bools. Generate code to wrap static enum instances
+-	with inline code rather than through tables (as is done with class
+-	instances) for Windows.
+-	[48a76f76e9b8]
+-
+-2006-01-09  phil  <phil>
+-
+-	* NEWS, doc/sipref.txt, sipgen/gencode.c, sipgen/parser.y:
+-	Changed the signatures of sipForceConvertTo_*() and
+-	sipConvertFrom_*() back to their SIP 4.3 versions, deprecated them,
+-	and introduced the Transfer variants.
+-	[422ea1e3fee9]
+-
+-	* NEWS, doc/sipref.txt, lib/configure.py, lib/siputils.py:
+-	More build system changes for Windows. Added the platform macro to
+-	sipconfig.py. The default Windows platform Python 2.4 and later is
+-	now win32-msvc.net rather than win32-msvc.
+-	[e9d83bea0e38]
+-
+-2006-01-08  phil  <phil>
+-
+-	* lib/configure.py, lib/siputils.py:
+-	Various build system changes needed by PyQt4 on Windows.
+-	[dcbf196c14bb]
+-
+-2006-01-07  phil  <phil>
+-
+-	* lib/LICENSE.short, lib/configure.py, lib/sipdistutils.py,
+-	lib/siputils.py, specs/aix-g++, specs/aix-g++-64, specs/aix-xlc,
+-	specs/aix-xlc-64, specs/darwin-g++, specs/freebsd-g++,
+-	specs/freebsd-g++34, specs/freebsd-g++40, specs/freebsd-icc, specs
+-	/hpux-acc, specs/hpux-acc-64, specs/hpux-acc-o64, specs/hpux-g++,
+-	specs/hpux-g++-64, specs/hpuxi-acc, specs/hpuxi-acc-32, specs/hpuxi-
+-	acc-64, specs/hurd-g++, specs/irix-cc, specs/irix-cc-64,
+-	specs/irix-g++, specs/irix-g++-64, specs/linux-cxx, specs/linux-
+-	ecc-64, specs/linux-g++, specs/linux-g++-32, specs/linux-g++-64,
+-	specs/linux-icc, specs/linux-kcc, specs/linux-kylix, specs/linux-
+-	pgcc, specs/lynxos-g++, specs/macx-g++, specs/macx-mwerks, specs
+-	/macx-pbuilder, specs/macx-xcode, specs/macx-xlc, specs/netbsd-g++,
+-	specs/openbsd-g++, specs/qnx-g++, specs/sco-cc, specs/sco-g++, specs
+-	/solaris-cc, specs/solaris-cc-64, specs/solaris-g++,
+-	specs/solaris-g++-64, specs/tru64-cxx, specs/tru64-g++, specs
+-	/unixware-cc, specs/unixware-g++, specs/win32-borland,
+-	specs/win32-g++, specs/win32-icc, specs/win32-msvc,
+-	specs/win32-msvc.net, specs/win32-msvc2005:
+-	Updated the spec files from Qt v4.1. Added support for the $$()
+-	method of accessing environment variables in qmake spec files.
+-	sipdistutils.py fix from Giovanni. Changes to the build system for
+-	the slightly different macro names on Windows.
+-	[5030a64bab73]
+-
+-2006-01-04  phil  <phil>
+-
+-	* NEWS, doc/sipref.txt, sipgen/gencode.c, sipgen/parser.y,
+-	sipgen/transform.c:
+-	Added support for the /NoDerived/ annotation.
+-	[496e87667614]
+-
+-2006-01-03  phil  <phil>
+-
+-	* siplib/siplib.c:
+-	Fixed bug in handling of delayed dtors.
+-	[9ad8378e1bbd]
+-
+-2006-01-02  phil  <phil>
+-
+-	* sipgen/transform.c:
+-	Fixed another bug with the new handling of virtual function calls
+-	(where re-implementations from another module weren't picked up).
+-	[b4a5f97c4acd]
+-
+-2005-12-30  phil  <phil>
+-
+-	* sipgen/gencode.c, sipgen/sip.h, sipgen/transform.c:
+-	Fixed bugs with the new handling of virtuals that caused recursions.
+-	[e15093e5d260]
+-
+-2005-12-29  phil  <phil>
+-
+-	* lib/siputils.py:
+-	Taught the build system about the QtAssistantClient library.
+-	[ef92ee748d4c]
+-
+-	* sipgen/gencode.c:
+-	Fixed bugs related to global operators with an enum as the first
+-	argument.
+-	[2379d714c099]
+-
+-2005-12-28  phil  <phil>
+-
+-	* NEWS, doc/sipref.txt, sipgen/gencode.c, siplib/sip.h,
+-	siplib/siplib.c:
+-	Added sipConvertToCppTransfer(). Changed the signatures for the type
+-	convertor functions. Added the 'L' format character to
+-	sipBuildResult() and sipCallMethod().
+-	[2bf4d76eefe2]
+-
+-2005-12-27  phil  <phil>
+-
+-	* NEWS, doc/sipref.txt, sipgen/gencode.c, sipgen/parser.y,
+-	sipgen/sip.h, sipgen/transform.c, siplib/sip.h, siplib/siplib.c:
+-	Added support for the /DelayDtor/ class annotation to control the
+-	order of dtor calls when the interpreter exits. Fixed bugs with cast
+-	operators.
+-	[5a03f38f92c7]
+-
+-2005-12-26  phil  <phil>
+-
+-	* doc/sipref.txt, sipgen/gencode.c:
+-	Fixed a documentation bug. Slightly changed the declaration of the
+-	sipProtectVirt wrappers.
+-	[bc65dd63ac7d]
+-
+-2005-12-24  phil  <phil>
+-
+-	* NEWS, doc/sipref.txt, sipgen/gencode.c:
+-	Class methods called as class.method(self, ...) is now equivalent to
+-	this->class::method(...). Class methods called as self.method(...)
+-	is now equivalent to this->method(...). Introduced sipSelfWasArg and
+-	the sipProtectVirt wrappers in order to support the above.
+-	[d49dc239a2d7]
+-
+-2005-12-22  phil  <phil>
+-
+-	* siplib/qtlib.c, siplib/siplib.c:
+-	SIP no longer complains if a slot to be disconnected isn't actually
+-	connected (and hopes Qt will then behave appropriately).
+-	[7e93c92ec9b9]
+-
+-2005-12-19  phil  <phil>
+-
+-	* sipgen/parser.y:
+-	Backed out the recent change that ignored abstract specifications if
+-	the methods wasn't virtual.
+-	[72f23df36c23]
+-
+-	* doc/sipref.txt, lib/siputils.py:
+-	Various changes to the build system to better support Qt v4.
+-	[0a793291a2db]
+-
+-2005-12-18  phil  <phil>
+-
+-	* NEWS, doc/sipref.txt, lib/siputils.py:
+-	Added the PythonModuleMakefile class and create_wrapper() function
+-	to the build system.
+-	[70cd55448b1c]
+-
+-2005-12-15  phil  <phil>
+-
+-	* .repoman, NEWS, build.py, doc/sipref.txt, sipgen/main.c,
+-	siplib/qtlib.c, siplib/qtlib.cpp, siplib/sip.h:
+-	Internally renamed qtlib.cpp to qtlib.c. Small changes to the
+-	internal build system caused by the move to SVN. Removed SIP_BUILD
+-	from sip.h.
+-	[efe612146497]
+-
+-2005-12-14  phil  <phil>
+-
+-	* .repoman, NEWS, TODO, build.py, custom/custom.c, custom/customw.c,
+-	custom/mkcustom.py, doc/default.css, doc/sipref.txt, lib/LICENSE,
+-	lib/LICENSE.short, lib/README, lib/README.Fink, lib/README.HP-UX,
+-	lib/THANKS, lib/configure.py, lib/sipdistutils.py, lib/siputils.py,
+-	sipgen/gencode.c, sipgen/heap.c, sipgen/lexer.l, sipgen/main.c,
+-	sipgen/parser.y, sipgen/sip.h, sipgen/sipgen.sbf,
+-	sipgen/transform.c, siplib/bool.cpp, siplib/objmap.c,
+-	siplib/qtlib.cpp, siplib/sip.h, siplib/sipint.h, siplib/siplib.c,
+-	siplib/siplib.sbf, siplib/threads.c, specs/aix-g++,
+-	specs/aix-g++-64, specs/aix-xlc, specs/aix-xlc-64, specs/bsdi-g++,
+-	specs/cygwin-g++, specs/darwin-g++, specs/dgux-g++,
+-	specs/freebsd-g++, specs/freebsd-g++34, specs/freebsd-icc, specs
+-	/hpux-acc, specs/hpux-acc-64, specs/hpux-acc-o64, specs/hpux-cc,
+-	specs/hpux-g++, specs/hpux-g++-64, specs/hpuxi-acc-32, specs/hpuxi-
+-	acc-64, specs/hurd-g++, specs/irix-cc, specs/irix-cc-64, specs/irix-
+-	cc-o32, specs/irix-g++, specs/linux-cxx, specs/linux-ecc-64,
+-	specs/linux-g++, specs/linux-g++-64, specs/linux-icc, specs/linux-
+-	kcc, specs/linux-kylix, specs/linux-pgcc, specs/lynxos-g++,
+-	specs/macx-g++, specs/macx-mwerks, specs/macx-pbuilder, specs/macx-
+-	xlc, specs/netbsd-g++, specs/openbsd-g++, specs/qnx-g++, specs
+-	/reliant-cds, specs/reliant-cds-64, specs/sco-cc, specs/sco-g++,
+-	specs/solaris-cc, specs/solaris-cc-64, specs/solaris-g++,
+-	specs/solaris-g++-64, specs/tru64-cxx, specs/tru64-g++, specs
+-	/unixware-cc, specs/unixware-g++, specs/win32-borland,
+-	specs/win32-g++, specs/win32-icc, specs/win32-msvc,
+-	specs/win32-msvc.net, specs/win32-msvc2005, specs/win32-watcom:
+-	Initial import of sip from CVS
+-	[1fd77e66a56d]
+diff -Nurd '--exclude=doc' '--exclude=.hg*' ./sip-4.19.12.orig/configure.py sip/configure.py
 --- ./sip-4.19.12.orig/configure.py	2018-07-05 05:55:19.000000000 -0400
-+++ sip-4.19.12/configure.py	2018-09-07 16:41:18.102569271 -0400
-@@ -949,10 +949,10 @@
++++ sip/configure.py	2018-09-18 18:12:23.643053242 -0400
+@@ -30,8 +30,8 @@
+ 
+ 
+ # Initialise the globals.
+-sip_version = 0x04130c
+-sip_version_str = "4.19.12"
++sip_version = 0x04ffff
++sip_version_str = "4.255.255"
+ py_version = sys.hexversion >> 8
+ py_platform = sys.platform
+ plat_py_site_dir = None
+@@ -46,6 +46,7 @@
+ sip_inc_dir = ''
+ sip_root_dir = ''
+ sip_module_dir = ''
++sip_module_dest_dir = ''
+ sip_sip_dir = ''
+ pyi_dir = ''
+ sysroot = ''
+@@ -185,7 +186,7 @@
+         siputils.inform("The sip.h header file will be installed in %s." % sip_inc_dir)
+ 
+     if not opts.no_module:
+-        siputils.inform("The %s module will be installed in %s." % (sip_module_name, sip_module_dir))
++        siputils.inform("The %s module will be installed in %s." % (sip_module_name, sip_module_dest_dir))
+ 
+     if opts.pyi:
+         siputils.inform("The sip.pyi stub file will be installed in %s." % pyi_dir)
+@@ -302,30 +303,35 @@
+     cfg.set_build_macros(macros)
+ 
+     all_installs = []
+-    installs = []
++    top_installs = []
++    gen_installs = []
+     subdirs = []
+ 
+     if not opts.no_tools:
+         subdirs.append('sipgen')
+-        installs.append(
++        top_installs.append(
+                 (["sipconfig.py", os.path.join(src_dir, "sipdistutils.py")],
+                         cfg.sip_root_dir))
++        gen_installs.append(
++                (os.path.join(src_dir, "siplib", "sip.h"), cfg.sip_inc_dir))
+ 
+     if not opts.no_module:
+         subdirs.append('siplib')
+ 
+-    all_installs += installs
++    all_installs.extend(top_installs)
++    all_installs.extend(gen_installs)
+ 
+     # The command to run to generate the dist-info directory.
+     mk_distinfo = os.path.join(os.path.dirname(os.path.abspath(__file__)),
+                 'mk_distinfo.py')
+-    distinfo_dir = os.path.join(cfg.sip_root_dir,
++    distinfo_dir = os.path.join(cfg.sip_module_dir,
+             '%s-%s.dist-info' % (sip_module_name.replace('.', '_'),
+                     sip_version_str))
+-    run_mk_distinfo = '%s %s "$(DESTDIR)" %s installed.txt' % (sys.executable,
+-            mk_distinfo, distinfo_dir)
+ 
+     if opts.use_qmake:
++        run_mk_distinfo = '%s %s \\\"$(INSTALL_ROOT)\\\" %s installed.txt' % (
++                sys.executable, mk_distinfo, distinfo_dir)
++
+         sipconfig.inform("Creating top level .pro file...")
+ 
+         pro = open("sip.pro", "w")
+@@ -333,8 +339,9 @@
+         pro.write("TEMPLATE = subdirs\n")
+         pro.write("SUBDIRS = %s\n" % " ".join(subdirs))
+ 
+-        if installs:
+-            files, path = installs
++        if top_installs:
++            # There will only be one element.
++            files, path = top_installs[0]
+             pro.write("\n")
+             pro.write("build_system.files = %s\n" % " ".join(files))
+             pro.write("build_system.path = %s\n" % quote(path))
+@@ -343,22 +350,25 @@
+         if opts.distinfo:
+             pro.write("\n")
+             pro.write("distinfo.extra = %s\n" % run_mk_distinfo)
+-            pro.write("distinfo.path = %s\n" % quote(cfg.sip_root_dir))
++            pro.write("distinfo.path = %s\n" % quote(cfg.sip_module_dir))
+             pro.write("INSTALLS += distinfo\n")
+ 
+         pro.close()
+     else:
++        run_mk_distinfo = '%s %s "$(DESTDIR)" %s installed.txt' % (
++                sys.executable, mk_distinfo, distinfo_dir)
++
+         sipconfig.inform("Creating top level Makefile...")
+ 
+         # Note that mk_distinfo.py won't exist if we are building from the
+         # repository.
+         if opts.distinfo and os.path.isfile(mk_distinfo):
+-            installs.append((run_mk_distinfo, None))
++            top_installs.append((run_mk_distinfo, None))
+ 
+         sipconfig.ParentMakefile(
+             configuration=cfg,
+             subdirs=subdirs,
+-            installs=installs
++            installs=top_installs
+         ).generate()
+ 
+     if opts.use_qmake:
+@@ -390,6 +400,14 @@
+         pro.write("HEADERS = %s\n" % " ".join(
+                 [qmake_quote(h) for h in headers]))
+ 
++        if gen_installs:
++            # There will only be one element.
++            files, path = gen_installs[0]
++            pro.write("\n")
++            pro.write("sip_h.files = %s\n" % " ".join(files))
++            pro.write("sip_h.path = %s\n" % quote(path))
++            pro.write("INSTALLS += sip_h\n")
++
+         pro.close()
+     else:
+         sipconfig.inform("Creating sip code generator Makefile...")
+@@ -399,6 +417,7 @@
+             build_file=os.path.join(src_dir, "sipgen", "sipgen.sbf"),
+             dir="sipgen",
+             install_dir=os.path.dirname(cfg.sip_bin),
++            installs=gen_installs,
+             console=1,
+             warnings=1,
+             universal=opts.universal,
+@@ -406,7 +425,7 @@
+             deployment_target=opts.deployment_target
+         ).generate()
+ 
+-    # The code generator installs.
++    # The implied code generator installs.
+     if not opts.no_tools:
+         sip_dir, sip_exe = os.path.split(cfg.sip_bin)
+         if sys.platform == 'win32':
+@@ -417,18 +436,18 @@
+     # The module installs.
+     module_installs=[]
+ 
+-    if not opts.no_tools:
+-        module_installs.append(
+-                (os.path.join(src_dir, "siplib", "sip.h"), cfg.sip_inc_dir))
+-
+     if opts.pyi:
+         module_installs.append((os.path.join(src_dir, 'sip.pyi'), pyi_dir))
+ 
+     all_installs.extend(module_installs)
+ 
+     if not opts.no_module:
+-        mod_ext = '.pyd' if sys.platform == 'win32' else '.so'
+-        all_installs.append(('sip' + mod_ext, cfg.sip_module_dir))
++        if sys.platform == 'win32':
++            mod = 'sip.lib' if opts.static else 'sip.pyd'
++        else:
++            mod = 'libsip.a' if opts.static else 'sip.so'
++
++        all_installs.append((mod, sip_module_dest_dir))
+ 
+     if opts.use_qmake:
+         sipconfig.inform("Creating sip module .pro file...")
+@@ -453,7 +472,11 @@
+ 
+         if sip_module_name != 'sip':
+             pro.write("\n")
+-            pro.write('DEFINES += SIP_MODULE_NAME=\\\\\\"%s\\\\\\"\n' % sip_module_name)
++            pro.write('DEFINES += SIP_MODULE_NAME=%s\n' % sip_module_name)
++
++            base_name = sip_module_name.split('.')[-1]
++            if base_name != 'sip':
++                pro.write('DEFINES += SIP_MODULE_BASENAME=%s\n' % base_name)
+ 
+         if not opts.static:
+             # These only need to be correct for Windows.
+@@ -485,7 +508,7 @@
+ """ % (debug_suffix, link_lib_dir))
+ 
+         pro.write("\n")
+-        pro.write("target.path = %s\n" % cfg.sip_module_dir)
++        pro.write("target.path = %s\n" % sip_module_dest_dir)
+         pro.write("INSTALLS += target\n")
+ 
+         if opts.pyi:
+@@ -494,12 +517,6 @@
+             pro.write("sip_pyi.path = %s\n" % pyi_dir)
+             pro.write("INSTALLS += sip_pyi\n")
+ 
+-        if not opts.no_tools:
+-            pro.write("\n")
+-            pro.write("sip_h.files = sip.h\n")
+-            pro.write("sip_h.path = %s\n" % cfg.sip_inc_dir)
+-            pro.write("INSTALLS += sip_h\n")
+-
+         c_sources = get_sources("siplib", "*.c")
+         cpp_sources = get_sources("siplib", "*.cpp")
+         pro.write("\n")
+@@ -521,7 +538,7 @@
+             configuration=cfg,
+             build_file=os.path.join(src_dir, "siplib", "siplib.sbf"),
+             dir="siplib",
+-            install_dir=cfg.sip_module_dir,
++            install_dir=sip_module_dest_dir,
+             installs=module_installs,
+             console=1,
+             warnings=1,
+@@ -533,8 +550,11 @@
+         )
+ 
+         if sip_module_name != 'sip':
+-            makefile.DEFINES.append(
+-                    'SIP_MODULE_NAME=\\"%s\\"' % sip_module_name)
++            makefile.DEFINES.append('SIP_MODULE_NAME=%s' % sip_module_name)
++
++            base_name = sip_module_name.split('.')[-1]
++            if base_name != 'sip':
++                makefile.DEFINES.append('SIP_MODULE_BASENAME=%s' % base_name)
+ 
+         if src_dir != build_dir:
+             src_siplib_dir = os.path.join(src_dir, "siplib")
+@@ -908,7 +928,7 @@
+     global plat_bin_dir, plat_py_conf_inc_dir, plat_py_inc_dir
+     global plat_py_lib_dir, plat_py_site_dir, plat_sip_dir
+     global sip_bin_dir, sip_inc_dir, sip_root_dir, sip_module_dir, sip_sip_dir
+-    global pyi_dir
++    global sip_module_dest_dir, sip_module_name, pyi_dir
+ 
+     # Set defaults.
+     sip_bin_dir = plat_bin_dir
+@@ -941,7 +961,9 @@
+     if opts.destdir is not None:
+         sip_root_dir = opts.destdir
+ 
+-    global sip_module_name
++    # The module directory might have been set in a configuration file.
++    if not sip_module_dir:
++        sip_module_dir = sip_root_dir
+ 
+     sip_module_name = opts.sip_module
+ 
+@@ -949,10 +971,10 @@
  
      if len(module_path) > 1:
          del module_path[-1]
 -        module_path.insert(0, sip_root_dir)
+-        sip_module_dir = os.path.join(*module_path)
 +        module_path.insert(0, sip_module_dir)
-         sip_module_dir = os.path.join(*module_path)
++        sip_module_dest_dir = os.path.join(*module_path)
      else:
 -        sip_module_dir = sip_root_dir
-+        sip_module_dir = sip_module_dir
++        sip_module_dest_dir = sip_module_dir
  
      # Override from the command line.
      if opts.platform is not None:
+@@ -970,7 +992,7 @@
+     if opts.pyidir is not None:
+         pyi_dir = opts.pyidir
+     else:
+-        pyi_dir = sip_module_dir
++        pyi_dir = sip_module_dest_dir
+ 
+     # Get the platform specific macros for building.
+     macros = siputils.parse_build_macros(
+diff -Nurd '--exclude=doc' '--exclude=.hg*' ./sip-4.19.12.orig/configure.py.in sip/configure.py.in
+--- ./sip-4.19.12.orig/configure.py.in	1969-12-31 19:00:00.000000000 -0500
++++ sip/configure.py.in	2018-09-18 18:00:57.923048048 -0400
+@@ -0,0 +1,1031 @@
++# This script handles the SIP configuration and generates the Makefiles.
++#
++# Copyright (c) 2018 Riverbank Computing Limited <info at riverbankcomputing.com>
++#
++# This file is part of SIP.
++#
++# This copy of SIP is licensed for use under the terms of the SIP License
++# Agreement.  See the file LICENSE for more details.
++#
++# This copy of SIP may also used under the terms of the GNU General Public
++# License v2 or v3 as published by the Free Software Foundation which can be
++# found in the files LICENSE-GPL2 and LICENSE-GPL3 included in this package.
++#
++# SIP is supplied WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
++
++
++import sys
++import os
++import glob
++import optparse
++from distutils import sysconfig
++
++try:
++    from importlib import invalidate_caches
++except ImportError:
++    invalidate_caches = lambda: None
++
++import siputils
++
++
++# Initialise the globals.
++sip_version = 0x at RM_HEXVERSION@
++sip_version_str = "@RM_RELEASE@"
++py_version = sys.hexversion >> 8
++py_platform = sys.platform
++plat_py_site_dir = None
++plat_py_inc_dir = None
++plat_py_venv_inc_dir = None
++plat_py_conf_inc_dir = None
++plat_py_lib_dir = None
++plat_sip_dir = None
++plat_bin_dir = None
++platform_specs = []
++sip_bin_dir = ''
++sip_inc_dir = ''
++sip_root_dir = ''
++sip_module_dir = ''
++sip_module_dest_dir = ''
++sip_sip_dir = ''
++pyi_dir = ''
++sysroot = ''
++src_dir = os.path.dirname(os.path.abspath(__file__))
++sip_module_name = None
++build_platform = None
++
++# Constants.
++DEFAULT_MACOSX_ARCH = 'i386 ppc'
++MACOSX_SDK_DIRS = ('/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs', '/Developer/SDKs')
++
++# The names of build macros extracted from the platform specific configuration
++# files.
++build_macro_names = [
++    "DEFINES", "CONFIG",
++    "CC",
++    "CFLAGS",
++    "CFLAGS_RELEASE", "CFLAGS_DEBUG",
++    "CFLAGS_CONSOLE", "CFLAGS_SHLIB", "CFLAGS_APP", "CFLAGS_THREAD",
++    "CFLAGS_MT", "CFLAGS_MT_DBG", "CFLAGS_MT_DLL", "CFLAGS_MT_DLLDBG",
++    "CFLAGS_EXCEPTIONS_ON", "CFLAGS_EXCEPTIONS_OFF",
++    "CFLAGS_RTTI_ON", "CFLAGS_RTTI_OFF",
++    "CFLAGS_STL_ON", "CFLAGS_STL_OFF",
++    "CFLAGS_WARN_ON", "CFLAGS_WARN_OFF",
++    "CHK_DIR_EXISTS", "COPY",
++    "CXX",
++    "CXXFLAGS",
++    "CXXFLAGS_RELEASE", "CXXFLAGS_DEBUG",
++    "CXXFLAGS_CONSOLE", "CXXFLAGS_SHLIB", "CXXFLAGS_APP", "CXXFLAGS_THREAD",
++    "CXXFLAGS_MT", "CXXFLAGS_MT_DBG", "CXXFLAGS_MT_DLL", "CXXFLAGS_MT_DLLDBG",
++    "CXXFLAGS_EXCEPTIONS_ON", "CXXFLAGS_EXCEPTIONS_OFF",
++    "CXXFLAGS_RTTI_ON", "CXXFLAGS_RTTI_OFF",
++    "CXXFLAGS_STL_ON", "CXXFLAGS_STL_OFF",
++    "CXXFLAGS_WARN_ON", "CXXFLAGS_WARN_OFF",
++    "DEL_FILE",
++    "EXTENSION_SHLIB", "EXTENSION_PLUGIN",
++    "INCDIR", "INCDIR_X11", "INCDIR_OPENGL",
++    "LIBS_CORE", "LIBS_GUI", "LIBS_NETWORK", "LIBS_OPENGL", "LIBS_WEBKIT",
++    "LINK", "LINK_SHLIB", "AIX_SHLIB", "LINK_SHLIB_CMD",
++    "LFLAGS", "LFLAGS_CONSOLE", "LFLAGS_CONSOLE_DLL", "LFLAGS_DEBUG",
++    "LFLAGS_DLL",
++    "LFLAGS_PLUGIN", "LFLAGS_RELEASE", "LFLAGS_SHLIB", "LFLAGS_SONAME",
++    "LFLAGS_THREAD", "LFLAGS_WINDOWS", "LFLAGS_WINDOWS_DLL", "LFLAGS_OPENGL",
++    "LIBDIR", "LIBDIR_X11", "LIBDIR_OPENGL",
++    "LIBS", "LIBS_CONSOLE", "LIBS_RT",
++    "LIBS_RTMT", "LIBS_THREAD", "LIBS_WINDOWS", "LIBS_X11",
++    "MAKEFILE_GENERATOR",
++    "MKDIR",
++    "RPATH", "LFLAGS_RPATH",
++    "AR", "RANLIB", "LIB", "STRIP"
++]
++
++
++def show_platforms():
++    """Display the different platform/compilers.
++    """
++    sys.stdout.write("""
++The following platform/compiler configurations are supported:
++
++""")
++
++    platform_specs.sort()
++    sys.stdout.write(siputils.format(", ".join(platform_specs), leftmargin=2))
++    sys.stdout.write("\n\n")
++
++
++def show_macros():
++    """Display the different build macros.
++    """
++    sys.stdout.write("""
++The following options may be used to adjust the compiler configuration:
++
++""")
++
++    build_macro_names.sort()
++    sys.stdout.write(siputils.format(", ".join(build_macro_names), leftmargin=2))
++    sys.stdout.write("\n\n")
++
++
++def set_build_platform():
++    """ Initialise the build platform. """
++
++    global build_platform
++
++    # Set the platform specific default specification.
++    platdefaults = {
++        "aix":          "aix-xlc",
++        "bsd":          "bsdi-g++",
++        "cygwin":       "cygwin-g++",
++        "darwin":       "macx-g++",
++        "dgux":         "dgux-g++",
++        "freebsd":      "freebsd-g++",
++        "gnu":          "hurd-g++",
++        "hp-ux":        "hpux-acc",
++        "irix":         "irix-cc",
++        "linux":        "linux-g++",
++        "lynxos":       "lynxos-g++",
++        "netbsd":       "netbsd-g++",
++        "openbsd":      "openbsd-g++",
++        "openunix":     "unixware-cc",
++        "osf1":         "tru64-cxx",
++        "qnx":          "qnx-g++",
++        "reliantunix":  "reliant-cds",
++        "sco_sv":       "sco-cc",
++        "sinix":        "reliant-cds",
++        "sunos5":       "solaris-cc",
++        "ultrix":       "ultrix-g++",
++        "unix_sv":      "unixware-g++",
++        "unixware":     "unixware-cc"
++    }
++
++    build_platform = "none"
++
++    if py_platform == "win32":
++        if py_version >= 0x030500:
++            build_platform = "win32-msvc2015"
++        elif py_version >= 0x030300:
++            build_platform = "win32-msvc2010"
++        elif py_version >= 0x020600:
++            build_platform = "win32-msvc2008"
++        elif py_version >= 0x020400:
++            build_platform = "win32-msvc.net"
++        else:
++            build_platform = "win32-msvc"
++    else:
++        for pd in list(platdefaults.keys()):
++            if py_platform[:len(pd)] == pd:
++                build_platform = platdefaults[pd]
++                break
++
++
++def inform_user():
++    """ Tell the user the option values that are going to be used. """
++
++    if not opts.no_tools:
++        siputils.inform("The SIP code generator will be installed in %s." % sip_bin_dir)
++        siputils.inform("The sip.h header file will be installed in %s." % sip_inc_dir)
++
++    if not opts.no_module:
++        siputils.inform("The %s module will be installed in %s." % (sip_module_name, sip_module_dest_dir))
++
++    if opts.pyi:
++        siputils.inform("The sip.pyi stub file will be installed in %s." % pyi_dir)
++
++    if opts.static:
++        siputils.inform("The %s module will be built as a static library." % sip_module_name)
++
++    siputils.inform("The default directory to install .sip files in is %s." % sip_sip_dir)
++
++    if opts.use_qmake is None:
++        siputils.inform("The platform/compiler configuration is %s." % build_platform)
++
++    if opts.arch:
++        siputils.inform("MacOS/X binaries will be created for %s." % (", ".join(opts.arch.split())))
++
++    if opts.universal:
++        siputils.inform("MacOS/X universal binaries will be created using %s." % opts.universal)
++
++    if opts.deployment_target:
++        siputils.inform("MacOS/X deployment target is %s." % opts.deployment_target)
++
++
++def set_platform_directories():
++    """ Initialise the global variables relating to platform-specific
++    directories.
++    """
++    global plat_py_site_dir, plat_py_inc_dir, plat_py_venv_inc_dir
++    global plat_py_conf_inc_dir, plat_bin_dir, plat_py_lib_dir, plat_sip_dir
++
++    # We trust distutils for some stuff.
++    plat_py_site_dir = sysconfig.get_python_lib(plat_specific=1)
++    plat_py_inc_dir = sysconfig.get_python_inc()
++    plat_py_venv_inc_dir = sysconfig.get_python_inc(prefix=sys.prefix)
++    plat_py_conf_inc_dir = os.path.dirname(sysconfig.get_config_h_filename())
++
++    if sys.platform == "win32":
++        bin_dir = sys.exec_prefix
++
++        try:
++            # Python v3.3 and later.
++            base_prefix = sys.base_prefix
++
++            if sys.exec_prefix != sys.base_exec_prefix:
++                bin_dir += '\\Scripts'
++
++        except AttributeError:
++            try:
++                # virtualenv for Python v2.
++                base_prefix = sys.real_prefix
++                bin_dir += '\\Scripts'
++
++            except AttributeError:
++                # We can't detect the base prefix in Python v3 prior to v3.3.
++                base_prefix = sys.prefix
++
++        plat_py_lib_dir = base_prefix + "\\libs"
++        plat_bin_dir = bin_dir
++        plat_sip_dir = sys.prefix + "\\sip"
++    else:
++        lib_dir = sysconfig.get_python_lib(plat_specific=1, standard_lib=1)
++
++        plat_py_lib_dir = lib_dir + "/config"
++        plat_bin_dir = sys.exec_prefix + "/bin"
++        plat_sip_dir = sys.prefix + "/share/sip"
++
++
++def create_config(module, template, macros):
++    """Create the SIP configuration module so that it can be imported by build
++    scripts.
++
++    module is the module file name.
++    template is the template file name.
++    macros is the dictionary of build macros.
++    """
++    siputils.inform("Creating %s..." % module)
++
++    content = {
++        "sip_config_args":  sys.argv[1:],
++        "sip_version":      sip_version,
++        "sip_version_str":  sip_version_str,
++        "platform":         build_platform,
++        "sip_bin":          os.path.join(sip_bin_dir, "sip"),
++        "sip_inc_dir":      sip_inc_dir,
++        "sip_root_dir":     sip_root_dir,
++        "sip_module_dir":   sip_module_dir,
++        "default_bin_dir":  plat_bin_dir,
++        "default_mod_dir":  plat_py_site_dir,
++        "default_sip_dir":  sip_sip_dir,
++        "py_version":       py_version,
++        "py_inc_dir":       plat_py_inc_dir,
++        "py_conf_inc_dir":  plat_py_conf_inc_dir,
++        "py_lib_dir":       plat_py_lib_dir,
++        "universal":        opts.universal,
++        "arch":             opts.arch,
++        "deployment_target":    opts.deployment_target,
++        "qt_framework":     0
++    }
++
++    siputils.create_config_module(module, template, content, macros)
++
++
++def create_makefiles(macros):
++    """Create the Makefiles.
++
++    macros is the dictionary of platform specific build macros.
++    """
++    # Bootstrap.  Make sure we get the right one.
++    sys.path.insert(0, os.path.curdir)
++    invalidate_caches()
++    import sipconfig
++
++    cfg = sipconfig.Configuration()
++
++    cfg.set_build_macros(macros)
++
++    all_installs = []
++    top_installs = []
++    gen_installs = []
++    subdirs = []
++
++    if not opts.no_tools:
++        subdirs.append('sipgen')
++        top_installs.append(
++                (["sipconfig.py", os.path.join(src_dir, "sipdistutils.py")],
++                        cfg.sip_root_dir))
++        gen_installs.append(
++                (os.path.join(src_dir, "siplib", "sip.h"), cfg.sip_inc_dir))
++
++    if not opts.no_module:
++        subdirs.append('siplib')
++
++    all_installs.extend(top_installs)
++    all_installs.extend(gen_installs)
++
++    # The command to run to generate the dist-info directory.
++    mk_distinfo = os.path.join(os.path.dirname(os.path.abspath(__file__)),
++                'mk_distinfo.py')
++    distinfo_dir = os.path.join(cfg.sip_module_dir,
++            '%s-%s.dist-info' % (sip_module_name.replace('.', '_'),
++                    sip_version_str))
++
++    if opts.use_qmake:
++        run_mk_distinfo = '%s %s \\\"$(INSTALL_ROOT)\\\" %s installed.txt' % (
++                sys.executable, mk_distinfo, distinfo_dir)
++
++        sipconfig.inform("Creating top level .pro file...")
++
++        pro = open("sip.pro", "w")
++
++        pro.write("TEMPLATE = subdirs\n")
++        pro.write("SUBDIRS = %s\n" % " ".join(subdirs))
++
++        if top_installs:
++            # There will only be one element.
++            files, path = top_installs[0]
++            pro.write("\n")
++            pro.write("build_system.files = %s\n" % " ".join(files))
++            pro.write("build_system.path = %s\n" % quote(path))
++            pro.write("INSTALLS += build_system\n")
++
++        if opts.distinfo:
++            pro.write("\n")
++            pro.write("distinfo.extra = %s\n" % run_mk_distinfo)
++            pro.write("distinfo.path = %s\n" % quote(cfg.sip_module_dir))
++            pro.write("INSTALLS += distinfo\n")
++
++        pro.close()
++    else:
++        run_mk_distinfo = '%s %s "$(DESTDIR)" %s installed.txt' % (
++                sys.executable, mk_distinfo, distinfo_dir)
++
++        sipconfig.inform("Creating top level Makefile...")
++
++        # Note that mk_distinfo.py won't exist if we are building from the
++        # repository.
++        if opts.distinfo and os.path.isfile(mk_distinfo):
++            top_installs.append((run_mk_distinfo, None))
++
++        sipconfig.ParentMakefile(
++            configuration=cfg,
++            subdirs=subdirs,
++            installs=top_installs
++        ).generate()
++
++    if opts.use_qmake:
++        sipconfig.inform("Creating sip code generator .pro file...")
++
++        pro = open(os.path.join("sipgen", "sipgen.pro"), "w")
++
++        pro.write("TEMPLATE = app\n")
++        pro.write("TARGET = sip\n")
++        pro.write("CONFIG -= qt app_bundle\n")
++        pro.write("CONFIG += warn_on exceptions_off console %s\n" % (
++                ("debug" if opts.debug else "release")))
++
++        pro.write("\n")
++        pro.write("# Work around QTBUG-39300.\n")
++        pro.write("CONFIG -= android_install\n")
++
++        pro.write("\n")
++        pro.write("target.path = %s\n" % os.path.dirname(cfg.sip_bin))
++        pro.write("INSTALLS += target\n")
++
++        c_sources = get_sources("sipgen", "*.c")
++        pro.write("\n")
++        pro.write("SOURCES = %s\n" % " ".join(
++                [qmake_quote(s) for s in c_sources]))
++
++        headers = get_sources("sipgen", "*.h")
++        pro.write("\n")
++        pro.write("HEADERS = %s\n" % " ".join(
++                [qmake_quote(h) for h in headers]))
++
++        if gen_installs:
++            # There will only be one element.
++            files, path = gen_installs[0]
++            pro.write("\n")
++            pro.write("sip_h.files = %s\n" % " ".join(files))
++            pro.write("sip_h.path = %s\n" % quote(path))
++            pro.write("INSTALLS += sip_h\n")
++
++        pro.close()
++    else:
++        sipconfig.inform("Creating sip code generator Makefile...")
++
++        sipconfig.ProgramMakefile(
++            configuration=cfg,
++            build_file=os.path.join(src_dir, "sipgen", "sipgen.sbf"),
++            dir="sipgen",
++            install_dir=os.path.dirname(cfg.sip_bin),
++            installs=gen_installs,
++            console=1,
++            warnings=1,
++            universal=opts.universal,
++            arch=opts.arch,
++            deployment_target=opts.deployment_target
++        ).generate()
++
++    # The implied code generator installs.
++    if not opts.no_tools:
++        sip_dir, sip_exe = os.path.split(cfg.sip_bin)
++        if sys.platform == 'win32':
++            sip_exe += '.exe'
++
++        all_installs.append((sip_exe, sip_dir))
++
++    # The module installs.
++    module_installs=[]
++
++    if opts.pyi:
++        module_installs.append((os.path.join(src_dir, 'sip.pyi'), pyi_dir))
++
++    all_installs.extend(module_installs)
++
++    if not opts.no_module:
++        if sys.platform == 'win32':
++            mod = 'sip.lib' if opts.static else 'sip.pyd'
++        else:
++            mod = 'libsip.a' if opts.static else 'sip.so'
++
++        all_installs.append((mod, sip_module_dest_dir))
++
++    if opts.use_qmake:
++        sipconfig.inform("Creating sip module .pro file...")
++
++        pro = open(os.path.join("siplib", "siplib.pro"), "w")
++
++        pro.write("TEMPLATE = lib\n")
++        pro.write("TARGET = sip\n")
++        pro.write("CONFIG -= qt\n")
++        pro.write("CONFIG += warn_on exceptions_off %s %s\n" % (
++                ("staticlib" if opts.static else "plugin plugin_bundle"),
++                ("debug" if opts.debug else "release")))
++
++        pro.write("\n")
++        pro.write("# Work around QTBUG-39300.\n")
++        pro.write("CONFIG -= android_install\n")
++
++        pro.write("\n")
++        pro.write("INCLUDEPATH += %s\n" % cfg.py_inc_dir)
++        if cfg.py_conf_inc_dir != cfg.py_inc_dir:
++            pro.write("INCLUDEPATH += %s\n" % cfg.py_conf_inc_dir)
++
++        if sip_module_name != 'sip':
++            pro.write("\n")
++            pro.write('DEFINES += SIP_MODULE_NAME=%s\n' % sip_module_name)
++
++            base_name = sip_module_name.split('.')[-1]
++            if base_name != 'sip':
++                pro.write('DEFINES += SIP_MODULE_BASENAME=%s\n' % base_name)
++
++        if not opts.static:
++            # These only need to be correct for Windows.
++            debug_suffix = "_d" if opts.debug else ""
++            link_lib_dir = quote("-L" + cfg.py_lib_dir)
++
++            pro.write("""
++win32 {
++    PY_MODULE = sip%s.pyd
++    PY_MODULE_SRC = $(DESTDIR_TARGET)
++
++    LIBS += %s
++} else {
++    PY_MODULE = sip.so
++
++    macx {
++        PY_MODULE_SRC = $(TARGET).plugin/Contents/MacOS/$(TARGET)
++
++        QMAKE_LFLAGS += "-undefined dynamic_lookup"
++    } else {
++        PY_MODULE_SRC = $(TARGET)
++    }
++}
++
++QMAKE_POST_LINK = $(COPY_FILE) $$PY_MODULE_SRC $$PY_MODULE
++
++target.CONFIG = no_check_exist
++target.files = $$PY_MODULE
++""" % (debug_suffix, link_lib_dir))
++
++        pro.write("\n")
++        pro.write("target.path = %s\n" % sip_module_dest_dir)
++        pro.write("INSTALLS += target\n")
++
++        if opts.pyi:
++            pro.write("\n")
++            pro.write("sip_pyi.files = sip.pyi\n")
++            pro.write("sip_pyi.path = %s\n" % pyi_dir)
++            pro.write("INSTALLS += sip_pyi\n")
++
++        c_sources = get_sources("siplib", "*.c")
++        cpp_sources = get_sources("siplib", "*.cpp")
++        pro.write("\n")
++        pro.write("SOURCES = %s\n" % " ".join(
++                [qmake_quote(s) for s in c_sources + cpp_sources]))
++
++        headers = get_sources("siplib", "*.h")
++        pro.write("\n")
++        pro.write("HEADERS = %s\n" % " ".join(
++                [qmake_quote(h) for h in headers]))
++
++        pro.close()
++    else:
++        sipconfig.inform("Creating sip module Makefile...")
++
++        build_dir = os.getcwd()
++
++        makefile = sipconfig.ModuleMakefile(
++            configuration=cfg,
++            build_file=os.path.join(src_dir, "siplib", "siplib.sbf"),
++            dir="siplib",
++            install_dir=sip_module_dest_dir,
++            installs=module_installs,
++            console=1,
++            warnings=1,
++            static=opts.static,
++            debug=opts.debug,
++            universal=opts.universal,
++            arch=opts.arch,
++            deployment_target=opts.deployment_target
++        )
++
++        if sip_module_name != 'sip':
++            makefile.DEFINES.append('SIP_MODULE_NAME=%s' % sip_module_name)
++
++            base_name = sip_module_name.split('.')[-1]
++            if base_name != 'sip':
++                makefile.DEFINES.append('SIP_MODULE_BASENAME=%s' % base_name)
++
++        if src_dir != build_dir:
++            src_siplib_dir = os.path.join(src_dir, "siplib")
++            makefile.extra_include_dirs.append(src_siplib_dir)
++            makefile.extra_source_dirs.append(src_siplib_dir)
++
++        makefile.generate()
++
++    # Create the file containing all installed files.
++    if opts.distinfo:
++        installed = open('installed.txt', 'w')
++
++        for sources, dst in all_installs:
++            if not isinstance(sources, (list, tuple)):
++                sources = [sources]
++
++            for src in sources:
++                installed.write(
++                        os.path.join(dst, os.path.basename(src)) + '\n')
++
++        installed.close()
++
++
++def get_sources(sources_dir, ext):
++    """ Get the quoted files with the specified extension from a directory. """
++
++    return [quote(f) for f in glob.glob(os.path.join(src_dir, sources_dir, ext))]
++
++
++def quote(path):
++    """ Return a path that is quoted if necessary. """
++
++    if ' ' in path:
++        path = '"' + path + '"'
++
++    return path
++
++
++def qmake_quote(path):
++    """ Return a path quoted for qmake if it contains spaces.  path is the
++    path.
++    """
++
++    if ' ' in path:
++        path = '$$quote(%s)' % path
++
++    return path
++
++
++# Look out for recursive definitions.
++_extrapolating = []
++
++def _get_configuration_value(config, name, default=None):
++    """ Get a configuration value while extrapolating. """
++
++    value = config.get(name)
++    if value is None:
++        if default is None:
++            siputils.error("Configuration file references non-existent name '%s'." % name)
++
++        return default
++
++    parts = value.split('%(', 1)
++    while len(parts) == 2:
++        prefix, tail = parts
++
++        parts = tail.split(')', 1)
++        if len(parts) != 2:
++            siputils.error("Configuration file contains unterminated extrapolated name '%s'." % tail)
++
++        xtra_name, suffix = parts
++
++        if xtra_name in _extrapolating:
++            siputils.error("Configuration file contains a recursive reference to '%s'." % xtra_name)
++
++        _extrapolating.append(xtra_name)
++        xtra_value = _get_configuration_value(config, xtra_name)
++        _extrapolating.pop()
++
++        value = prefix + xtra_value + suffix
++
++        parts = value.split('%(', 1)
++
++    return value
++
++
++def update_from_configuration_file(config_file):
++    """ Update a number of globals from values read from a configuration file.
++    """
++
++    siputils.inform("Reading configuration from %s..." % config_file)
++
++    config = {}
++
++    # Read the file into the dict.
++    cfg = open(config_file)
++    line_nr = 0
++
++    for l in cfg:
++        line_nr += 1
++
++        # Strip comments and blank lines.
++        l = l.split('#')[0].strip()
++        if l == '':
++            continue
++
++        parts = l.split('=', 1)
++        if len(parts) == 2:
++            name = parts[0].strip()
++            value = parts[1].strip()
++        else:
++            name = value = ''
++
++        if name == '' or value == '':
++            siputils.error("%s:%d: Invalid line." % (config_file, line_nr))
++
++        config[name] = value
++        last_name = name
++
++    cfg.close()
++
++    # Enforce the presets.
++    version = siputils.version_to_string(py_version).split('.')
++    config['py_major'] = version[0]
++    config['py_minor'] = version[1]
++    config['sysroot'] = sysroot
++
++    # Override the relevant values.
++    global py_platform, plat_py_conf_inc_dir, plat_py_inc_dir, plat_py_lib_dir
++    global sip_bin_dir, sip_inc_dir, sip_module_dir, sip_sip_dir
++
++    py_platform = _get_configuration_value(config, 'py_platform', py_platform)
++    plat_py_inc_dir = _get_configuration_value(config, 'py_inc_dir',
++            plat_py_inc_dir)
++    plat_py_lib_dir = _get_configuration_value(config, 'py_pylib_dir',
++            plat_py_lib_dir)
++
++    # The pyconfig.h directory defaults to the Python.h directory.
++    plat_py_conf_inc_dir = _get_configuration_value(config, 'py_conf_inc_dir',
++            plat_py_inc_dir)
++
++    sip_bin_dir = _get_configuration_value(config, 'sip_bin_dir', sip_bin_dir)
++    sip_module_dir = _get_configuration_value(config, 'sip_module_dir',
++            sip_module_dir)
++
++    # Note that this defaults to any 'py_inc_dir' specified in the
++    # configuration file.
++    sip_inc_dir = _get_configuration_value(config, 'sip_inc_dir',
++            plat_py_inc_dir)
++
++    # Note that this is only used when creating sipconfig.py.
++    sip_sip_dir = _get_configuration_value(config, 'sip_sip_dir', sip_sip_dir)
++
++
++def create_optparser(sdk_dir):
++    """Create the parser for the command line.
++    """
++    def store_abspath(option, opt_str, value, parser):
++        setattr(parser.values, option.dest, os.path.abspath(value))
++
++    def store_abspath_dir(option, opt_str, value, parser):
++        if not os.path.isdir(value):
++            raise optparse.OptionValueError("'%s' is not a directory" % value)
++        setattr(parser.values, option.dest, os.path.abspath(value))
++
++    def store_abspath_file(option, opt_str, value, parser):
++        if not os.path.isfile(value):
++            raise optparse.OptionValueError("'%s' is not a file" % value)
++        setattr(parser.values, option.dest, os.path.abspath(value))
++
++    def store_version(option, opt_str, value, parser):
++        version = siputils.version_from_string(value)
++        if version is None:
++            raise optparse.OptionValueError(
++                    "'%s' is not a valid version number" % value)
++        setattr(parser.values, option.dest, version)
++
++    p = optparse.OptionParser(usage="python %prog [opts] [macro=value] "
++            "[macro+=value]", version=sip_version_str)
++
++    # Note: we don't use %default to be compatible with Python 2.3.
++    p.add_option("-k", "--static", action="store_true", default=False,
++            dest="static", help="build the SIP module as a static library")
++    p.add_option("-p", "--platform", action="store", type="string",
++            metavar="PLATFORM", dest="platform", help="the platform/compiler "
++                    "configuration [default: %s]" % build_platform)
++    p.add_option("-u", "--debug", action="store_true", default=False,
++            help="build with debugging symbols")
++    p.add_option("--sip-module", action="store", default="sip", type="string",
++            metavar="NAME", dest="sip_module", help="the package.module name "
++            "of the sip module [default: sip]")
++    p.add_option("--configuration", dest='config_file', type='string',
++            action='callback', callback=store_abspath_file, metavar="FILE",
++            help="FILE contains the target configuration")
++    p.add_option("--target-py-version", dest='target_py_version',
++            type='string', action='callback', callback=store_version,
++            metavar="VERSION",
++            help="the major.minor version of the target Python [default: "
++                    "%s]" % siputils.version_to_string(py_version, parts=2))
++    p.add_option("--sysroot", dest='sysroot', type='string', action='callback',
++            callback=store_abspath_dir, metavar="DIR",
++            help="DIR is the target system root directory")
++    p.add_option("--no-module", action="store_true", default=False,
++            dest="no_module", help="disable the installation of the sip "
++            "module [default: enabled]")
++    p.add_option("--no-tools", action="store_true", default=False,
++            dest="no_tools", help="disable the building of the code generator "
++            "and the installation of the build system [default: enabled]")
++    p.add_option("--use-qmake", action="store_true", default=False,
++            dest="use_qmake", help="generate qmake .pro files instead of "
++            "Makefiles")
++
++    if sys.platform == 'darwin':
++        # Get the latest SDK to use as the default.
++        sdks = glob.glob(sdk_dir + '/MacOSX*.sdk')
++        if len(sdks) > 0:
++            sdks.sort()
++            _, default_sdk = os.path.split(sdks[-1])
++        else:
++            default_sdk = 'MacOSX10.4u.sdk'
++
++        g = optparse.OptionGroup(p, title="MacOS X Configuration")
++        g.add_option("--arch", action="append", default=[], dest="arch",
++                choices=["i386", "x86_64", "ppc"],
++                help="build for architecture ARCH")
++        g.add_option("--deployment-target", action="store", default='',
++                metavar="VERSION", dest="deployment_target",
++                help="set the value of the MACOSX_DEPLOYMENT_TARGET "
++                        "environment variable in generated Makefiles")
++        g.add_option("-n", "--universal", action="store_true", default=False,
++                dest="universal",
++                help="build the SIP code generator and module as universal "
++                        "binaries")
++        g.add_option("-s", "--sdk", action="store", default=default_sdk,
++                type="string", metavar="SDK", dest="sdk",
++                help="the name of the SDK used when building universal "
++                        "binaries [default: %s]" % default_sdk)
++        p.add_option_group(g)
++
++    # Querying.
++    g = optparse.OptionGroup(p, title="Query")
++    g.add_option("--show-platforms", action="store_true", default=False,
++            dest="show_platforms", help="show the list of supported "
++            "platform/compiler configurations")
++    g.add_option("--show-build-macros", action="store_true", default=False,
++            dest="show_build_macros", help="show the list of supported build "
++            "macros")
++    p.add_option_group(g)
++
++    # Installation.
++    g = optparse.OptionGroup(p, title="Installation")
++    g.add_option("-b", "--bindir", action="callback", type="string",
++            metavar="DIR", dest="sipbindir", callback=store_abspath,
++            help="where the SIP code generator will be installed [default: "
++                    "%s]" % plat_bin_dir)
++    g.add_option("-d", "--destdir", action="callback", type="string",
++            metavar="DIR", dest="destdir", callback=store_abspath,
++            help="where the SIP module will be installed [default: "
++                    "%s]" % plat_py_site_dir)
++    g.add_option("-e", "--incdir", action="callback", type="string",
++            metavar="DIR", dest="sipincdir", callback=store_abspath,
++            help="where the SIP header file will be installed [default: "
++                    "%s]" % plat_py_venv_inc_dir)
++    g.add_option("-v", "--sipdir", action="callback", type="string",
++            metavar="DIR", dest="sipsipdir", callback=store_abspath,
++            help="where .sip files are normally installed [default: "
++                    "%s]" % plat_sip_dir)
++    g.add_option("--no-dist-info", action="store_false", default=True,
++            dest="distinfo",
++            help="do not install the dist-info directory")
++    g.add_option("--no-stubs", "--no-pyi", action="store_false", default=True,
++            dest="pyi",
++            help="do not install the sip.pyi stub file")
++    g.add_option("--stubsdir", "--pyidir", action="callback", type="string",
++            metavar="DIR", dest="pyidir", callback=store_abspath,
++            help="where the sip.pyi stub file will be installed [default: "
++                    "%s]" % plat_py_site_dir)
++    p.add_option_group(g)
++
++    return p
++
++
++def main(argv):
++    """Create the configuration module module.
++
++    argv is the list of command line arguments.
++    """
++    siputils.inform("This is SIP %s for Python %s on %s." % (sip_version_str, sys.version.split()[0], sys.platform))
++
++    global py_version, build_platform
++
++    if py_version < 0x020300:
++        siputils.error("This version of SIP requires Python v2.3 or later.")
++
++    # Basic initialisation.
++    set_platform_directories()
++    set_build_platform()
++
++    # Build up the list of valid specs.
++    for s in os.listdir(os.path.join(src_dir, "specs")):
++        platform_specs.append(s)
++
++    # Determine the directory containing the default OS/X SDK.
++    if sys.platform == 'darwin':
++        for sdk_dir in MACOSX_SDK_DIRS:
++            if os.path.isdir(sdk_dir):
++                break
++        else:
++            sdk_dir = MACOSX_SDK_DIRS[0]
++    else:
++        sdk_dir = ''
++
++    # Parse the command line.
++    global opts
++
++    p = create_optparser(sdk_dir)
++    opts, args = p.parse_args()
++
++    # Override defaults that affect subsequent configuration.
++    if opts.target_py_version is not None:
++        py_version = opts.target_py_version
++
++    if opts.sysroot is not None:
++        global sysroot
++        sysroot = opts.sysroot
++
++    # Make sure MacOS specific options get initialised.
++    if sys.platform != 'darwin':
++        opts.universal = ''
++        opts.arch = []
++        opts.sdk = ''
++        opts.deployment_target = ''
++
++    # Handle the query options.
++    if opts.show_platforms or opts.show_build_macros:
++        if opts.show_platforms:
++            show_platforms()
++
++        if opts.show_build_macros:
++            show_macros()
++
++        sys.exit()
++
++    # Convert the list 'arch' option to a string.  Multiple architectures
++    # imply a universal binary.
++    if len(opts.arch) > 1:
++        opts.universal = True
++
++    opts.arch = ' '.join(opts.arch)
++
++    # Convert the boolean 'universal' option to a string.
++    if opts.universal:
++        if '/' in opts.sdk:
++            opts.universal = os.path.abspath(opts.sdk)
++        else:
++            opts.universal = sdk_dir + '/' + opts.sdk
++
++        if not os.path.isdir(opts.universal):
++            siputils.error("Unable to find the SDK directory %s. Use the --sdk flag to specify the name of the SDK or its full path." % opts.universal)
++
++        if opts.arch == '':
++            opts.arch = DEFAULT_MACOSX_ARCH
++    else:
++        opts.universal = ''
++
++    # No sip module also implies no stubs.
++    if opts.no_module:
++        opts.pyi = False
++
++    # Apply the overrides from any configuration file.
++    global plat_bin_dir, plat_py_conf_inc_dir, plat_py_inc_dir
++    global plat_py_lib_dir, plat_py_site_dir, plat_sip_dir
++    global sip_bin_dir, sip_inc_dir, sip_root_dir, sip_module_dir, sip_sip_dir
++    global sip_module_dest_dir, sip_module_name, pyi_dir
++
++    # Set defaults.
++    sip_bin_dir = plat_bin_dir
++    sip_inc_dir = plat_py_venv_inc_dir
++    sip_root_dir = plat_py_site_dir
++    sip_sip_dir = plat_sip_dir
++
++    if opts.config_file is not None:
++        update_from_configuration_file(opts.config_file)
++    elif sysroot != '':
++        def apply_sysroot(d):
++            if d.startswith(sys.prefix):
++                d = sysroot + d[len(sys.prefix):]
++
++            return d
++
++        plat_bin_dir = apply_sysroot(plat_bin_dir)
++        plat_py_conf_inc_dir = apply_sysroot(plat_py_conf_inc_dir)
++        plat_py_inc_dir = apply_sysroot(plat_py_inc_dir)
++        plat_py_lib_dir = apply_sysroot(plat_py_lib_dir)
++        plat_py_site_dir = apply_sysroot(plat_py_site_dir)
++        plat_sip_dir = apply_sysroot(plat_sip_dir)
++
++        sip_bin_dir = apply_sysroot(sip_bin_dir)
++        sip_inc_dir = apply_sysroot(sip_inc_dir)
++        sip_root_dir = apply_sysroot(sip_root_dir)
++        sip_sip_dir = apply_sysroot(sip_sip_dir)
++
++    # Fix the name of the sip module.
++    if opts.destdir is not None:
++        sip_root_dir = opts.destdir
++
++    # The module directory might have been set in a configuration file.
++    if not sip_module_dir:
++        sip_module_dir = sip_root_dir
++
++    sip_module_name = opts.sip_module
++
++    module_path = sip_module_name.split(".")
++
++    if len(module_path) > 1:
++        del module_path[-1]
++        module_path.insert(0, sip_module_dir)
++        sip_module_dest_dir = os.path.join(*module_path)
++    else:
++        sip_module_dest_dir = sip_module_dir
++
++    # Override from the command line.
++    if opts.platform is not None:
++        build_platform = opts.platform
++
++    if opts.sipbindir is not None:
++        sip_bin_dir = opts.sipbindir
++
++    if opts.sipincdir is not None:
++        sip_inc_dir = opts.sipincdir
++
++    if opts.sipsipdir is not None:
++        sip_sip_dir = opts.sipsipdir
++
++    if opts.pyidir is not None:
++        pyi_dir = opts.pyidir
++    else:
++        pyi_dir = sip_module_dest_dir
++
++    # Get the platform specific macros for building.
++    macros = siputils.parse_build_macros(
++            os.path.join(src_dir, "specs", build_platform), build_macro_names,
++            args)
++
++    if macros is None:
++        siputils.error("Unsupported macro name specified. Use the --show-build-macros flag to see a list of supported macros.")
++        sys.exit(2)
++
++    # Tell the user what's been found.
++    inform_user()
++
++    # Install the configuration module.
++    create_config("sipconfig.py", os.path.join(src_dir, "siputils.py"),
++            macros)
++
++    # Create the Makefiles.
++    create_makefiles(macros)
++
++
++###############################################################################
++# The script starts here.
++###############################################################################
++
++if __name__ == "__main__":
++    try:
++        main(sys.argv)
++    except SystemExit:
++        raise
++    except:
++        sys.stderr.write(
++"""An internal error occured.  Please report all the output from the program,
++including the following traceback, to support at riverbankcomputing.com.
++""")
++        raise
+diff -Nurd '--exclude=doc' '--exclude=.hg*' ./sip-4.19.12.orig/METADATA.in sip/METADATA.in
+--- ./sip-4.19.12.orig/METADATA.in	1969-12-31 19:00:00.000000000 -0500
++++ sip/METADATA.in	2018-09-18 17:52:23.267544161 -0400
+@@ -0,0 +1,81 @@
++Metadata-Version: 1.1
++Name: PyQt5_sip
++Version: @RB_VERSION@
++Summary: Python extension module support for PyQt5
++Home-page: https://www.riverbankcomputing.com/software/sip/
++Author: Riverbank Computing Limited
++Author-email: info at riverbankcomputing.com
++Platform: UNIX
++Platform: OS X
++Platform: Windows
++Platform: iOS
++Platform: Android
++
++SIP - A Python Extension Module Generator for C and C++ Libraries
++=================================================================
++
++What is SIP?
++------------
++
++One of the features of Python that makes it so powerful is the ability to take
++existing libraries, written in C or C++, and make them available as Python
++extension modules.  Such extension modules are often called bindings for the
++library.
++
++SIP is a tool that makes it very easy to create Python bindings for C and C++
++libraries.  It was originally developed to create PyQt, the Python bindings for
++the Qt toolkit, but can be used to create bindings for any C or C++ library.
++
++SIP comprises a code generator and a Python module. The code generator
++processes a set of specification files and generates C or C++ code which is
++then compiled to create the bindings extension module.  The Python module
++provides support functions to the automatically generated code.  Normally a
++package containing SIP generated bindings includes a private copy of the
++Python module.
++
++The specification files contain a description of the interface of the C or C++
++library, i.e. the classes, methods, functions and variables.  The format of a
++specification file is almost identical to a C or C++ header file, so much so
++that the easiest way of creating a specification file is to edit the
++corresponding header file.
++
++SIP makes it easy to exploit existing C or C++ libraries in a productive
++interpretive programming environment.  SIP also makes it easy to take a Python
++application (maybe a prototype) and selectively implement parts of the
++application (maybe for performance reasons) in C or C++.
++
++
++Author
++------
++
++SIP is copyright (c) Riverbank Computing Limited.  Its homepage is
++https://www.riverbankcomputing.com/software/sip/.
++
++Support may be obtained from the PyQt mailing list at
++https://www.riverbankcomputing.com/mailman/listinfo/pyqt/.
++
++
++License
++-------
++
++SIP is released under the GPL v2, GPL v3 licenses, and under a license similar
++to the BSD license.
++
++
++Installation
++------------
++
++SIP source packages can be dowloaded from
++https://www.riverbankcomputing.com/software/sip/download/.
++
++Wheels containing the private copy of the Python module for PyQt5 for 32 and
++64-bit Windows, 64-bit macOS and 64-bit Linux can be installed from PyPI::
++
++    pip3 install PyQt5_sip
++
++
++Documentation
++-------------
++
++The documentation for the latest release can be found
++`here <http://pyqt.sourceforge.net/Docs/sip4/>`__.
+diff -Nurd '--exclude=doc' '--exclude=.hg*' ./sip-4.19.12.orig/mk_distinfo.py sip/mk_distinfo.py
+--- ./sip-4.19.12.orig/mk_distinfo.py	2018-07-04 12:00:06.000000000 -0400
++++ sip/mk_distinfo.py	1969-12-31 19:00:00.000000000 -0500
+@@ -1,120 +0,0 @@
+-# This script handles the creation of the PEP 376 .dist-info directory for a
+-# package.
+-#
+-# Copyright (c) 2018 Riverbank Computing Limited <info at riverbankcomputing.com>
+-#
+-# This script is distributed under the terms of the GNU General Public License
+-# v3 as published by the Free Software Foundation.
+-#
+-# This script is supplied WITHOUT ANY WARRANTY; without even the implied
+-# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+-
+-
+-import base64
+-import hashlib
+-import os
+-import shutil
+-import sys
+-
+-
+-def error(message):
+-    """ Display an error message and terminate. """
+-
+-    sys.stderr.write(message + '\n')
+-    sys.exit(1)
+-
+-
+-# Parse the command line.
+-if len(sys.argv) != 4:
+-    error("usage: {0} prefix dist-info installed".format(sys.argv[0]))
+-
+-prefix_dir = sys.argv[1]
+-distinfo_dir = sys.argv[2]
+-installed_fn = sys.argv[3]
+-
+-# Read the list of installed files.
+-installed_f = open(installed_fn)
+-installed = installed_f.read().strip().split('\n')
+-installed_f.close()
+-
+-# The prefix directory corresponds to DESTDIR or INSTALL_ROOT.
+-real_distinfo_dir = prefix_dir + distinfo_dir
+-
+-# Remove any existing dist-info directory and create an empty one.
+-if os.path.exists(real_distinfo_dir):
+-    try:
+-        shutil.rmtree(real_distinfo_dir)
+-    except:
+-        error("unable to delete existing {0}".format(real_distinfo_dir))
+-
+-try:
+-    os.mkdir(real_distinfo_dir)
+-except:
+-    error("unable to create {0}".format(real_distinfo_dir))
+-
+-# Create the INSTALLER file.  We pretend that pip was the installer.
+-installer_fn = os.path.join(distinfo_dir, 'INSTALLER')
+-installer_f = open(prefix_dir + installer_fn, 'w')
+-installer_f.write('pip\n')
+-installer_f.close()
+-
+-installed.append(installer_fn)
+-
+-# Create the METADATA file.
+-METADATA = '''Metadata-Version: 1.1
+-Name: {0}
+-Version: {1}
+-'''
+-
+-distinfo_path, distinfo_base = os.path.split(distinfo_dir)
+-pkg_name, version = os.path.splitext(distinfo_base)[0].split('-')
+-
+-metadata_fn = os.path.join(distinfo_dir, 'METADATA')
+-metadata_f = open(prefix_dir + metadata_fn, 'w')
+-metadata_f.write(METADATA.format(pkg_name, version))
+-metadata_f.close()
+-
+-installed.append(metadata_fn)
+-
+-# Create the RECORD file.
+-record_fn = os.path.join(distinfo_dir, 'RECORD')
+-record_f = open(prefix_dir + record_fn, 'w')
+-
+-for name in installed:
+-    native_name = prefix_dir + name.replace('/', os.sep)
+-    if os.path.isdir(native_name):
+-        all_fns = []
+-
+-        for root, dirs, files in os.walk(native_name):
+-            for f in files:
+-                all_fns.append(os.path.join(root, f).replace(os.sep, '/'))
+-
+-            if '__pycache__' in dirs:
+-                dirs.remove('__pycache__')
+-    else:
+-        all_fns = [prefix_dir + name]
+-
+-    for fn in all_fns:
+-        real_distinfo_path = prefix_dir + distinfo_path
+-
+-        if fn.startswith(real_distinfo_path):
+-            fn_name = fn[len(real_distinfo_path) + 1:].replace('\\', '/')
+-        elif fn.startswith(prefix_dir + sys.prefix):
+-            fn_name = os.path.relpath(
+-                    fn, real_distinfo_path).replace('\\', '/')
+-        else:
+-            fn_name = fn[len(prefix_dir):]
+-
+-        fn_f = open(fn, 'rb')
+-        data = fn_f.read()
+-        fn_f.close()
+-
+-        digest = base64.urlsafe_b64encode(
+-                hashlib.sha256(data).digest()).rstrip(b'=').decode('ascii')
+-
+-        record_f.write(
+-                '{0},sha256={1},{2}\n'.format(fn_name, digest, len(data)))
+-
+-record_f.write('{0}/RECORD,,\n'.format(distinfo_base))
+-
+-record_f.close()
+diff -Nurd '--exclude=doc' '--exclude=.hg*' ./sip-4.19.12.orig/rb-product sip/rb-product
+--- ./sip-4.19.12.orig/rb-product	1969-12-31 19:00:00.000000000 -0500
++++ sip/rb-product	2018-09-18 17:52:23.269544132 -0400
+@@ -0,0 +1 @@
++sip
+diff -Nurd '--exclude=doc' '--exclude=.hg*' ./sip-4.19.12.orig/Roadmap.rst sip/Roadmap.rst
+--- ./sip-4.19.12.orig/Roadmap.rst	1969-12-31 19:00:00.000000000 -0500
++++ sip/Roadmap.rst	2018-09-18 17:52:23.268544146 -0400
+@@ -0,0 +1,75 @@
++SIP v5 Roadmap
++==============
++
++The next major release of SIP will be v5 and is currently being planned.
++
++The major focus of v5 will be to:
++
++- eliminate inconsistencies in the syntax of specification files
++
++- fill in some gaps in the C/C++ support
++
++- restructure, refactor and rewrite the code as appropriate to ensure that it
++  is easy to test, maintain and enhance over the long term.
++
++There is no plan to introduce any significant new functionality.
++
++Any feedback on the roadmap is very welcome.
++
++
++Migration from SIP v4 to v5
++---------------------------
++
++SIP v4.19.x will be the final series of SIP v4 releases.  All features that
++will be removed in SIP v5 will trigger a deprecation warning.  These will be
++Use of the old syntax will trigger deprecation warning messages.  These will be
++disabled by default and will be enabled by passing the ``-w`` command line
++option to the code generator.
++
++A set of specification files that does not trigger any deprecation warnings
++with SIP v4.19.x should work unchanged with SIP v5.
++
++
++Roadmap
++-------
++
++Here we list specific changes that are planned.  Note that no changes are
++planned for the ``sip`` extension module.
++
++- The syntax of directives will be revised to follow a standard pattern that
++  supports arguments and sub-directives in a consistent manner.
++
++- All directives will behave consistently when enclosed in ``%If``/``%End``
++  blocks.
++
++- Support will be added for fixed sized arrays of any type.
++
++- Support for optionally detecting overflows when converting from Python
++  integers to C/C++ types will be investigated.
++
++- Invalid annotations will trigger an error message rather than being silently
++  ignored.
++
++- Error messages will be improved and will always include a reference to the
++  originating file and line number.
++
++- Support for the generation of QScintilla API files will be removed.  A
++  utility to create these files from the XML export file will be added to
++  QScintilla.
++
++- The code generator's ``-I`` command line option will support Windows style
++  path names.
++
++- The code generator may be extended using plugins.
++
++- All PyQt specific support will be removed and implemented in appropriate
++  plugins that will be distributed as part of PyQt.
++
++- The design of the code generator will allow for the implementation of plugins
++  to support generating bindings for languages other than Python.
++
++- The code generator will be reimplemented using Python v3.  It will be able to
++  be used as a standalone application or a package.
++
++- The build system will be removed.  SIP itself will be distributed as a
++  ``distutils`` package.
+diff -Nurd '--exclude=doc' '--exclude=.hg*' ./sip-4.19.12.orig/sipgen/export.c sip/sipgen/export.c
+--- ./sip-4.19.12.orig/sipgen/export.c	2018-07-05 05:54:58.000000000 -0400
++++ sip/sipgen/export.c	2018-09-24 13:12:20.671276115 -0400
+@@ -1,7 +1,7 @@
+ /*
+  * The XML and API file generator module for SIP.
+  *
+- * Copyright (c) 2015 Riverbank Computing Limited <info at riverbankcomputing.com>
++ * Copyright (c) 2018 Riverbank Computing Limited <info at riverbankcomputing.com>
+  *
+  * This file is part of SIP.
+  *
+@@ -34,32 +34,34 @@
+ 
+ static void apiEnums(sipSpec *pt, moduleDef *mod, classDef *scope, FILE *fp);
+ static void apiVars(sipSpec *pt, moduleDef *mod, classDef *scope, FILE *fp);
+-static int apiCtor(sipSpec *pt, moduleDef *mod, classDef *scope, ctorDef *ct,
+-        int sec, FILE *fp);
+-static int apiOverload(sipSpec *pt, moduleDef *mod, classDef *scope,
+-        overDef *od, int sec, FILE *fp);
++static void apiCtor(sipSpec *pt, moduleDef *mod, classDef *scope, ctorDef *ct,
++        FILE *fp);
++static void apiOverload(sipSpec *pt, moduleDef *mod, classDef *scope,
++        overDef *od, FILE *fp);
+ static int apiArgument(sipSpec *pt, argDef *ad, int out, int need_comma,
+-        int sec, int names, int defaults, int in_str, FILE *fp);
++        int names, int defaults, int in_str, FILE *fp);
+ static void xmlClass(sipSpec *pt, moduleDef *mod, classDef *cd, FILE *fp);
+ static void xmlEnums(sipSpec *pt, moduleDef *mod, classDef *scope, int indent,
+         FILE *fp);
+ static void xmlVars(sipSpec *pt, moduleDef *mod, classDef *scope, int indent,
+         FILE *fp);
+-static void xmlFunction(sipSpec *pt, classDef *scope, memberDef *md,
+-        overDef *oloads, int indent, FILE *fp);
+-static int xmlCtor(sipSpec *pt, classDef *scope, ctorDef *ct, int sec,
++static void xmlFunction(sipSpec *pt, moduleDef *mod, classDef *scope,
++        memberDef *md, overDef *oloads, int indent, FILE *fp);
++static void xmlCtor(sipSpec *pt, moduleDef *mod, classDef *scope, ctorDef *ct,
+         int indent, FILE *fp);
+-static int xmlOverload(sipSpec *pt, classDef *scope, memberDef *md,
+-        overDef *od, classDef *xtnds, int stat, int sec, int indent, FILE *fp);
++static void xmlOverload(sipSpec *pt, moduleDef *mod, classDef *scope,
++        memberDef *md, overDef *od, classDef *xtnds, int stat, int indent,
++        FILE *fp);
+ static void xmlCppSignature(FILE *fp, overDef *od);
+-static void xmlArgument(sipSpec *pt, argDef *ad, const char *dir, int res_xfer,
+-        int sec, int indent, FILE *fp);
+-static void xmlType(sipSpec *pt, argDef *ad, int sec, FILE *fp);
++static void xmlArgument(sipSpec *pt, moduleDef *mod, argDef *ad, int out,
++        KwArgs kwargs, int res_xfer, int indent, FILE *fp);
++static void xmlType(sipSpec *pt, moduleDef *mod, argDef *ad, int out,
++        KwArgs kwargs, FILE *fp);
+ static void xmlIndent(int indent, FILE *fp);
+-static const char *dirAttribute(argDef *ad);
+-static const char *pyType(sipSpec *pt, argDef *ad, int sec, classDef **scope);
+-static int exportPythonSignature(sipSpec *pt, FILE *fp, signatureDef *sd,
+-        int sec, int names, int defaults, int in_str, int is_signal);
++static void xmlRealName(scopedNameDef *fqcname, FILE *fp);
++static const char *pyType(sipSpec *pt, argDef *ad, classDef **scope);
++static void exportPythonSignature(sipSpec *pt, FILE *fp, signatureDef *sd,
++        int names, int defaults, int in_str, int is_signal);
+ 
+ 
+ /*
+@@ -86,8 +88,7 @@
+         if (od->common->slot != no_slot)
+             continue;
+ 
+-        if (apiOverload(pt, mod, NULL, od, FALSE, fp))
+-            apiOverload(pt, mod, NULL, od, TRUE, fp);
++        apiOverload(pt, mod, NULL, od, fp);
+     }
+ 
+     for (cd = pt->classes; cd != NULL; cd = cd->next)
+@@ -108,8 +109,7 @@
+             if (isPrivateCtor(ct))
+                 continue;
+ 
+-            if (apiCtor(pt, mod, cd, ct, FALSE, fp))
+-                apiCtor(pt, mod, cd, ct, TRUE, fp);
++            apiCtor(pt, mod, cd, ct, fp);
+         }
+ 
+         for (od = cd->overs; od != NULL; od = od->next)
+@@ -120,8 +120,7 @@
+             if (od->common->slot != no_slot)
+                 continue;
+ 
+-            if (apiOverload(pt, mod, cd, od, FALSE, fp))
+-                apiOverload(pt, mod, cd, od, TRUE, fp);
++            apiOverload(pt, mod, cd, od, fp);
+         }
+     }
+ 
+@@ -132,10 +131,10 @@
+ /*
+  * Generate an API ctor.
+  */
+-static int apiCtor(sipSpec *pt, moduleDef *mod, classDef *scope, ctorDef *ct,
+-        int sec, FILE *fp)
++static void apiCtor(sipSpec *pt, moduleDef *mod, classDef *scope, ctorDef *ct,
++        FILE *fp)
+ {
+-    int need_sec = FALSE, need_comma, a;
++    int need_comma, a;
+ 
+     /* Do the callable type form. */
+     fprintf(fp, "%s.", mod->name);
+@@ -148,11 +147,8 @@
+     {
+         argDef *ad = &ct->pysig.args[a];
+ 
+-        need_comma = apiArgument(pt, ad, FALSE, need_comma, sec, TRUE, TRUE,
+-                FALSE, fp);
+-
+-        if (ad->atype == rxcon_type || ad->atype == rxdis_type)
+-            need_sec = TRUE;
++        need_comma = apiArgument(pt, ad, FALSE, need_comma, TRUE, TRUE, FALSE,
++                fp);
+     }
+ 
+     fprintf(fp, ")\n");
+@@ -163,12 +159,10 @@
+     fprintf(fp, ".__init__?%d(self", CLASS_ID);
+ 
+     for (a = 0; a < ct->pysig.nrArgs; ++a)
+-        apiArgument(pt, &ct->pysig.args[a], FALSE, TRUE, sec, TRUE, TRUE,
+-                FALSE, fp);
++        apiArgument(pt, &ct->pysig.args[a], FALSE, TRUE, TRUE, TRUE, FALSE,
++                fp);
+ 
+     fprintf(fp, ")\n");
+-
+-    return need_sec;
+ }
+ 
+ 
+@@ -231,21 +225,16 @@
+ /*
+  * Generate a single API overload.
+  */
+-static int apiOverload(sipSpec *pt, moduleDef *mod, classDef *scope,
+-        overDef *od, int sec, FILE *fp)
++static void apiOverload(sipSpec *pt, moduleDef *mod, classDef *scope,
++        overDef *od, FILE *fp)
+ {
+-    int need_sec;
+-
+     fprintf(fp, "%s.", mod->name);
+     prScopedPythonName(fp, scope, od->common->pyname->text);
+     fprintf(fp, "?%d", METHOD_ID);
+ 
+-    need_sec = exportPythonSignature(pt, fp, &od->pysig, sec, TRUE, TRUE,
+-            FALSE, FALSE);
++    exportPythonSignature(pt, fp, &od->pysig, TRUE, TRUE, FALSE, FALSE);
+ 
+     fprintf(fp, "\n");
+-
+-    return need_sec;
+ }
+ 
+ 
+@@ -253,7 +242,7 @@
+  * Generate the API for an argument.
+  */
+ static int apiArgument(sipSpec *pt, argDef *ad, int out, int need_comma,
+-        int sec, int names, int defaults, int in_str, FILE *fp)
++        int names, int defaults, int in_str, FILE *fp)
+ {
+     const char *tname;
+     classDef *tscope;
+@@ -261,10 +250,7 @@
+     if (isArraySize(ad))
+         return need_comma;
+ 
+-    if (sec && (ad->atype == slotcon_type || ad->atype == slotdis_type))
+-        return need_comma;
+-
+-    if ((tname = pyType(pt, ad, sec, &tscope)) == NULL)
++    if ((tname = pyType(pt, ad, &tscope)) == NULL)
+         return need_comma;
+ 
+     if (need_comma)
+@@ -327,7 +313,7 @@
+     xmlVars(pt, mod, NULL, 1, fp);
+ 
+     for (md = mod->othfuncs; md != NULL; md = md->next)
+-        xmlFunction(pt, NULL, md, mod->overs, 1, fp);
++        xmlFunction(pt, mod, NULL, md, mod->overs, 1, fp);
+ 
+     fprintf(fp, "</Module>\n");
+ 
+@@ -336,6 +322,26 @@
+ 
+ 
+ /*
++ * Generate a 'realname' attribute containing a fully qualified C/C++ name.
++ */
++static void xmlRealName(scopedNameDef *fqcname, FILE *fp)
++{
++    const char *sep = "";
++    scopedNameDef *snd;
++
++    fprintf(fp, " realname=\"");
++
++    for (snd = removeGlobalScope(fqcname); snd != NULL; snd = snd->next)
++    {
++        fprintf(fp, "%s%s", sep, snd->name);
++        sep = "::";
++    }
++
++    fprintf(fp, "\"");
++}
++
++
++/*
+  * Generate the XML for a class.
+  */
+ static void xmlClass(sipSpec *pt, moduleDef *mod, classDef *cd, FILE *fp)
+@@ -358,9 +364,11 @@
+     {
+         xmlIndent(indent++, fp);
+         fprintf(fp, "<Class name=\"");
+-        prScopedPythonName(fp, cd->ecd, cd->pyname->text);
++        restPyClass(cd, FALSE, fp);
+         fprintf(fp, "\"");
+ 
++        xmlRealName(classFQCName(cd), fp);
++
+         if (cd->picklecode != NULL)
+             fprintf(fp, " pickle=\"1\"");
+ 
+@@ -384,7 +392,7 @@
+                 if (cl != cd->supers)
+                     fprintf(fp, " ");
+ 
+-                prScopedPythonName(fp, cl->cd->ecd, cl->cd->pyname->text);
++                restPyClass(cl->cd, TRUE, fp);
+             }
+ 
+             fprintf(fp, "\"");
+@@ -398,15 +406,14 @@
+         if (isPrivateCtor(ct))
+             continue;
+ 
+-        if (xmlCtor(pt, cd, ct, FALSE, indent, fp))
+-            xmlCtor(pt, cd, ct, TRUE, indent, fp);
++        xmlCtor(pt, mod, cd, ct, indent, fp);
+     }
+ 
+     xmlEnums(pt, mod, cd, indent, fp);
+     xmlVars(pt, mod, cd, indent, fp);
+ 
+     for (md = cd->members; md != NULL; md = md->next)
+-        xmlFunction(pt, cd, md, cd->overs, indent, fp);
++        xmlFunction(pt, mod, cd, md, cd->overs, indent, fp);
+ 
+     if (!isHiddenNamespace(cd))
+     {
+@@ -438,15 +445,22 @@
+ 
+             xmlIndent(indent++, fp);
+             fprintf(fp, "<Enum name=\"");
+-            prScopedPythonName(fp, ed->ecd, ed->pyname->text);
+-            fprintf(fp, "\">\n");
++            restPyEnum(ed, FALSE, fp);
++            fprintf(fp, "\"");
++
++            xmlRealName(ed->fqcname, fp);
++
++            fprintf(fp, ">\n");
+ 
+             for (emd = ed->members; emd != NULL; emd = emd->next)
+             {
+                 xmlIndent(indent, fp);
+-                fprintf(fp, "<EnumMember name=\"");
+-                prScopedPythonName(fp, ed->ecd, emd->pyname->text);
+-                fprintf(fp, "\"/>\n");
++                fprintf(fp, "<EnumMember name=\"%s\"", emd->pyname->text);
++
++                if (strcmp(emd->pyname->text, emd->cname) != 0)
++                    fprintf(fp, " realname=\"%s\"", emd->cname);
++
++                fprintf(fp, "/>\n");
+             }
+ 
+             xmlIndent(--indent, fp);
+@@ -495,7 +509,7 @@
+         if (isStaticVar(vd))
+             fprintf(fp, " static=\"1\"");
+ 
+-        xmlType(pt, &vd->type, FALSE, fp);
++        xmlType(pt, mod, &vd->type, FALSE, NoKwArgs, fp);
+         fprintf(fp, "/>\n");
+     }
+ }
+@@ -504,10 +518,10 @@
+ /*
+  * Generate the XML for a ctor.
+  */
+-static int xmlCtor(sipSpec *pt, classDef *scope, ctorDef *ct, int sec,
++static void xmlCtor(sipSpec *pt, moduleDef *mod, classDef *scope, ctorDef *ct,
+         int indent, FILE *fp)
+ {
+-    int a, need_sec;
++    int a;
+ 
+     xmlIndent(indent++, fp);
+     fprintf(fp, "<Function name=\"");
+@@ -518,38 +532,34 @@
+     if (ct->pysig.nrArgs == 0)
+     {
+         fprintf(fp, "/>\n");
+-        return FALSE;
++        return;
+     }
+ 
+     fprintf(fp, ">\n");
+ 
+-    need_sec = FALSE;
+-
+     for (a = 0; a < ct->pysig.nrArgs; ++a)
+     {
+         argDef *ad = &ct->pysig.args[a];
+ 
+-        xmlArgument(pt, ad, dirAttribute(ad), FALSE, sec, indent, fp);
++        if (isInArg(ad))
++            xmlArgument(pt, mod, ad, FALSE, ct->kwargs, FALSE, indent, fp);
+ 
+-        if (ad->atype == rxcon_type || ad->atype == rxdis_type)
+-            need_sec = TRUE;
++        if (isOutArg(ad))
++            xmlArgument(pt, mod, ad, TRUE, ct->kwargs, FALSE, indent, fp);
+     }
+ 
+     xmlIndent(--indent, fp);
+     fprintf(fp, "</Function>\n");
+-
+-    return need_sec;
+ }
+ 
+ 
+ /*
+  * Generate the XML for a function.
+  */
+-static void xmlFunction(sipSpec *pt, classDef *scope, memberDef *md,
+-        overDef *oloads, int indent, FILE *fp)
++static void xmlFunction(sipSpec *pt, moduleDef *mod, classDef *scope,
++        memberDef *md, overDef *oloads, int indent, FILE *fp)
+ {
+     overDef *od;
+-    const char *default_str = "default=\"1\" ";
+ 
+     for (od = oloads; od != NULL; od = od->next)
+     {
+@@ -564,14 +574,33 @@
+ 
+         if (isSignal(od))
+         {
+-            xmlIndent(indent, fp);
+-            fprintf(fp, "<Signal %sname=\"", default_str);
++            int a;
++
++            xmlIndent(indent++, fp);
++            fprintf(fp, "<Signal name=\"");
+             prScopedPythonName(fp, scope, md->pyname->text);
+-            fprintf(fp, "\" sig=\"");
+-            xmlCppSignature(fp, od);
+-            fprintf(fp, "\"/>\n");
++            /* TODO: add the C++ signature. */
++            /* fprintf(fp, "\" sig=\""); */
++            /* xmlCppSignature(fp, od); */
+ 
+-            default_str = "";
++            /* Handle the trivial case. */
++            if (od->pysig.nrArgs == 0)
++            {
++                fprintf(fp, "\"/>\n");
++                continue;
++            }
++
++            fprintf(fp, "\">\n");
++
++            for (a = 0; a < od->pysig.nrArgs; ++a)
++            {
++                argDef *ad = &od->pysig.args[a];
++
++                xmlArgument(pt, mod, ad, FALSE, od->kwargs, FALSE, indent, fp);
++            }
++
++            xmlIndent(--indent, fp);
++            fprintf(fp, "</Signal>\n");
+ 
+             continue;
+         }
+@@ -585,8 +614,7 @@
+             isstat = FALSE;
+         }
+ 
+-        if (xmlOverload(pt, scope, md, od, xtnds, isstat, FALSE, indent, fp))
+-            xmlOverload(pt, scope, md, od, xtnds, isstat, TRUE, indent, fp);
++        xmlOverload(pt, mod, scope, md, od, xtnds, isstat, indent, fp);
+     }
+ }
+ 
+@@ -594,10 +622,11 @@
+ /*
+  * Generate the XML for an overload.
+  */
+-static int xmlOverload(sipSpec *pt, classDef *scope, memberDef *md,
+-        overDef *od, classDef *xtnds, int stat, int sec, int indent, FILE *fp)
++static void xmlOverload(sipSpec *pt, moduleDef *mod, classDef *scope,
++        memberDef *md, overDef *od, classDef *xtnds, int stat, int indent,
++        FILE *fp)
+ {
+-    int a, need_sec, no_res;
++    int a, no_res;
+ 
+     xmlIndent(indent++, fp);
+     fprintf(fp, "<Function name=\"");
+@@ -635,16 +664,14 @@
+     if (no_res && od->pysig.nrArgs == 0)
+     {
+         fprintf(fp, "/>\n");
+-        return FALSE;
++        return;
+     }
+ 
+     fprintf(fp, ">\n");
+ 
+     if (!no_res)
+-        xmlArgument(pt, &od->pysig.result, "out", isResultTransferredBack(od),
+-                FALSE, indent, fp);
+-
+-    need_sec = FALSE;
++        xmlArgument(pt, mod, &od->pysig.result, TRUE, NoKwArgs,
++                isResultTransferredBack(od), indent, fp);
+ 
+     for (a = 0; a < od->pysig.nrArgs; ++a)
+     {
+@@ -654,16 +681,15 @@
+         if (isNumberSlot(md) && a == 0 && od->pysig.nrArgs == 2)
+             continue;
+ 
+-        xmlArgument(pt, ad, dirAttribute(ad), FALSE, sec, indent, fp);
++        if (isInArg(ad))
++            xmlArgument(pt, mod, ad, FALSE, od->kwargs, FALSE, indent, fp);
+ 
+-        if (ad->atype == rxcon_type || ad->atype == rxdis_type)
+-            need_sec = TRUE;
++        if (isOutArg(ad))
++            xmlArgument(pt, mod, ad, TRUE, od->kwargs, FALSE, indent, fp);
+     }
+ 
+     xmlIndent(--indent, fp);
+     fprintf(fp, "</Function>\n");
+-
+-    return need_sec;
+ }
+ 
+ 
+@@ -679,65 +705,35 @@
+ 
+ 
+ /*
+- * Convert an arguments direction to an XML attribute value.
+- */
+-static const char *dirAttribute(argDef *ad)
+-{
+-    if (isInArg(ad))
+-    {
+-        if (isOutArg(ad))
+-            return "inout";
+-
+-        return NULL;
+-    }
+-
+-    return "out";
+-}
+-
+-
+-/*
+  * Generate the XML for an argument.
+  */
+-static void xmlArgument(sipSpec *pt, argDef *ad, const char *dir, int res_xfer,
+-        int sec, int indent, FILE *fp)
++static void xmlArgument(sipSpec *pt, moduleDef *mod, argDef *ad, int out,
++        KwArgs kwargs, int res_xfer, int indent, FILE *fp)
+ {
+     if (isArraySize(ad))
+         return;
+ 
+-    if (sec && (ad->atype == slotcon_type || ad->atype == slotdis_type))
+-        return;
+-
+     xmlIndent(indent, fp);
+-    fprintf(fp, "<Argument");
+-    xmlType(pt, ad, sec, fp);
++    fprintf(fp, "<%s", (out ? "Return" : "Argument"));
++    xmlType(pt, mod, ad, out, kwargs, fp);
+ 
+-    if (dir != NULL)
+-        fprintf(fp, " dir=\"%s\"", dir);
++    if (!out)
++    {
++        if (isAllowNone(ad))
++            fprintf(fp, " allownone=\"1\"");
+ 
+-    if (isAllowNone(ad))
+-        fprintf(fp, " allownone=\"1\"");
++        if (isDisallowNone(ad))
++            fprintf(fp, " disallownone=\"1\"");
+ 
+-    if (isDisallowNone(ad))
+-        fprintf(fp, " disallownone=\"1\"");
++        if (isTransferred(ad))
++            fprintf(fp, " transfer=\"to\"");
++        else if (isThisTransferred(ad))
++            fprintf(fp, " transfer=\"this\"");
++    }
+ 
+-    if (isTransferred(ad))
+-        fprintf(fp, " transfer=\"to\"");
+-    else if (isThisTransferred(ad))
+-        fprintf(fp, " transfer=\"this\"");
+-    else if (res_xfer || isTransferredBack(ad))
++    if (res_xfer || isTransferredBack(ad))
+         fprintf(fp, " transfer=\"back\"");
+ 
+-    /*
+-     * Handle the default value, but ignore it if it is an output only
+-     * argument.
+-     */
+-    if (ad->defval && (dir == NULL || strcmp(dir, "out") != 0))
+-    {
+-        prcode(fp, " default=\"");
+-        prDefaultValue(ad, FALSE, fp);
+-        prcode(fp, "\"");
+-    }
+-
+     fprintf(fp, "/>\n");
+ }
+ 
+@@ -745,73 +741,68 @@
+ /*
+  * Generate the XML for a type.
+  */
+-static void xmlType(sipSpec *pt, argDef *ad, int sec, FILE *fp)
++static void xmlType(sipSpec *pt, moduleDef *mod, argDef *ad, int out,
++        KwArgs kwargs, FILE *fp)
+ {
+-    const char *type_type = NULL, *type_name;
++    const char *type_name;
+     classDef *type_scope;
++    typeHintDef *thd;
+ 
+     fprintf(fp, " typename=\"");
+ 
+-    switch (ad->atype)
++    /* Handle the argument name. */
++    if (!out && ad->name != NULL)
+     {
+-    case class_type:
+-        type_type = (isOpaque(ad->u.cd) ? "opaque" : "class");
+-        break;
+-
+-    case enum_type:
+-        if (ad->u.ed->pyname != NULL)
+-            type_type = "enum";
+-        break;
+-
+-    case rxcon_type:
+-    case rxdis_type:
+-        if (!sec)
+-            type_type = "class";
+-        break;
++        if (kwargs == AllKwArgs || (kwargs == OptionalKwArgs && ad->defval != NULL))
++            fprintf(fp, "%s: ", ad->name->text);
++    }
+ 
+-    case qobject_type:
+-        type_type = "class";
+-        break;
++    /* Use any explicit type hint unless the argument is constrained. */
++    thd = (out ? ad->typehint_out : (isConstrained(ad) ? NULL : ad->typehint_in));
+ 
+-    case slotcon_type:
+-    case slotdis_type:
++    if (thd != NULL)
++    {
++        pyiTypeHint(pt, thd, mod, out, NULL, FALSE, TRUE, fp);
++    }
++    else
++    {
++        switch (ad->atype)
+         {
+-            int a;
+-
+-            prcode(fp, "SLOT(");
+-
+-            for (a = 0; a < ad->u.sa->nrArgs; ++a)
+-            {
+-                if (a > 0)
+-                    prcode(fp, ", ");
++        case class_type:
++            restPyClass(ad->u.cd, TRUE, fp);
++            break;
+ 
+-                prcode(fp, "%M%B%M", &ad->u.sa->args[a]);
+-            }
++        case enum_type:
++            if (ad->u.ed->pyname != NULL)
++                restPyEnum(ad->u.ed, TRUE, fp);
++            else
++                fprintf(fp, "int");
+ 
+-            prcode(fp, ")");
+-        }
++            break;
+ 
+-        break;
++        case qobject_type:
++            restPyClass(pt->qobject_cd, TRUE, fp);
++            break;
+ 
+-    case mapped_type:
+-        type_type = "mappedtype";
+-        break;
++        case mapped_type:
++            /* There would normally be a type hint. */
++            fprintf(fp, "unknown-type");
++            break;
+ 
+-    /* Suppress a compiler warning. */
+-    default:
+-        ;
++        default:
++            if ((type_name = pyType(pt, ad, &type_scope)) != NULL)
++                prScopedPythonName(fp, type_scope, type_name);
++        }
+     }
+ 
+-    if ((type_name = pyType(pt, ad, sec, &type_scope)) != NULL)
+-        prScopedPythonName(fp, type_scope, type_name);
++    if (!out && ad->name != NULL && ad->defval != NULL)
++    {
++        fprintf(fp, " = ");
++        /* TODO: use reST references where appropriate. */
++        prDefaultValue(ad, FALSE, fp);
++    }
+ 
+     fprintf(fp, "\"");
+-
+-    if (type_type != NULL)
+-        fprintf(fp, " typetype=\"%s\"", type_type);
+-
+-    if (ad->name != NULL)
+-        fprintf(fp, " name=\"%s\"", ad->name->text);
+ }
+ 
+ 
+@@ -828,7 +819,7 @@
+ /*
+  * Get the Python representation of a type.
+  */
+-static const char *pyType(sipSpec *pt, argDef *ad, int sec, classDef **scope)
++static const char *pyType(sipSpec *pt, argDef *ad, classDef **scope)
+ {
+     const char *type_name;
+ 
+@@ -947,23 +938,6 @@
+             type_name = "int";
+         break;
+ 
+-    case signal_type:
+-        type_name = "SIGNAL()";
+-        break;
+-
+-    case slot_type:
+-        type_name = "SLOT()";
+-        break;
+-
+-    case rxcon_type:
+-    case rxdis_type:
+-        if (sec)
+-            type_name = "callable";
+-        else
+-            type_name = "QObject";
+-
+-        break;
+-
+     case qobject_type:
+         type_name = "QObject";
+         break;
+@@ -1046,11 +1020,6 @@
+         type_name = "...";
+         break;
+ 
+-    case slotcon_type:
+-    case anyslot_type:
+-        type_name = "SLOT()";
+-        break;
+-
+     default:
+         type_name = NULL;
+     }
+@@ -1062,10 +1031,10 @@
+ /*
+  * Generate a Python signature.
+  */
+-static int exportPythonSignature(sipSpec *pt, FILE *fp, signatureDef *sd,
+-        int sec, int names, int defaults, int in_str, int is_signal)
++static void exportPythonSignature(sipSpec *pt, FILE *fp, signatureDef *sd,
++        int names, int defaults, int in_str, int is_signal)
+ {
+-    int need_sec = FALSE, need_comma = FALSE, is_res, nr_out, a;
++    int need_comma = FALSE, is_res, nr_out, a;
+ 
+     if (is_signal)
+     {
+@@ -1089,11 +1058,8 @@
+         if (!isInArg(ad))
+             continue;
+ 
+-        need_comma = apiArgument(pt, ad, FALSE, need_comma, sec, names,
+-                defaults, in_str, fp);
+-
+-        if (ad->atype == rxcon_type || ad->atype == rxdis_type)
+-            need_sec = TRUE;
++        need_comma = apiArgument(pt, ad, FALSE, need_comma, names, defaults,
++                in_str, fp);
+     }
+ 
+     if (is_signal)
+@@ -1118,7 +1084,7 @@
+             fprintf(fp, "(");
+ 
+         if (is_res)
+-            need_comma = apiArgument(pt, &sd->result, TRUE, FALSE, sec, FALSE,
++            need_comma = apiArgument(pt, &sd->result, TRUE, FALSE, FALSE,
+                     FALSE, in_str, fp);
+         else
+             need_comma = FALSE;
+@@ -1129,13 +1095,43 @@
+ 
+             if (isOutArg(ad))
+                 /* We don't want the name in the result tuple. */
+-                need_comma = apiArgument(pt, ad, TRUE, need_comma, sec, FALSE,
++                need_comma = apiArgument(pt, ad, TRUE, need_comma, FALSE,
+                         FALSE, in_str, fp);
+         }
+ 
+         if ((is_res && nr_out > 0) || nr_out > 1)
+             fprintf(fp, ")");
+     }
++}
+ 
+-    return need_sec;
++
++/*
++ * Generate a fully qualified class name optionally as a reST reference.
++ */
++void restPyClass(classDef *cd, int as_ref, FILE *fp)
++{
++    if (as_ref)
++        fprintf(fp, ":sip:class:`~");
++
++    fprintf(fp, "%s.", cd->iff->module->fullname->text);
++    prScopedPythonName(fp, cd->ecd, cd->pyname->text);
++
++    if (as_ref)
++        fprintf(fp, "`");
++}
++
++
++/*
++ * Generate a fully qualified enum name optionally as a reST reference.
++ */
++void restPyEnum(enumDef *ed, int as_ref, FILE *fp)
++{
++    if (as_ref)
++        fprintf(fp, ":sip:enum:`~");
++
++    fprintf(fp, "%s.", ed->module->fullname->text);
++    prScopedPythonName(fp, ed->ecd, ed->pyname->text);
++
++    if (as_ref)
++        fprintf(fp, "`");
+ }
+diff -Nurd '--exclude=doc' '--exclude=.hg*' ./sip-4.19.12.orig/sipgen/lexer.c sip/sipgen/lexer.c
+--- ./sip-4.19.12.orig/sipgen/lexer.c	2018-07-05 05:55:19.000000000 -0400
++++ sip/sipgen/lexer.c	2018-09-18 18:12:23.334057750 -0400
+@@ -1,6 +1,6 @@
+-#line 2 "sip-4.19.12/sipgen/lexer.c"
++#line 2 "sipgen/lexer.c"
+ 
+-#line 4 "sip-4.19.12/sipgen/lexer.c"
++#line 4 "sipgen/lexer.c"
+ 
+ #define  YY_INT_ALIGNED short int
+ 
+@@ -8,8 +8,8 @@
+ 
+ #define FLEX_SCANNER
+ #define YY_FLEX_MAJOR_VERSION 2
+-#define YY_FLEX_MINOR_VERSION 5
+-#define YY_FLEX_SUBMINOR_VERSION 35
++#define YY_FLEX_MINOR_VERSION 6
++#define YY_FLEX_SUBMINOR_VERSION 1
+ #if YY_FLEX_SUBMINOR_VERSION > 0
+ #define FLEX_BETA
+ #endif
+@@ -47,7 +47,6 @@
+ typedef uint16_t flex_uint16_t;
+ typedef int32_t flex_int32_t;
+ typedef uint32_t flex_uint32_t;
+-typedef uint64_t flex_uint64_t;
+ #else
+ typedef signed char flex_int8_t;
+ typedef short int flex_int16_t;
+@@ -55,7 +54,6 @@
+ typedef unsigned char flex_uint8_t; 
+ typedef unsigned short int flex_uint16_t;
+ typedef unsigned int flex_uint32_t;
+-#endif /* ! C99 */
+ 
+ /* Limits of integral types. */
+ #ifndef INT8_MIN
+@@ -86,27 +84,17 @@
+ #define UINT32_MAX             (4294967295U)
+ #endif
+ 
+-#endif /* ! FLEXINT_H */
+-
+-#ifdef __cplusplus
+-
+-/* The "const" storage-class-modifier is valid. */
+-#define YY_USE_CONST
+-
+-#else	/* ! __cplusplus */
+-
+-/* C99 requires __STDC__ to be defined as 1. */
+-#if defined (__STDC__)
+-
+-#define YY_USE_CONST
++#endif /* ! C99 */
+ 
+-#endif	/* defined (__STDC__) */
+-#endif	/* ! __cplusplus */
++#endif /* ! FLEXINT_H */
+ 
+-#ifdef YY_USE_CONST
++/* TODO: this is always defined, so inline it */
+ #define yyconst const
++
++#if defined(__GNUC__) && __GNUC__ >= 3
++#define yynoreturn __attribute__((__noreturn__))
+ #else
+-#define yyconst
++#define yynoreturn
+ #endif
+ 
+ /* Returned upon end-of-file. */
+@@ -142,7 +130,15 @@
+ 
+ /* Size of default input buffer. */
+ #ifndef YY_BUF_SIZE
++#ifdef __ia64__
++/* On IA-64, the buffer size is 16k, not 8k.
++ * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
++ * Ditto for the __ia64__ case accordingly.
++ */
++#define YY_BUF_SIZE 32768
++#else
+ #define YY_BUF_SIZE 16384
++#endif /* __ia64__ */
+ #endif
+ 
+ /* The state buf must be large enough to hold one state per character in the main buffer.
+@@ -159,7 +155,7 @@
+ typedef size_t yy_size_t;
+ #endif
+ 
+-extern yy_size_t yyleng;
++extern int yyleng;
+ 
+ extern FILE *yyin, *yyout;
+ 
+@@ -168,13 +164,14 @@
+ #define EOB_ACT_LAST_MATCH 2
+ 
+     #define YY_LESS_LINENO(n)
++    #define YY_LINENO_REWIND_TO(ptr)
+     
+ /* Return all but the first "n" matched characters back to the input stream. */
+ #define yyless(n) \
+ 	do \
+ 		{ \
+ 		/* Undo effects of setting up yytext. */ \
+-        int yyless_macro_arg = (n); \
++        yy_size_t yyless_macro_arg = (n); \
+         YY_LESS_LINENO(yyless_macro_arg);\
+ 		*yy_cp = (yy_hold_char); \
+ 		YY_RESTORE_YY_MORE_OFFSET \
+@@ -197,12 +194,12 @@
+ 	/* Size of input buffer in bytes, not including room for EOB
+ 	 * characters.
+ 	 */
+-	yy_size_t yy_buf_size;
++	int yy_buf_size;
+ 
+ 	/* Number of characters read into yy_ch_buf, not including EOB
+ 	 * characters.
+ 	 */
+-	yy_size_t yy_n_chars;
++	int yy_n_chars;
+ 
+ 	/* Whether we "own" the buffer - i.e., we know we created it,
+ 	 * and can realloc() it to grow it, and should free() it to
+@@ -253,7 +250,7 @@
+ /* Stack of input buffers. */
+ static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
+ static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
+-static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
++static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */
+ 
+ /* We provide macros for accessing buffer states in case in the
+  * future we want to put the buffer states in a more general
+@@ -272,11 +269,11 @@
+ 
+ /* yy_hold_char holds the character lost when yytext is formed. */
+ static char yy_hold_char;
+-static yy_size_t yy_n_chars;		/* number of characters read into yy_ch_buf */
+-yy_size_t yyleng;
++static int yy_n_chars;		/* number of characters read into yy_ch_buf */
++int yyleng;
+ 
+ /* Points to current character in buffer. */
+-static char *yy_c_buf_p = (char *) 0;
++static char *yy_c_buf_p = NULL;
+ static int yy_init = 0;		/* whether we need to initialize */
+ static int yy_start = 0;	/* start state number */
+ 
+@@ -301,7 +298,7 @@
+ 
+ YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size  );
+ YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str  );
+-YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len  );
++YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len  );
+ 
+ void *yyalloc (yy_size_t  );
+ void *yyrealloc (void *,yy_size_t  );
+@@ -335,7 +332,7 @@
+ 
+ typedef unsigned char YY_CHAR;
+ 
+-FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
++FILE *yyin = NULL, *yyout = NULL;
+ 
+ typedef int yy_state_type;
+ 
+@@ -344,19 +341,22 @@
+ int yylineno = 1;
+ 
+ extern char *yytext;
++#ifdef yytext_ptr
++#undef yytext_ptr
++#endif
+ #define yytext_ptr yytext
+ 
+ static yy_state_type yy_get_previous_state (void );
+ static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
+ static int yy_get_next_buffer (void );
+-static void yy_fatal_error (yyconst char msg[]  );
++static void yynoreturn yy_fatal_error (yyconst char* msg  );
+ 
+ /* Done after the current pattern has been matched and before the
+  * corresponding action - sets up yytext.
+  */
+ #define YY_DO_BEFORE_ACTION \
+ 	(yytext_ptr) = yy_bp; \
+-	yyleng = (yy_size_t) (yy_cp - yy_bp); \
++	yyleng = (int) (yy_cp - yy_bp); \
+ 	(yy_hold_char) = *yy_cp; \
+ 	*yy_cp = '\0'; \
+ 	(yy_c_buf_p) = yy_cp;
+@@ -509,7 +509,7 @@
+       131,  113,    0,  113,    0,  113,    7,  113,  101,    0
+     } ;
+ 
+-static yyconst flex_int32_t yy_ec[256] =
++static yyconst YY_CHAR yy_ec[256] =
+     {   0,
+         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
+         1,    1,    4,    1,    1,    1,    1,    1,    1,    1,
+@@ -541,7 +541,7 @@
+         1,    1,    1,    1,    1
+     } ;
+ 
+-static yyconst flex_int32_t yy_meta[70] =
++static yyconst YY_CHAR yy_meta[70] =
+     {   0,
+         1,    1,    2,    1,    1,    1,    1,    1,    1,    1,
+         1,    3,    3,    3,    4,    4,    1,    4,    4,    4,
+@@ -552,7 +552,7 @@
+         3,    3,    3,    3,    3,    3,    3,    3,    1
+     } ;
+ 
+-static yyconst flex_int16_t yy_base[1239] =
++static yyconst flex_uint16_t yy_base[1239] =
+     {   0,
+         0,   68, 2823,   69,   70,   73,   75,   75, 2817,   80,
+      2824, 2827, 2827, 2827,   73,   82,   77,   87,   77,  128,
+@@ -832,7 +832,7 @@
+      1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230
+     } ;
+ 
+-static yyconst flex_int16_t yy_nxt[2897] =
++static yyconst flex_uint16_t yy_nxt[2897] =
+     {   0,
+        12,   13,   14,   13,   15,   12,   16,   12,   12,   12,
+        12,   17,   18,   19,   20,   21,   22,   23,   23,   23,
+@@ -1492,7 +1492,7 @@
+ #define YY_MORE_ADJ 0
+ #define YY_RESTORE_YY_MORE_OFFSET
+ char *yytext;
+-#line 1 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 1 "sipgen/metasrc/lexer.l"
+ /*
+  * The SIP lexer.
+  *
+@@ -1510,7 +1510,7 @@
+  * SIP is supplied WITHOUT ANY WARRANTY; without even the implied warranty of
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+  */
+-#line 20 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 20 "sipgen/metasrc/lexer.l"
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+@@ -1560,7 +1560,7 @@
+ 
+ 
+ 
+-#line 1564 "sip-4.19.12/sipgen/lexer.c"
++#line 1564 "sipgen/lexer.c"
+ 
+ #define INITIAL 0
+ #define code 1
+@@ -1597,19 +1597,19 @@
+ 
+ FILE *yyget_in (void );
+ 
+-void yyset_in  (FILE * in_str  );
++void yyset_in  (FILE * _in_str  );
+ 
+ FILE *yyget_out (void );
+ 
+-void yyset_out  (FILE * out_str  );
++void yyset_out  (FILE * _out_str  );
+ 
+-yy_size_t yyget_leng (void );
++			int yyget_leng (void );
+ 
+ char *yyget_text (void );
+ 
+ int yyget_lineno (void );
+ 
+-void yyset_lineno (int line_number  );
++void yyset_lineno (int _line_number  );
+ 
+ /* Macros after this point can all be overridden by user definitions in
+  * section 1.
+@@ -1623,8 +1623,12 @@
+ #endif
+ #endif
+ 
++#ifndef YY_NO_UNPUT
++    
+     static void yyunput (int c,char *buf_ptr  );
+     
++#endif
++
+ #ifndef yytext_ptr
+ static void yy_flex_strncpy (char *,yyconst char *,int );
+ #endif
+@@ -1647,7 +1651,7 @@
+         static int yy_start_stack_depth = 0;
+         static int *yy_start_stack = NULL;
+     
+-    static void yy_push_state (int new_state );
++    static void yy_push_state (int _new_state );
+     
+     static void yy_pop_state (void );
+     
+@@ -1655,7 +1659,12 @@
+     
+ /* Amount of stuff to slurp up with each read. */
+ #ifndef YY_READ_BUF_SIZE
++#ifdef __ia64__
++/* On IA-64, the buffer size is 16k, not 8k */
++#define YY_READ_BUF_SIZE 16384
++#else
+ #define YY_READ_BUF_SIZE 8192
++#endif /* __ia64__ */
+ #endif
+ 
+ /* Copy whatever the last rule matched to the standard output. */
+@@ -1663,7 +1672,7 @@
+ /* This used to be an fputs(), but since the string might contain NUL's,
+  * we now use fwrite().
+  */
+-#define ECHO fwrite( yytext, yyleng, 1, yyout )
++#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0)
+ #endif
+ 
+ /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
+@@ -1674,7 +1683,7 @@
+ 	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+ 		{ \
+ 		int c = '*'; \
+-		yy_size_t n; \
++		int n; \
+ 		for ( n = 0; n < max_size && \
+ 			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+ 			buf[n] = (char) c; \
+@@ -1687,7 +1696,7 @@
+ 	else \
+ 		{ \
+ 		errno=0; \
+-		while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
++		while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \
+ 			{ \
+ 			if( errno != EINTR) \
+ 				{ \
+@@ -1742,7 +1751,7 @@
+ 
+ /* Code executed at the end of each rule. */
+ #ifndef YY_BREAK
+-#define YY_BREAK break;
++#define YY_BREAK /*LINTED*/break;
+ #endif
+ 
+ #define YY_RULE_SETUP \
+@@ -1755,15 +1764,10 @@
+  */
+ YY_DECL
+ {
+-	register yy_state_type yy_current_state;
+-	register char *yy_cp, *yy_bp;
+-	register int yy_act;
++	yy_state_type yy_current_state;
++	char *yy_cp, *yy_bp;
++	int yy_act;
+     
+-#line 74 "sip-4.19.12/sipgen/metasrc/lexer.l"
+-
+-
+-#line 1766 "sip-4.19.12/sipgen/lexer.c"
+-
+ 	if ( !(yy_init) )
+ 		{
+ 		(yy_init) = 1;
+@@ -1790,7 +1794,13 @@
+ 		yy_load_buffer_state( );
+ 		}
+ 
+-	while ( 1 )		/* loops until end-of-file is reached */
++	{
++#line 74 "sipgen/metasrc/lexer.l"
++
++
++#line 1802 "sipgen/lexer.c"
++
++	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
+ 		{
+ 		yy_cp = (yy_c_buf_p);
+ 
+@@ -1807,7 +1817,7 @@
+ yy_match:
+ 		do
+ 			{
+-			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
++			YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
+ 			if ( yy_accept[yy_current_state] )
+ 				{
+ 				(yy_last_accepting_state) = yy_current_state;
+@@ -1819,7 +1829,7 @@
+ 				if ( yy_current_state >= 1231 )
+ 					yy_c = yy_meta[(unsigned int) yy_c];
+ 				}
+-			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
++			yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
+ 			++yy_cp;
+ 			}
+ 		while ( yy_base[yy_current_state] != 2827 );
+@@ -1848,527 +1858,527 @@
+ 
+ case 1:
+ YY_RULE_SETUP
+-#line 76 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 76 "sipgen/metasrc/lexer.l"
+ {BEGIN directive_start; return TK_API;}
+ 	YY_BREAK
+ case 2:
+ YY_RULE_SETUP
+-#line 77 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 77 "sipgen/metasrc/lexer.l"
+ {BEGIN directive_start; return TK_AUTOPYNAME;}
+ 	YY_BREAK
+ case 3:
+ YY_RULE_SETUP
+-#line 78 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 78 "sipgen/metasrc/lexer.l"
+ {return TK_CMODULE;}
+ 	YY_BREAK
+ case 4:
+ YY_RULE_SETUP
+-#line 79 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 79 "sipgen/metasrc/lexer.l"
+ {BEGIN directive_start; return TK_COMPOMODULE;}
+ 	YY_BREAK
+ case 5:
+ YY_RULE_SETUP
+-#line 80 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 80 "sipgen/metasrc/lexer.l"
+ {BEGIN directive_start; return TK_CONSMODULE;}
+ 	YY_BREAK
+ case 6:
+ YY_RULE_SETUP
+-#line 81 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 81 "sipgen/metasrc/lexer.l"
+ {BEGIN directive_start; return TK_DEFDOCSTRFMT;}
+ 	YY_BREAK
+ case 7:
+ YY_RULE_SETUP
+-#line 82 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 82 "sipgen/metasrc/lexer.l"
+ {BEGIN directive_start; return TK_DEFDOCSTRSIG;}
+ 	YY_BREAK
+ case 8:
+ YY_RULE_SETUP
+-#line 83 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 83 "sipgen/metasrc/lexer.l"
+ {BEGIN directive_start; return TK_DEFENCODING;}
+ 	YY_BREAK
+ case 9:
+ YY_RULE_SETUP
+-#line 84 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 84 "sipgen/metasrc/lexer.l"
+ {BEGIN directive_start; return TK_DEFMETATYPE;}
+ 	YY_BREAK
+ case 10:
+ YY_RULE_SETUP
+-#line 85 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 85 "sipgen/metasrc/lexer.l"
+ {BEGIN directive_start; return TK_DEFSUPERTYPE;}
+ 	YY_BREAK
+ case 11:
+ YY_RULE_SETUP
+-#line 86 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 86 "sipgen/metasrc/lexer.l"
+ {return TK_END;}
+ 	YY_BREAK
+ case 12:
+ YY_RULE_SETUP
+-#line 87 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 87 "sipgen/metasrc/lexer.l"
+ {BEGIN INITIAL; return TK_END;}
+ 	YY_BREAK
+ case 13:
+ YY_RULE_SETUP
+-#line 88 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 88 "sipgen/metasrc/lexer.l"
+ {return TK_EXCEPTION;}
+ 	YY_BREAK
+ case 14:
+ YY_RULE_SETUP
+-#line 89 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 89 "sipgen/metasrc/lexer.l"
+ {BEGIN directive_start; return TK_FEATURE;}
+ 	YY_BREAK
+ case 15:
+ YY_RULE_SETUP
+-#line 90 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 90 "sipgen/metasrc/lexer.l"
+ {BEGIN directive_start; return TK_HIDE_NS;}
+ 	YY_BREAK
+ case 16:
+ YY_RULE_SETUP
+-#line 91 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 91 "sipgen/metasrc/lexer.l"
+ {return TK_IF;}
+ 	YY_BREAK
+ case 17:
+ YY_RULE_SETUP
+-#line 92 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 92 "sipgen/metasrc/lexer.l"
+ {BEGIN directive_start; return TK_IMPORT;}
+ 	YY_BREAK
+ case 18:
+ YY_RULE_SETUP
+-#line 93 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 93 "sipgen/metasrc/lexer.l"
+ {BEGIN directive_start; return TK_INCLUDE;}
+ 	YY_BREAK
+ case 19:
+ YY_RULE_SETUP
+-#line 94 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 94 "sipgen/metasrc/lexer.l"
+ {BEGIN directive_start; return TK_LICENSE;}
+ 	YY_BREAK
+ case 20:
+ YY_RULE_SETUP
+-#line 95 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 95 "sipgen/metasrc/lexer.l"
+ {return TK_MAPPEDTYPE;}
+ 	YY_BREAK
+ case 21:
+ YY_RULE_SETUP
+-#line 96 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 96 "sipgen/metasrc/lexer.l"
+ {BEGIN directive_start; return TK_MODULE;}
+ 	YY_BREAK
+ case 22:
+ YY_RULE_SETUP
+-#line 97 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 97 "sipgen/metasrc/lexer.l"
+ {return TK_OPTINCLUDE;}
+ 	YY_BREAK
+ case 23:
+ YY_RULE_SETUP
+-#line 98 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 98 "sipgen/metasrc/lexer.l"
+ {return TK_PLATFORMS;}
+ 	YY_BREAK
+ case 24:
+ YY_RULE_SETUP
+-#line 99 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 99 "sipgen/metasrc/lexer.l"
+ {BEGIN directive_start; return TK_PLUGIN;}
+ 	YY_BREAK
+ case 25:
+ YY_RULE_SETUP
+-#line 100 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 100 "sipgen/metasrc/lexer.l"
+ {BEGIN directive_start; return TK_PROPERTY;}
+ 	YY_BREAK
+ case 26:
+ YY_RULE_SETUP
+-#line 101 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 101 "sipgen/metasrc/lexer.l"
+ {return TK_TIMELINE;}
+ 	YY_BREAK
+ case 27:
+ YY_RULE_SETUP
+-#line 103 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 103 "sipgen/metasrc/lexer.l"
+ {return TK_CLASS;}
+ 	YY_BREAK
+ case 28:
+ YY_RULE_SETUP
+-#line 104 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 104 "sipgen/metasrc/lexer.l"
+ {return TK_STRUCT;}
+ 	YY_BREAK
+ case 29:
+ YY_RULE_SETUP
+-#line 105 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 105 "sipgen/metasrc/lexer.l"
+ {return TK_PUBLIC;}
+ 	YY_BREAK
+ case 30:
+ YY_RULE_SETUP
+-#line 106 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 106 "sipgen/metasrc/lexer.l"
+ {return TK_PROTECTED;}
+ 	YY_BREAK
+ case 31:
+ YY_RULE_SETUP
+-#line 107 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 107 "sipgen/metasrc/lexer.l"
+ {return TK_PRIVATE;}
+ 	YY_BREAK
+ case 32:
+ YY_RULE_SETUP
+-#line 108 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 108 "sipgen/metasrc/lexer.l"
+ {return TK_SIGNALS;}
+ 	YY_BREAK
+ case 33:
+ YY_RULE_SETUP
+-#line 109 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 109 "sipgen/metasrc/lexer.l"
+ {return TK_SIGNALS;}
+ 	YY_BREAK
+ case 34:
+ YY_RULE_SETUP
+-#line 110 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 110 "sipgen/metasrc/lexer.l"
+ {return TK_SIGNAL_METHOD;}
+ 	YY_BREAK
+ case 35:
+ YY_RULE_SETUP
+-#line 111 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 111 "sipgen/metasrc/lexer.l"
+ {return TK_SLOTS;}
+ 	YY_BREAK
+ case 36:
+ YY_RULE_SETUP
+-#line 112 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 112 "sipgen/metasrc/lexer.l"
+ {return TK_SLOTS;}
+ 	YY_BREAK
+ case 37:
+ YY_RULE_SETUP
+-#line 113 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 113 "sipgen/metasrc/lexer.l"
+ {return TK_SLOT_METHOD;}
+ 	YY_BREAK
+ case 38:
+ YY_RULE_SETUP
+-#line 114 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 114 "sipgen/metasrc/lexer.l"
+ {return TK_CHAR;}
+ 	YY_BREAK
+ case 39:
+ YY_RULE_SETUP
+-#line 115 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 115 "sipgen/metasrc/lexer.l"
+ {return TK_WCHAR_T;}
+ 	YY_BREAK
+ case 40:
+ YY_RULE_SETUP
+-#line 116 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 116 "sipgen/metasrc/lexer.l"
+ {return TK_BOOL;}
+ 	YY_BREAK
+ case 41:
+ YY_RULE_SETUP
+-#line 117 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 117 "sipgen/metasrc/lexer.l"
+ {return TK_SHORT;}
+ 	YY_BREAK
+ case 42:
+ YY_RULE_SETUP
+-#line 118 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 118 "sipgen/metasrc/lexer.l"
+ {return TK_INT;}
+ 	YY_BREAK
+ case 43:
+ YY_RULE_SETUP
+-#line 119 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 119 "sipgen/metasrc/lexer.l"
+ {return TK_LONG;}
+ 	YY_BREAK
+ case 44:
+ YY_RULE_SETUP
+-#line 120 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 120 "sipgen/metasrc/lexer.l"
+ {return TK_FLOAT;}
+ 	YY_BREAK
+ case 45:
+ YY_RULE_SETUP
+-#line 121 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 121 "sipgen/metasrc/lexer.l"
+ {return TK_DOUBLE;}
+ 	YY_BREAK
+ case 46:
+ YY_RULE_SETUP
+-#line 122 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 122 "sipgen/metasrc/lexer.l"
+ {return TK_VOID;}
+ 	YY_BREAK
+ case 47:
+ YY_RULE_SETUP
+-#line 123 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 123 "sipgen/metasrc/lexer.l"
+ {return TK_VIRTUAL;}
+ 	YY_BREAK
+ case 48:
+ YY_RULE_SETUP
+-#line 124 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 124 "sipgen/metasrc/lexer.l"
+ {return TK_ENUM;}
+ 	YY_BREAK
+ case 49:
+ YY_RULE_SETUP
+-#line 125 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 125 "sipgen/metasrc/lexer.l"
+ {return TK_SIGNED;}
+ 	YY_BREAK
+ case 50:
+ YY_RULE_SETUP
+-#line 126 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 126 "sipgen/metasrc/lexer.l"
+ {return TK_UNSIGNED;}
+ 	YY_BREAK
+ case 51:
+ YY_RULE_SETUP
+-#line 127 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 127 "sipgen/metasrc/lexer.l"
+ {return TK_CONST;}
+ 	YY_BREAK
+ case 52:
+ YY_RULE_SETUP
+-#line 128 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 128 "sipgen/metasrc/lexer.l"
+ {return TK_STATIC;}
+ 	YY_BREAK
+ case 53:
+ YY_RULE_SETUP
+-#line 129 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 129 "sipgen/metasrc/lexer.l"
+ {return TK_TRUE_VALUE;}
+ 	YY_BREAK
+ case 54:
+ YY_RULE_SETUP
+-#line 130 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 130 "sipgen/metasrc/lexer.l"
+ {return TK_FALSE_VALUE;}
+ 	YY_BREAK
+ case 55:
+ YY_RULE_SETUP
+-#line 131 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 131 "sipgen/metasrc/lexer.l"
+ {return TK_NULL_VALUE;}
+ 	YY_BREAK
+ case 56:
+ YY_RULE_SETUP
+-#line 132 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 132 "sipgen/metasrc/lexer.l"
+ {return TK_TYPEDEF;}
+ 	YY_BREAK
+ case 57:
+ YY_RULE_SETUP
+-#line 133 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 133 "sipgen/metasrc/lexer.l"
+ {return TK_NAMESPACE;}
+ 	YY_BREAK
+ case 58:
+ YY_RULE_SETUP
+-#line 134 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 134 "sipgen/metasrc/lexer.l"
+ {return TK_OPERATOR;}
+ 	YY_BREAK
+ case 59:
+ YY_RULE_SETUP
+-#line 135 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 135 "sipgen/metasrc/lexer.l"
+ {return TK_THROW;}
+ 	YY_BREAK
+ case 60:
+ YY_RULE_SETUP
+-#line 136 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 136 "sipgen/metasrc/lexer.l"
+ {return TK_EXPLICIT;}
+ 	YY_BREAK
+ case 61:
+ YY_RULE_SETUP
+-#line 137 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 137 "sipgen/metasrc/lexer.l"
+ {return TK_TEMPLATE;}
+ 	YY_BREAK
+ case 62:
+ YY_RULE_SETUP
+-#line 138 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 138 "sipgen/metasrc/lexer.l"
+ {return TK_FINAL;}
+ 	YY_BREAK
+ case 63:
+ YY_RULE_SETUP
+-#line 139 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 139 "sipgen/metasrc/lexer.l"
+ {return TK_SCOPE;}
+ 	YY_BREAK
+ case 64:
+ YY_RULE_SETUP
+-#line 140 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 140 "sipgen/metasrc/lexer.l"
+ {return TK_LOGICAL_OR;}
+ 	YY_BREAK
+ case 65:
+ YY_RULE_SETUP
+-#line 141 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 141 "sipgen/metasrc/lexer.l"
+ {return TK_PYOBJECT;}
+ 	YY_BREAK
+ case 66:
+ YY_RULE_SETUP
+-#line 142 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 142 "sipgen/metasrc/lexer.l"
+ {return TK_PYTUPLE;}
+ 	YY_BREAK
+ case 67:
+ YY_RULE_SETUP
+-#line 143 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 143 "sipgen/metasrc/lexer.l"
+ {return TK_PYLIST;}
+ 	YY_BREAK
+ case 68:
+ YY_RULE_SETUP
+-#line 144 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 144 "sipgen/metasrc/lexer.l"
+ {return TK_PYDICT;}
+ 	YY_BREAK
+ case 69:
+ YY_RULE_SETUP
+-#line 145 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 145 "sipgen/metasrc/lexer.l"
+ {return TK_PYCALLABLE;}
+ 	YY_BREAK
+ case 70:
+ YY_RULE_SETUP
+-#line 146 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 146 "sipgen/metasrc/lexer.l"
+ {return TK_PYSLICE;}
+ 	YY_BREAK
+ case 71:
+ YY_RULE_SETUP
+-#line 147 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 147 "sipgen/metasrc/lexer.l"
+ {return TK_PYTYPE;}
+ 	YY_BREAK
+ case 72:
+ YY_RULE_SETUP
+-#line 148 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 148 "sipgen/metasrc/lexer.l"
+ {return TK_PYBUFFER;}
+ 	YY_BREAK
+ case 73:
+ YY_RULE_SETUP
+-#line 149 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 149 "sipgen/metasrc/lexer.l"
+ {return TK_SIPSIGNAL;}
+ 	YY_BREAK
+ case 74:
+ YY_RULE_SETUP
+-#line 150 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 150 "sipgen/metasrc/lexer.l"
+ {return TK_SIPSLOT;}
+ 	YY_BREAK
+ case 75:
+ YY_RULE_SETUP
+-#line 151 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 151 "sipgen/metasrc/lexer.l"
+ {return TK_SIPANYSLOT;}
+ 	YY_BREAK
+ case 76:
+ YY_RULE_SETUP
+-#line 152 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 152 "sipgen/metasrc/lexer.l"
+ {return TK_SIPRXCON;}
+ 	YY_BREAK
+ case 77:
+ YY_RULE_SETUP
+-#line 153 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 153 "sipgen/metasrc/lexer.l"
+ {return TK_SIPRXDIS;}
+ 	YY_BREAK
+ case 78:
+ YY_RULE_SETUP
+-#line 154 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 154 "sipgen/metasrc/lexer.l"
+ {return TK_SIPSLOTCON;}
+ 	YY_BREAK
+ case 79:
+ YY_RULE_SETUP
+-#line 155 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 155 "sipgen/metasrc/lexer.l"
+ {return TK_SIPSLOTDIS;}
+ 	YY_BREAK
+ case 80:
+ YY_RULE_SETUP
+-#line 156 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 156 "sipgen/metasrc/lexer.l"
+ {return TK_SIPSSIZET;}
+ 	YY_BREAK
+ case 81:
+ YY_RULE_SETUP
+-#line 157 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 157 "sipgen/metasrc/lexer.l"
+ {return TK_QOBJECT;}
+ 	YY_BREAK
+ case 82:
+ YY_RULE_SETUP
+-#line 158 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 158 "sipgen/metasrc/lexer.l"
+ {return TK_ELLIPSIS;}
+ 	YY_BREAK
+ case 83:
+ YY_RULE_SETUP
+-#line 160 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 160 "sipgen/metasrc/lexer.l"
+ {return TK_FORMAT;}
+ 	YY_BREAK
+ case 84:
+ YY_RULE_SETUP
+-#line 161 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 161 "sipgen/metasrc/lexer.l"
+ {return TK_GET;}
+ 	YY_BREAK
+ case 85:
+ YY_RULE_SETUP
+-#line 162 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 162 "sipgen/metasrc/lexer.l"
+ {return TK_ID;}
+ 	YY_BREAK
+ case 86:
+ YY_RULE_SETUP
+-#line 163 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 163 "sipgen/metasrc/lexer.l"
+ {return TK_KWARGS;}
+ 	YY_BREAK
+ case 87:
+ YY_RULE_SETUP
+-#line 164 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 164 "sipgen/metasrc/lexer.l"
+ {return TK_LANGUAGE;}
+ 	YY_BREAK
+ case 88:
+ YY_RULE_SETUP
+-#line 165 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 165 "sipgen/metasrc/lexer.l"
+ {return TK_LICENSEE;}
+ 	YY_BREAK
+ case 89:
+ YY_RULE_SETUP
+-#line 166 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 166 "sipgen/metasrc/lexer.l"
+ {return TK_NAME;}
+ 	YY_BREAK
+ case 90:
+ YY_RULE_SETUP
+-#line 167 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 167 "sipgen/metasrc/lexer.l"
+ {return TK_OPTIONAL;}
+ 	YY_BREAK
+ case 91:
+ YY_RULE_SETUP
+-#line 168 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 168 "sipgen/metasrc/lexer.l"
+ {return TK_ORDER;}
+ 	YY_BREAK
+ case 92:
+ YY_RULE_SETUP
+-#line 169 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 169 "sipgen/metasrc/lexer.l"
+ {return TK_REMOVELEADING;}
+ 	YY_BREAK
+ case 93:
+ YY_RULE_SETUP
+-#line 170 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 170 "sipgen/metasrc/lexer.l"
+ {return TK_SET;}
+ 	YY_BREAK
+ case 94:
+ YY_RULE_SETUP
+-#line 171 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 171 "sipgen/metasrc/lexer.l"
+ {return TK_SIGNATURE;}
+ 	YY_BREAK
+ case 95:
+ YY_RULE_SETUP
+-#line 172 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 172 "sipgen/metasrc/lexer.l"
+ {return TK_TIMESTAMP;}
+ 	YY_BREAK
+ case 96:
+ YY_RULE_SETUP
+-#line 173 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 173 "sipgen/metasrc/lexer.l"
+ {return TK_TYPE;}
+ 	YY_BREAK
+ case 97:
+ YY_RULE_SETUP
+-#line 174 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 174 "sipgen/metasrc/lexer.l"
+ {return TK_USEARGNAMES;}
+ 	YY_BREAK
+ case 98:
+ YY_RULE_SETUP
+-#line 175 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 175 "sipgen/metasrc/lexer.l"
+ {return TK_USELIMITEDAPI;}
+ 	YY_BREAK
+ case 99:
+ YY_RULE_SETUP
+-#line 176 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 176 "sipgen/metasrc/lexer.l"
+ {return TK_ALLRAISEPYEXC;}
+ 	YY_BREAK
+ case 100:
+ YY_RULE_SETUP
+-#line 177 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 177 "sipgen/metasrc/lexer.l"
+ {return TK_CALLSUPERINIT;}
+ 	YY_BREAK
+ case 101:
+ YY_RULE_SETUP
+-#line 178 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 178 "sipgen/metasrc/lexer.l"
+ {return TK_DEFERRORHANDLER;}
+ 	YY_BREAK
+ case 102:
+ YY_RULE_SETUP
+-#line 179 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 179 "sipgen/metasrc/lexer.l"
+ {return TK_VERSION;}
+ 	YY_BREAK
+ case 103:
+ YY_RULE_SETUP
+-#line 181 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 181 "sipgen/metasrc/lexer.l"
+ {return TK_TRUE_VALUE;}
+ 	YY_BREAK
+ case 104:
+ YY_RULE_SETUP
+-#line 182 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 182 "sipgen/metasrc/lexer.l"
+ {return TK_FALSE_VALUE;}
+ 	YY_BREAK
+ case 105:
+ YY_RULE_SETUP
+-#line 185 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 185 "sipgen/metasrc/lexer.l"
+ {
+     /* Ignore whitespace. */
+     ;
+@@ -2376,7 +2386,7 @@
+ 	YY_BREAK
+ case 106:
+ YY_RULE_SETUP
+-#line 190 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 190 "sipgen/metasrc/lexer.l"
+ {
+     /*
+      * Maintain the parenthesis depth so that we don't enter the 'code' state
+@@ -2391,7 +2401,7 @@
+ 	YY_BREAK
+ case 107:
+ YY_RULE_SETUP
+-#line 202 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 202 "sipgen/metasrc/lexer.l"
+ {
+     /* Maintain the parenthesis depth. */
+     --parenDepth;
+@@ -2404,7 +2414,7 @@
+ case 108:
+ /* rule 108 can match eol */
+ YY_RULE_SETUP
+-#line 211 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 211 "sipgen/metasrc/lexer.l"
+ {
+     /* Maintain the line number. */
+     ++inputFileStack[currentFile].sloc.linenr;
+@@ -2417,7 +2427,7 @@
+ 	YY_BREAK
+ case 109:
+ YY_RULE_SETUP
+-#line 221 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 221 "sipgen/metasrc/lexer.l"
+ {
+     /* Ignore C++ style comments. */
+     ;
+@@ -2425,7 +2435,7 @@
+ 	YY_BREAK
+ case 110:
+ YY_RULE_SETUP
+-#line 227 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 227 "sipgen/metasrc/lexer.l"
+ {
+     /* A signed decimal number. */
+     yylval.number = strtol(yytext,NULL,0);
+@@ -2434,7 +2444,7 @@
+ 	YY_BREAK
+ case 111:
+ YY_RULE_SETUP
+-#line 234 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 234 "sipgen/metasrc/lexer.l"
+ {
+     /* A floating point number. */
+     yylval.real = strtod(yytext,NULL);
+@@ -2443,7 +2453,7 @@
+ 	YY_BREAK
+ case 112:
+ YY_RULE_SETUP
+-#line 241 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 241 "sipgen/metasrc/lexer.l"
+ {
+     /* An unsigned hexadecimal number. */
+     yylval.number = strtol(yytext,NULL,16);
+@@ -2452,7 +2462,7 @@
+ 	YY_BREAK
+ case 113:
+ YY_RULE_SETUP
+-#line 248 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 248 "sipgen/metasrc/lexer.l"
+ {
+     /* An identifier name. */
+     yylval.text = sipStrdup(yytext);
+@@ -2461,7 +2471,7 @@
+ 	YY_BREAK
+ case 114:
+ YY_RULE_SETUP
+-#line 255 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 255 "sipgen/metasrc/lexer.l"
+ {
+     /* A relative pathname. */
+     yylval.text = sipStrdup(yytext);
+@@ -2471,7 +2481,7 @@
+ case 115:
+ /* rule 115 can match eol */
+ YY_RULE_SETUP
+-#line 262 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 262 "sipgen/metasrc/lexer.l"
+ {
+     /* A double-quoted string. */
+     char ch, *dp, *sp;
+@@ -2510,7 +2520,7 @@
+ case 116:
+ /* rule 116 can match eol */
+ YY_RULE_SETUP
+-#line 298 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 298 "sipgen/metasrc/lexer.l"
+ {
+     /* A single-quoted character. */
+     if (strlen(yytext) != 3)
+@@ -2523,7 +2533,7 @@
+ 	YY_BREAK
+ case 117:
+ YY_RULE_SETUP
+-#line 309 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 309 "sipgen/metasrc/lexer.l"
+ {
+     /* Ignore C-style comments. */
+     yy_push_state(ccomment);
+@@ -2532,28 +2542,28 @@
+ case 118:
+ /* rule 118 can match eol */
+ YY_RULE_SETUP
+-#line 313 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 313 "sipgen/metasrc/lexer.l"
+ {
+     ++inputFileStack[currentFile].sloc.linenr;
+ }
+ 	YY_BREAK
+ case 119:
+ YY_RULE_SETUP
+-#line 316 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 316 "sipgen/metasrc/lexer.l"
+ {
+     yy_pop_state();
+ }
+ 	YY_BREAK
+ case 120:
+ YY_RULE_SETUP
+-#line 319 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 319 "sipgen/metasrc/lexer.l"
+ {
+     ;
+ }
+ 	YY_BREAK
+ case 121:
+ YY_RULE_SETUP
+-#line 324 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 324 "sipgen/metasrc/lexer.l"
+ {
+     /* The software license. */
+     codeIdx = 0;
+@@ -2562,7 +2572,7 @@
+ 	YY_BREAK
+ case 122:
+ YY_RULE_SETUP
+-#line 330 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 330 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of a from-type code block. */
+     codeIdx = 0;
+@@ -2571,7 +2581,7 @@
+ 	YY_BREAK
+ case 123:
+ YY_RULE_SETUP
+-#line 336 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 336 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of a to-type code block. */
+     codeIdx = 0;
+@@ -2580,7 +2590,7 @@
+ 	YY_BREAK
+ case 124:
+ YY_RULE_SETUP
+-#line 342 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 342 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of a to-sub-class code block. */
+     codeIdx = 0;
+@@ -2589,7 +2599,7 @@
+ 	YY_BREAK
+ case 125:
+ YY_RULE_SETUP
+-#line 348 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 348 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of an exported header code block. */
+     codeIdx = 0;
+@@ -2598,7 +2608,7 @@
+ 	YY_BREAK
+ case 126:
+ YY_RULE_SETUP
+-#line 354 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 354 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of part of an extract. */
+     codeIdx = 0;
+@@ -2610,7 +2620,7 @@
+ 	YY_BREAK
+ case 127:
+ YY_RULE_SETUP
+-#line 363 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 363 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of a module header code block. */
+     codeIdx = 0;
+@@ -2619,7 +2629,7 @@
+ 	YY_BREAK
+ case 128:
+ YY_RULE_SETUP
+-#line 369 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 369 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of a type header code block. */
+     codeIdx = 0;
+@@ -2628,7 +2638,7 @@
+ 	YY_BREAK
+ case 129:
+ YY_RULE_SETUP
+-#line 375 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 375 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of a pre-initialisation code block. */
+     codeIdx = 0;
+@@ -2637,7 +2647,7 @@
+ 	YY_BREAK
+ case 130:
+ YY_RULE_SETUP
+-#line 381 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 381 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of an initialisation code block. */
+     codeIdx = 0;
+@@ -2646,7 +2656,7 @@
+ 	YY_BREAK
+ case 131:
+ YY_RULE_SETUP
+-#line 387 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 387 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of a post-initialisation code block. */
+     codeIdx = 0;
+@@ -2655,7 +2665,7 @@
+ 	YY_BREAK
+ case 132:
+ YY_RULE_SETUP
+-#line 393 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 393 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of a class finalisation code block. */
+     codeIdx = 0;
+@@ -2664,7 +2674,7 @@
+ 	YY_BREAK
+ case 133:
+ YY_RULE_SETUP
+-#line 399 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 399 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of a unit code block. */
+     codeIdx = 0;
+@@ -2673,7 +2683,7 @@
+ 	YY_BREAK
+ case 134:
+ YY_RULE_SETUP
+-#line 405 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 405 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of a unit post-include code block. */
+     codeIdx = 0;
+@@ -2682,7 +2692,7 @@
+ 	YY_BREAK
+ case 135:
+ YY_RULE_SETUP
+-#line 411 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 411 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of a module code block. */
+     codeIdx = 0;
+@@ -2691,7 +2701,7 @@
+ 	YY_BREAK
+ case 136:
+ YY_RULE_SETUP
+-#line 417 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 417 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of a type code block. */
+     codeIdx = 0;
+@@ -2700,7 +2710,7 @@
+ 	YY_BREAK
+ case 137:
+ YY_RULE_SETUP
+-#line 423 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 423 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of a C++ method code block. */
+     codeIdx = 0;
+@@ -2709,7 +2719,7 @@
+ 	YY_BREAK
+ case 138:
+ YY_RULE_SETUP
+-#line 429 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 429 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of a C++ code block to insert before the MethodCode. */
+     codeIdx = 0;
+@@ -2718,7 +2728,7 @@
+ 	YY_BREAK
+ case 139:
+ YY_RULE_SETUP
+-#line 435 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 435 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of a C++ virtual call code block. */
+     codeIdx = 0;
+@@ -2727,7 +2737,7 @@
+ 	YY_BREAK
+ case 140:
+ YY_RULE_SETUP
+-#line 441 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 441 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of a C++ virtual code block. */
+     codeIdx = 0;
+@@ -2736,7 +2746,7 @@
+ 	YY_BREAK
+ case 141:
+ YY_RULE_SETUP
+-#line 447 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 447 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of a traverse code block. */
+     codeIdx = 0;
+@@ -2745,7 +2755,7 @@
+ 	YY_BREAK
+ case 142:
+ YY_RULE_SETUP
+-#line 453 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 453 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of a clear code block. */
+     codeIdx = 0;
+@@ -2754,7 +2764,7 @@
+ 	YY_BREAK
+ case 143:
+ YY_RULE_SETUP
+-#line 459 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 459 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of a get buffer code block. */
+     codeIdx = 0;
+@@ -2763,7 +2773,7 @@
+ 	YY_BREAK
+ case 144:
+ YY_RULE_SETUP
+-#line 465 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 465 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of a release buffer code block. */
+     codeIdx = 0;
+@@ -2772,7 +2782,7 @@
+ 	YY_BREAK
+ case 145:
+ YY_RULE_SETUP
+-#line 471 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 471 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of a read buffer code block. */
+     codeIdx = 0;
+@@ -2781,7 +2791,7 @@
+ 	YY_BREAK
+ case 146:
+ YY_RULE_SETUP
+-#line 477 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 477 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of a write buffer code block. */
+     codeIdx = 0;
+@@ -2790,7 +2800,7 @@
+ 	YY_BREAK
+ case 147:
+ YY_RULE_SETUP
+-#line 483 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 483 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of a segment count code block. */
+     codeIdx = 0;
+@@ -2799,7 +2809,7 @@
+ 	YY_BREAK
+ case 148:
+ YY_RULE_SETUP
+-#line 489 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 489 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of a char buffer code block. */
+     codeIdx = 0;
+@@ -2808,7 +2818,7 @@
+ 	YY_BREAK
+ case 149:
+ YY_RULE_SETUP
+-#line 495 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 495 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of a create instance code block. */
+     codeIdx = 0;
+@@ -2817,7 +2827,7 @@
+ 	YY_BREAK
+ case 150:
+ YY_RULE_SETUP
+-#line 501 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 501 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of a pickle code block. */
+     codeIdx = 0;
+@@ -2826,7 +2836,7 @@
+ 	YY_BREAK
+ case 151:
+ YY_RULE_SETUP
+-#line 507 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 507 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of a pre-Python code block. */
+     deprecated("%PrePythonCode is deprecated");
+@@ -2837,7 +2847,7 @@
+ 	YY_BREAK
+ case 152:
+ YY_RULE_SETUP
+-#line 515 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 515 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of a raise Python exception code block. */
+     codeIdx = 0;
+@@ -2846,7 +2856,7 @@
+ 	YY_BREAK
+ case 153:
+ YY_RULE_SETUP
+-#line 521 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 521 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of an exported type hint code block. */
+     codeIdx = 0;
+@@ -2855,7 +2865,7 @@
+ 	YY_BREAK
+ case 154:
+ YY_RULE_SETUP
+-#line 527 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 527 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of a type hint code block. */
+     codeIdx = 0;
+@@ -2864,7 +2874,7 @@
+ 	YY_BREAK
+ case 155:
+ YY_RULE_SETUP
+-#line 533 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 533 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of a docstring block. */
+     codeIdx = 0;
+@@ -2876,7 +2886,7 @@
+ 	YY_BREAK
+ case 156:
+ YY_RULE_SETUP
+-#line 542 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 542 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of a documentation block. */
+     deprecated("%Doc is deprecated, use %Extract instead");
+@@ -2887,7 +2897,7 @@
+ 	YY_BREAK
+ case 157:
+ YY_RULE_SETUP
+-#line 550 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 550 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of an exported documentation block. */
+     deprecated("%ExportedDoc is deprecated, use %Extract instead");
+@@ -2898,7 +2908,7 @@
+ 	YY_BREAK
+ case 158:
+ YY_RULE_SETUP
+-#line 558 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 558 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of a Makefile code block. */
+     deprecated("%Makefile is deprecated");
+@@ -2909,7 +2919,7 @@
+ 	YY_BREAK
+ case 159:
+ YY_RULE_SETUP
+-#line 566 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 566 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of an access code block. */
+     codeIdx = 0;
+@@ -2918,7 +2928,7 @@
+ 	YY_BREAK
+ case 160:
+ YY_RULE_SETUP
+-#line 572 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 572 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of a get code block. */
+     codeIdx = 0;
+@@ -2927,7 +2937,7 @@
+ 	YY_BREAK
+ case 161:
+ YY_RULE_SETUP
+-#line 578 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 578 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of a set code block. */
+     codeIdx = 0;
+@@ -2936,7 +2946,7 @@
+ 	YY_BREAK
+ case 162:
+ YY_RULE_SETUP
+-#line 584 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 584 "sipgen/metasrc/lexer.l"
+ {
+     /* The start of part of a virtual error handler. */
+     codeIdx = 0;
+@@ -2948,7 +2958,7 @@
+ 	YY_BREAK
+ case 163:
+ YY_RULE_SETUP
+-#line 593 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 593 "sipgen/metasrc/lexer.l"
+ {
+     /* The end of a code block. */
+     BEGIN INITIAL;
+@@ -2959,7 +2969,7 @@
+ case 164:
+ /* rule 164 can match eol */
+ YY_RULE_SETUP
+-#line 600 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 600 "sipgen/metasrc/lexer.l"
+ {
+     /* The end of a code line . */
+     struct inputFile *ifp;
+@@ -2981,7 +2991,7 @@
+ 	YY_BREAK
+ case 165:
+ YY_RULE_SETUP
+-#line 619 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 619 "sipgen/metasrc/lexer.l"
+ {
+     /* The contents of a code line. */
+     if (codeIdx == MAX_CODE_LINE_LENGTH)
+@@ -2992,7 +3002,7 @@
+ 	YY_BREAK
+ case 166:
+ YY_RULE_SETUP
+-#line 627 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 627 "sipgen/metasrc/lexer.l"
+ {
+     /* Anything else is returned as is. */
+     return yytext[0];
+@@ -3000,10 +3010,10 @@
+ 	YY_BREAK
+ case 167:
+ YY_RULE_SETUP
+-#line 632 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 632 "sipgen/metasrc/lexer.l"
+ ECHO;
+ 	YY_BREAK
+-#line 3007 "sip-4.19.12/sipgen/lexer.c"
++#line 3017 "sipgen/lexer.c"
+ case YY_STATE_EOF(INITIAL):
+ case YY_STATE_EOF(code):
+ case YY_STATE_EOF(ccomment):
+@@ -3138,6 +3148,7 @@
+ 			"fatal flex scanner internal error--no action found" );
+ 	} /* end of action switch */
+ 		} /* end of scanning one token */
++	} /* end of user's declarations */
+ } /* end of yylex */
+ 
+ /* yy_get_next_buffer - try to read in a new buffer
+@@ -3149,9 +3160,9 @@
+  */
+ static int yy_get_next_buffer (void)
+ {
+-    	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+-	register char *source = (yytext_ptr);
+-	register int number_to_move, i;
++    	char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
++	char *source = (yytext_ptr);
++	yy_size_t number_to_move, i;
+ 	int ret_val;
+ 
+ 	if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
+@@ -3180,7 +3191,7 @@
+ 	/* Try to read more data. */
+ 
+ 	/* First move last chars to start of buffer. */
+-	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
++	number_to_move = (yy_size_t) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+ 
+ 	for ( i = 0; i < number_to_move; ++i )
+ 		*(dest++) = *(source++);
+@@ -3193,21 +3204,21 @@
+ 
+ 	else
+ 		{
+-			yy_size_t num_to_read =
++			int num_to_read =
+ 			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+ 
+ 		while ( num_to_read <= 0 )
+ 			{ /* Not enough room in the buffer - grow it. */
+ 
+ 			/* just a shorter name for the current buffer */
+-			YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
++			YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;
+ 
+ 			int yy_c_buf_p_offset =
+ 				(int) ((yy_c_buf_p) - b->yy_ch_buf);
+ 
+ 			if ( b->yy_is_our_buffer )
+ 				{
+-				yy_size_t new_size = b->yy_buf_size * 2;
++				int new_size = b->yy_buf_size * 2;
+ 
+ 				if ( new_size <= 0 )
+ 					b->yy_buf_size += b->yy_buf_size / 8;
+@@ -3216,11 +3227,11 @@
+ 
+ 				b->yy_ch_buf = (char *)
+ 					/* Include room in for 2 EOB chars. */
+-					yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
++					yyrealloc((void *) b->yy_ch_buf,(yy_size_t) (b->yy_buf_size + 2)  );
+ 				}
+ 			else
+ 				/* Can't grow it, we don't own it. */
+-				b->yy_ch_buf = 0;
++				b->yy_ch_buf = NULL;
+ 
+ 			if ( ! b->yy_ch_buf )
+ 				YY_FATAL_ERROR(
+@@ -3262,10 +3273,10 @@
+ 	else
+ 		ret_val = EOB_ACT_CONTINUE_SCAN;
+ 
+-	if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
++	if ((int) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+ 		/* Extend the array by 50%, plus the number we really need. */
+-		yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+-		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
++		int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
++		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,(yy_size_t) new_size  );
+ 		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+ 			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+ 	}
+@@ -3283,15 +3294,15 @@
+ 
+     static yy_state_type yy_get_previous_state (void)
+ {
+-	register yy_state_type yy_current_state;
+-	register char *yy_cp;
++	yy_state_type yy_current_state;
++	char *yy_cp;
+     
+ 	yy_current_state = (yy_start);
+ 	yy_current_state += YY_AT_BOL();
+ 
+ 	for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
+ 		{
+-		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
++		YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+ 		if ( yy_accept[yy_current_state] )
+ 			{
+ 			(yy_last_accepting_state) = yy_current_state;
+@@ -3303,7 +3314,7 @@
+ 			if ( yy_current_state >= 1231 )
+ 				yy_c = yy_meta[(unsigned int) yy_c];
+ 			}
+-		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
++		yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
+ 		}
+ 
+ 	return yy_current_state;
+@@ -3316,10 +3327,10 @@
+  */
+     static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
+ {
+-	register int yy_is_jam;
+-    	register char *yy_cp = (yy_c_buf_p);
++	int yy_is_jam;
++    	char *yy_cp = (yy_c_buf_p);
+ 
+-	register YY_CHAR yy_c = 1;
++	YY_CHAR yy_c = 1;
+ 	if ( yy_accept[yy_current_state] )
+ 		{
+ 		(yy_last_accepting_state) = yy_current_state;
+@@ -3331,15 +3342,17 @@
+ 		if ( yy_current_state >= 1231 )
+ 			yy_c = yy_meta[(unsigned int) yy_c];
+ 		}
+-	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
++	yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
+ 	yy_is_jam = (yy_current_state == 1230);
+ 
+-	return yy_is_jam ? 0 : yy_current_state;
++		return yy_is_jam ? 0 : yy_current_state;
+ }
+ 
+-    static void yyunput (int c, register char * yy_bp )
++#ifndef YY_NO_UNPUT
++
++    static void yyunput (int c, char * yy_bp )
+ {
+-	register char *yy_cp;
++	char *yy_cp;
+     
+     yy_cp = (yy_c_buf_p);
+ 
+@@ -3349,10 +3362,10 @@
+ 	if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+ 		{ /* need to shift things up to make room */
+ 		/* +2 for EOB chars. */
+-		register yy_size_t number_to_move = (yy_n_chars) + 2;
+-		register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
++		int number_to_move = (yy_n_chars) + 2;
++		char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+ 					YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
+-		register char *source =
++		char *source =
+ 				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
+ 
+ 		while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+@@ -3361,7 +3374,7 @@
+ 		yy_cp += (int) (dest - source);
+ 		yy_bp += (int) (dest - source);
+ 		YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+-			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
++			(yy_n_chars) = (int) YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+ 
+ 		if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+ 			YY_FATAL_ERROR( "flex scanner push-back overflow" );
+@@ -3374,6 +3387,8 @@
+ 	(yy_c_buf_p) = yy_cp;
+ }
+ 
++#endif
++
+ #ifndef YY_NO_INPUT
+ #ifdef __cplusplus
+     static int yyinput (void)
+@@ -3398,7 +3413,7 @@
+ 
+ 		else
+ 			{ /* need more input */
+-			yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
++			int offset = (yy_c_buf_p) - (yytext_ptr);
+ 			++(yy_c_buf_p);
+ 
+ 			switch ( yy_get_next_buffer(  ) )
+@@ -3530,7 +3545,7 @@
+ 	/* yy_ch_buf has to be 2 characters longer than the size given because
+ 	 * we need to put in 2 end-of-buffer characters.
+ 	 */
+-	b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2  );
++	b->yy_ch_buf = (char *) yyalloc((yy_size_t) (b->yy_buf_size + 2)  );
+ 	if ( ! b->yy_ch_buf )
+ 		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+ 
+@@ -3560,10 +3575,6 @@
+ 	yyfree((void *) b  );
+ }
+ 
+-#ifndef __cplusplus
+-extern int isatty (int );
+-#endif /* __cplusplus */
+-    
+ /* Initializes or reinitializes a buffer.
+  * This function is sometimes called more than once on the same buffer,
+  * such as during a yyrestart() or at EOF.
+@@ -3676,7 +3687,7 @@
+  */
+ static void yyensure_buffer_stack (void)
+ {
+-	yy_size_t num_to_alloc;
++	int num_to_alloc;
+     
+ 	if (!(yy_buffer_stack)) {
+ 
+@@ -3684,7 +3695,7 @@
+ 		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
+ 		 * immediate realloc on the next call.
+          */
+-		num_to_alloc = 1;
++      num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
+ 		(yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
+ 								(num_to_alloc * sizeof(struct yy_buffer_state*)
+ 								);
+@@ -3701,7 +3712,7 @@
+ 	if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
+ 
+ 		/* Increase the buffer to prepare for a possible push. */
+-		int grow_size = 8 /* arbitrary grow size */;
++		yy_size_t grow_size = 8 /* arbitrary grow size */;
+ 
+ 		num_to_alloc = (yy_buffer_stack_max) + grow_size;
+ 		(yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
+@@ -3731,16 +3742,16 @@
+ 	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
+ 	     base[size-1] != YY_END_OF_BUFFER_CHAR )
+ 		/* They forgot to leave room for the EOB's. */
+-		return 0;
++		return NULL;
+ 
+ 	b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
+ 	if ( ! b )
+ 		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+ 
+-	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
++	b->yy_buf_size = (int) (size - 2);	/* "- 2" to take care of EOB's */
+ 	b->yy_buf_pos = b->yy_ch_buf = base;
+ 	b->yy_is_our_buffer = 0;
+-	b->yy_input_file = 0;
++	b->yy_input_file = NULL;
+ 	b->yy_n_chars = b->yy_buf_size;
+ 	b->yy_is_interactive = 0;
+ 	b->yy_at_bol = 1;
+@@ -3763,24 +3774,25 @@
+ YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
+ {
+     
+-	return yy_scan_bytes(yystr,strlen(yystr) );
++	return yy_scan_bytes(yystr,(int) strlen(yystr) );
+ }
+ 
+ /** Setup the input buffer state to scan the given bytes. The next call to yylex() will
+  * scan from a @e copy of @a bytes.
+- * @param bytes the byte buffer to scan
+- * @param len the number of bytes in the buffer pointed to by @a bytes.
++ * @param yybytes the byte buffer to scan
++ * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
+  * 
+  * @return the newly allocated buffer state object.
+  */
+-YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
++YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
+ {
+ 	YY_BUFFER_STATE b;
+ 	char *buf;
+-	yy_size_t n, i;
++	yy_size_t n;
++	yy_size_t i;
+     
+ 	/* Get memory for full buffer, including space for trailing EOB's. */
+-	n = _yybytes_len + 2;
++	n = (yy_size_t) _yybytes_len + 2;
+ 	buf = (char *) yyalloc(n  );
+ 	if ( ! buf )
+ 		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+@@ -3802,14 +3814,14 @@
+ 	return b;
+ }
+ 
+-    static void yy_push_state (int  new_state )
++    static void yy_push_state (int  _new_state )
+ {
+     	if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) )
+ 		{
+ 		yy_size_t new_size;
+ 
+ 		(yy_start_stack_depth) += YY_START_STACK_INCR;
+-		new_size = (yy_start_stack_depth) * sizeof( int );
++		new_size = (yy_size_t) (yy_start_stack_depth) * sizeof( int );
+ 
+ 		if ( ! (yy_start_stack) )
+ 			(yy_start_stack) = (int *) yyalloc(new_size  );
+@@ -3823,7 +3835,7 @@
+ 
+ 	(yy_start_stack)[(yy_start_stack_ptr)++] = YY_START;
+ 
+-	BEGIN(new_state);
++	BEGIN(_new_state);
+ }
+ 
+     static void yy_pop_state  (void)
+@@ -3843,9 +3855,9 @@
+ #define YY_EXIT_FAILURE 2
+ #endif
+ 
+-static void yy_fatal_error (yyconst char* msg )
++static void yynoreturn yy_fatal_error (yyconst char* msg )
+ {
+-    	(void) fprintf( stderr, "%s\n", msg );
++			(void) fprintf( stderr, "%s\n", msg );
+ 	exit( YY_EXIT_FAILURE );
+ }
+ 
+@@ -3856,7 +3868,7 @@
+ 	do \
+ 		{ \
+ 		/* Undo effects of setting up yytext. */ \
+-        int yyless_macro_arg = (n); \
++        yy_size_t yyless_macro_arg = (n); \
+         YY_LESS_LINENO(yyless_macro_arg);\
+ 		yytext[yyleng] = (yy_hold_char); \
+ 		(yy_c_buf_p) = yytext + yyless_macro_arg; \
+@@ -3896,7 +3908,7 @@
+ /** Get the length of the current token.
+  * 
+  */
+-yy_size_t yyget_leng  (void)
++int yyget_leng  (void)
+ {
+         return yyleng;
+ }
+@@ -3911,29 +3923,29 @@
+ }
+ 
+ /** Set the current line number.
+- * @param line_number
++ * @param _line_number line number
+  * 
+  */
+-void yyset_lineno (int  line_number )
++void yyset_lineno (int  _line_number )
+ {
+     
+-    yylineno = line_number;
++    yylineno = _line_number;
+ }
+ 
+ /** Set the input stream. This does not discard the current
+  * input buffer.
+- * @param in_str A readable stream.
++ * @param _in_str A readable stream.
+  * 
+  * @see yy_switch_to_buffer
+  */
+-void yyset_in (FILE *  in_str )
++void yyset_in (FILE *  _in_str )
+ {
+-        yyin = in_str ;
++        yyin = _in_str ;
+ }
+ 
+-void yyset_out (FILE *  out_str )
++void yyset_out (FILE *  _out_str )
+ {
+-        yyout = out_str ;
++        yyout = _out_str ;
+ }
+ 
+ int yyget_debug  (void)
+@@ -3941,9 +3953,9 @@
+         return yy_flex_debug;
+ }
+ 
+-void yyset_debug (int  bdebug )
++void yyset_debug (int  _bdebug )
+ {
+-        yy_flex_debug = bdebug ;
++        yy_flex_debug = _bdebug ;
+ }
+ 
+ static int yy_init_globals (void)
+@@ -3952,10 +3964,10 @@
+      * This function is called from yylex_destroy(), so don't allocate here.
+      */
+ 
+-    (yy_buffer_stack) = 0;
++    (yy_buffer_stack) = NULL;
+     (yy_buffer_stack_top) = 0;
+     (yy_buffer_stack_max) = 0;
+-    (yy_c_buf_p) = (char *) 0;
++    (yy_c_buf_p) = NULL;
+     (yy_init) = 0;
+     (yy_start) = 0;
+ 
+@@ -3968,8 +3980,8 @@
+     yyin = stdin;
+     yyout = stdout;
+ #else
+-    yyin = (FILE *) 0;
+-    yyout = (FILE *) 0;
++    yyin = NULL;
++    yyout = NULL;
+ #endif
+ 
+     /* For future reference: Set errno on error, since we are called by
+@@ -4011,7 +4023,8 @@
+ #ifndef yytext_ptr
+ static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
+ {
+-	register int i;
++		
++	int i;
+ 	for ( i = 0; i < n; ++i )
+ 		s1[i] = s2[i];
+ }
+@@ -4020,7 +4033,7 @@
+ #ifdef YY_NEED_STRLEN
+ static int yy_flex_strlen (yyconst char * s )
+ {
+-	register int n;
++	int n;
+ 	for ( n = 0; s[n]; ++n )
+ 		;
+ 
+@@ -4030,11 +4043,12 @@
+ 
+ void *yyalloc (yy_size_t  size )
+ {
+-	return (void *) malloc( size );
++			return malloc(size);
+ }
+ 
+ void *yyrealloc  (void * ptr, yy_size_t  size )
+ {
++		
+ 	/* The cast to (char *) in the following accommodates both
+ 	 * implementations that use char* generic pointers, and those
+ 	 * that use void* generic pointers.  It works with the latter
+@@ -4042,17 +4056,17 @@
+ 	 * any pointer type to void*, and deal with argument conversions
+ 	 * as though doing an assignment.
+ 	 */
+-	return (void *) realloc( (char *) ptr, size );
++	return realloc(ptr, size);
+ }
+ 
+ void yyfree (void * ptr )
+ {
+-	free( (char *) ptr );	/* see yyrealloc() for (char *) cast */
++			free( (char *) ptr );	/* see yyrealloc() for (char *) cast */
+ }
+ 
+ #define YYTABLES_NAME "yytables"
+ 
+-#line 632 "sip-4.19.12/sipgen/metasrc/lexer.l"
++#line 632 "sipgen/metasrc/lexer.l"
+ 
+ 
+ 
+diff -Nurd '--exclude=doc' '--exclude=.hg*' ./sip-4.19.12.orig/sipgen/metasrc/parser.y sip/sipgen/metasrc/parser.y
+--- ./sip-4.19.12.orig/sipgen/metasrc/parser.y	2018-07-05 05:54:58.000000000 -0400
++++ sip/sipgen/metasrc/parser.y	2018-09-24 13:12:20.673276084 -0400
+@@ -7586,7 +7586,7 @@
+     if (getDeprecated(optflgs))
+         setIsDeprecated(od);
+ 
+-    if (!isPrivate(od) && !isSignal(od) && (od->common->slot == no_slot || od->common->slot == call_slot))
++    if (!isPrivate(od) && (od->common->slot == no_slot || od->common->slot == call_slot))
+     {
+         od->kwargs = keywordArgs(mod, optflgs, &od->pysig, hasProtected(od->common));
+ 
+@@ -7598,7 +7598,7 @@
+          * we need to make sure that any other overloads' keyword argument
+          * names are marked as used.
+          */
+-        if (isProtected(od) && !inMainModule())
++        if (!isSignal(od) && isProtected(od) && !inMainModule())
+         {
+             overDef *kwod;
+ 
+diff -Nurd '--exclude=doc' '--exclude=.hg*' ./sip-4.19.12.orig/sipgen/parser.c sip/sipgen/parser.c
+--- ./sip-4.19.12.orig/sipgen/parser.c	2018-07-05 05:55:19.000000000 -0400
++++ sip/sipgen/parser.c	2018-09-18 18:12:23.641053271 -0400
+@@ -1,14 +1,13 @@
+-/* A Bison parser, made by GNU Bison 2.3.  */
++/* A Bison parser, made by GNU Bison 3.0.4.  */
+ 
+-/* Skeleton implementation for Bison's Yacc-like parsers in C
++/* Bison implementation for Yacc-like parsers in C
+ 
+-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+-   Free Software Foundation, Inc.
++   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
+ 
+-   This program is free software; you can redistribute it and/or modify
++   This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+-   the Free Software Foundation; either version 2, or (at your option)
+-   any later version.
++   the Free Software Foundation, either version 3 of the License, or
++   (at your option) any later version.
+ 
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+@@ -16,9 +15,7 @@
+    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, you may create a larger work that contains
+    part or all of the Bison parser skeleton and distribute that work
+@@ -47,7 +44,7 @@
+ #define YYBISON 1
+ 
+ /* Bison version.  */
+-#define YYBISON_VERSION "2.3"
++#define YYBISON_VERSION "3.0.4"
+ 
+ /* Skeleton name.  */
+ #define YYSKELETON_NAME "yacc.c"
+@@ -55,324 +52,17 @@
+ /* Pure parsers.  */
+ #define YYPURE 0
+ 
+-/* Using locations.  */
+-#define YYLSP_NEEDED 0
+-
+-
++/* Push parsers.  */
++#define YYPUSH 0
+ 
+-/* Tokens.  */
+-#ifndef YYTOKENTYPE
+-# define YYTOKENTYPE
+-   /* Put the tokens into the symbol table, so that GDB and other debuggers
+-      know about them.  */
+-   enum yytokentype {
+-     TK_API = 258,
+-     TK_AUTOPYNAME = 259,
+-     TK_DEFDOCSTRFMT = 260,
+-     TK_DEFDOCSTRSIG = 261,
+-     TK_DEFENCODING = 262,
+-     TK_PLUGIN = 263,
+-     TK_VIRTERRORHANDLER = 264,
+-     TK_EXPTYPEHINTCODE = 265,
+-     TK_TYPEHINTCODE = 266,
+-     TK_DOCSTRING = 267,
+-     TK_DOC = 268,
+-     TK_EXPORTEDDOC = 269,
+-     TK_EXTRACT = 270,
+-     TK_MAKEFILE = 271,
+-     TK_ACCESSCODE = 272,
+-     TK_GETCODE = 273,
+-     TK_SETCODE = 274,
+-     TK_PREINITCODE = 275,
+-     TK_INITCODE = 276,
+-     TK_POSTINITCODE = 277,
+-     TK_FINALCODE = 278,
+-     TK_UNITCODE = 279,
+-     TK_UNITPOSTINCLUDECODE = 280,
+-     TK_MODCODE = 281,
+-     TK_TYPECODE = 282,
+-     TK_PREPYCODE = 283,
+-     TK_COPYING = 284,
+-     TK_MAPPEDTYPE = 285,
+-     TK_CODELINE = 286,
+-     TK_IF = 287,
+-     TK_END = 288,
+-     TK_NAME_VALUE = 289,
+-     TK_PATH_VALUE = 290,
+-     TK_STRING_VALUE = 291,
+-     TK_VIRTUALCATCHERCODE = 292,
+-     TK_TRAVERSECODE = 293,
+-     TK_CLEARCODE = 294,
+-     TK_GETBUFFERCODE = 295,
+-     TK_RELEASEBUFFERCODE = 296,
+-     TK_READBUFFERCODE = 297,
+-     TK_WRITEBUFFERCODE = 298,
+-     TK_SEGCOUNTCODE = 299,
+-     TK_CHARBUFFERCODE = 300,
+-     TK_PICKLECODE = 301,
+-     TK_VIRTUALCALLCODE = 302,
+-     TK_METHODCODE = 303,
+-     TK_PREMETHODCODE = 304,
+-     TK_INSTANCECODE = 305,
+-     TK_FROMTYPE = 306,
+-     TK_TOTYPE = 307,
+-     TK_TOSUBCLASS = 308,
+-     TK_INCLUDE = 309,
+-     TK_OPTINCLUDE = 310,
+-     TK_IMPORT = 311,
+-     TK_EXPHEADERCODE = 312,
+-     TK_MODHEADERCODE = 313,
+-     TK_TYPEHEADERCODE = 314,
+-     TK_MODULE = 315,
+-     TK_CMODULE = 316,
+-     TK_CONSMODULE = 317,
+-     TK_COMPOMODULE = 318,
+-     TK_CLASS = 319,
+-     TK_STRUCT = 320,
+-     TK_PUBLIC = 321,
+-     TK_PROTECTED = 322,
+-     TK_PRIVATE = 323,
+-     TK_SIGNALS = 324,
+-     TK_SIGNAL_METHOD = 325,
+-     TK_SLOTS = 326,
+-     TK_SLOT_METHOD = 327,
+-     TK_BOOL = 328,
+-     TK_SHORT = 329,
+-     TK_INT = 330,
+-     TK_LONG = 331,
+-     TK_FLOAT = 332,
+-     TK_DOUBLE = 333,
+-     TK_CHAR = 334,
+-     TK_WCHAR_T = 335,
+-     TK_VOID = 336,
+-     TK_PYOBJECT = 337,
+-     TK_PYTUPLE = 338,
+-     TK_PYLIST = 339,
+-     TK_PYDICT = 340,
+-     TK_PYCALLABLE = 341,
+-     TK_PYSLICE = 342,
+-     TK_PYTYPE = 343,
+-     TK_PYBUFFER = 344,
+-     TK_VIRTUAL = 345,
+-     TK_ENUM = 346,
+-     TK_SIGNED = 347,
+-     TK_UNSIGNED = 348,
+-     TK_SCOPE = 349,
+-     TK_LOGICAL_OR = 350,
+-     TK_CONST = 351,
+-     TK_STATIC = 352,
+-     TK_SIPSIGNAL = 353,
+-     TK_SIPSLOT = 354,
+-     TK_SIPANYSLOT = 355,
+-     TK_SIPRXCON = 356,
+-     TK_SIPRXDIS = 357,
+-     TK_SIPSLOTCON = 358,
+-     TK_SIPSLOTDIS = 359,
+-     TK_SIPSSIZET = 360,
+-     TK_NUMBER_VALUE = 361,
+-     TK_REAL_VALUE = 362,
+-     TK_TYPEDEF = 363,
+-     TK_NAMESPACE = 364,
+-     TK_TIMELINE = 365,
+-     TK_PLATFORMS = 366,
+-     TK_FEATURE = 367,
+-     TK_LICENSE = 368,
+-     TK_QCHAR_VALUE = 369,
+-     TK_TRUE_VALUE = 370,
+-     TK_FALSE_VALUE = 371,
+-     TK_NULL_VALUE = 372,
+-     TK_OPERATOR = 373,
+-     TK_THROW = 374,
+-     TK_QOBJECT = 375,
+-     TK_EXCEPTION = 376,
+-     TK_RAISECODE = 377,
+-     TK_VIRTERRORCODE = 378,
+-     TK_EXPLICIT = 379,
+-     TK_TEMPLATE = 380,
+-     TK_FINAL = 381,
+-     TK_ELLIPSIS = 382,
+-     TK_DEFMETATYPE = 383,
+-     TK_DEFSUPERTYPE = 384,
+-     TK_PROPERTY = 385,
+-     TK_HIDE_NS = 386,
+-     TK_FORMAT = 387,
+-     TK_GET = 388,
+-     TK_ID = 389,
+-     TK_KWARGS = 390,
+-     TK_LANGUAGE = 391,
+-     TK_LICENSEE = 392,
+-     TK_NAME = 393,
+-     TK_OPTIONAL = 394,
+-     TK_ORDER = 395,
+-     TK_REMOVELEADING = 396,
+-     TK_SET = 397,
+-     TK_SIGNATURE = 398,
+-     TK_TIMESTAMP = 399,
+-     TK_TYPE = 400,
+-     TK_USEARGNAMES = 401,
+-     TK_USELIMITEDAPI = 402,
+-     TK_ALLRAISEPYEXC = 403,
+-     TK_CALLSUPERINIT = 404,
+-     TK_DEFERRORHANDLER = 405,
+-     TK_VERSION = 406
+-   };
+-#endif
+-/* Tokens.  */
+-#define TK_API 258
+-#define TK_AUTOPYNAME 259
+-#define TK_DEFDOCSTRFMT 260
+-#define TK_DEFDOCSTRSIG 261
+-#define TK_DEFENCODING 262
+-#define TK_PLUGIN 263
+-#define TK_VIRTERRORHANDLER 264
+-#define TK_EXPTYPEHINTCODE 265
+-#define TK_TYPEHINTCODE 266
+-#define TK_DOCSTRING 267
+-#define TK_DOC 268
+-#define TK_EXPORTEDDOC 269
+-#define TK_EXTRACT 270
+-#define TK_MAKEFILE 271
+-#define TK_ACCESSCODE 272
+-#define TK_GETCODE 273
+-#define TK_SETCODE 274
+-#define TK_PREINITCODE 275
+-#define TK_INITCODE 276
+-#define TK_POSTINITCODE 277
+-#define TK_FINALCODE 278
+-#define TK_UNITCODE 279
+-#define TK_UNITPOSTINCLUDECODE 280
+-#define TK_MODCODE 281
+-#define TK_TYPECODE 282
+-#define TK_PREPYCODE 283
+-#define TK_COPYING 284
+-#define TK_MAPPEDTYPE 285
+-#define TK_CODELINE 286
+-#define TK_IF 287
+-#define TK_END 288
+-#define TK_NAME_VALUE 289
+-#define TK_PATH_VALUE 290
+-#define TK_STRING_VALUE 291
+-#define TK_VIRTUALCATCHERCODE 292
+-#define TK_TRAVERSECODE 293
+-#define TK_CLEARCODE 294
+-#define TK_GETBUFFERCODE 295
+-#define TK_RELEASEBUFFERCODE 296
+-#define TK_READBUFFERCODE 297
+-#define TK_WRITEBUFFERCODE 298
+-#define TK_SEGCOUNTCODE 299
+-#define TK_CHARBUFFERCODE 300
+-#define TK_PICKLECODE 301
+-#define TK_VIRTUALCALLCODE 302
+-#define TK_METHODCODE 303
+-#define TK_PREMETHODCODE 304
+-#define TK_INSTANCECODE 305
+-#define TK_FROMTYPE 306
+-#define TK_TOTYPE 307
+-#define TK_TOSUBCLASS 308
+-#define TK_INCLUDE 309
+-#define TK_OPTINCLUDE 310
+-#define TK_IMPORT 311
+-#define TK_EXPHEADERCODE 312
+-#define TK_MODHEADERCODE 313
+-#define TK_TYPEHEADERCODE 314
+-#define TK_MODULE 315
+-#define TK_CMODULE 316
+-#define TK_CONSMODULE 317
+-#define TK_COMPOMODULE 318
+-#define TK_CLASS 319
+-#define TK_STRUCT 320
+-#define TK_PUBLIC 321
+-#define TK_PROTECTED 322
+-#define TK_PRIVATE 323
+-#define TK_SIGNALS 324
+-#define TK_SIGNAL_METHOD 325
+-#define TK_SLOTS 326
+-#define TK_SLOT_METHOD 327
+-#define TK_BOOL 328
+-#define TK_SHORT 329
+-#define TK_INT 330
+-#define TK_LONG 331
+-#define TK_FLOAT 332
+-#define TK_DOUBLE 333
+-#define TK_CHAR 334
+-#define TK_WCHAR_T 335
+-#define TK_VOID 336
+-#define TK_PYOBJECT 337
+-#define TK_PYTUPLE 338
+-#define TK_PYLIST 339
+-#define TK_PYDICT 340
+-#define TK_PYCALLABLE 341
+-#define TK_PYSLICE 342
+-#define TK_PYTYPE 343
+-#define TK_PYBUFFER 344
+-#define TK_VIRTUAL 345
+-#define TK_ENUM 346
+-#define TK_SIGNED 347
+-#define TK_UNSIGNED 348
+-#define TK_SCOPE 349
+-#define TK_LOGICAL_OR 350
+-#define TK_CONST 351
+-#define TK_STATIC 352
+-#define TK_SIPSIGNAL 353
+-#define TK_SIPSLOT 354
+-#define TK_SIPANYSLOT 355
+-#define TK_SIPRXCON 356
+-#define TK_SIPRXDIS 357
+-#define TK_SIPSLOTCON 358
+-#define TK_SIPSLOTDIS 359
+-#define TK_SIPSSIZET 360
+-#define TK_NUMBER_VALUE 361
+-#define TK_REAL_VALUE 362
+-#define TK_TYPEDEF 363
+-#define TK_NAMESPACE 364
+-#define TK_TIMELINE 365
+-#define TK_PLATFORMS 366
+-#define TK_FEATURE 367
+-#define TK_LICENSE 368
+-#define TK_QCHAR_VALUE 369
+-#define TK_TRUE_VALUE 370
+-#define TK_FALSE_VALUE 371
+-#define TK_NULL_VALUE 372
+-#define TK_OPERATOR 373
+-#define TK_THROW 374
+-#define TK_QOBJECT 375
+-#define TK_EXCEPTION 376
+-#define TK_RAISECODE 377
+-#define TK_VIRTERRORCODE 378
+-#define TK_EXPLICIT 379
+-#define TK_TEMPLATE 380
+-#define TK_FINAL 381
+-#define TK_ELLIPSIS 382
+-#define TK_DEFMETATYPE 383
+-#define TK_DEFSUPERTYPE 384
+-#define TK_PROPERTY 385
+-#define TK_HIDE_NS 386
+-#define TK_FORMAT 387
+-#define TK_GET 388
+-#define TK_ID 389
+-#define TK_KWARGS 390
+-#define TK_LANGUAGE 391
+-#define TK_LICENSEE 392
+-#define TK_NAME 393
+-#define TK_OPTIONAL 394
+-#define TK_ORDER 395
+-#define TK_REMOVELEADING 396
+-#define TK_SET 397
+-#define TK_SIGNATURE 398
+-#define TK_TIMESTAMP 399
+-#define TK_TYPE 400
+-#define TK_USEARGNAMES 401
+-#define TK_USELIMITEDAPI 402
+-#define TK_ALLRAISEPYEXC 403
+-#define TK_CALLSUPERINIT 404
+-#define TK_DEFERRORHANDLER 405
+-#define TK_VERSION 406
++/* Pull parsers.  */
++#define YYPULL 1
+ 
+ 
+ 
+ 
+ /* Copy the first part of user declarations.  */
+-#line 19 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 19 "sipgen/metasrc/parser.y" /* yacc.c:339  */
+ 
+ #include <stdlib.h>
+ #include <string.h>
+@@ -556,11 +246,15 @@
+ static void checkEllipsis(signatureDef *sd);
+ static scopedNameDef *fullyQualifiedName(scopedNameDef *snd);
+ 
++#line 250 "sipgen/parser.c" /* yacc.c:339  */
+ 
+-/* Enabling traces.  */
+-#ifndef YYDEBUG
+-# define YYDEBUG 0
+-#endif
++# ifndef YY_NULLPTR
++#  if defined __cplusplus && 201103L <= __cplusplus
++#   define YY_NULLPTR nullptr
++#  else
++#   define YY_NULLPTR 0
++#  endif
++# endif
+ 
+ /* Enabling verbose error messages.  */
+ #ifdef YYERROR_VERBOSE
+@@ -570,15 +264,332 @@
+ # define YYERROR_VERBOSE 0
+ #endif
+ 
+-/* Enabling the token table.  */
+-#ifndef YYTOKEN_TABLE
+-# define YYTOKEN_TABLE 0
++/* In a future release of Bison, this section will be replaced
++   by #include "parser.h".  */
++#ifndef YY_YY_SIPGEN_PARSER_H_INCLUDED
++# define YY_YY_SIPGEN_PARSER_H_INCLUDED
++/* Debug traces.  */
++#ifndef YYDEBUG
++# define YYDEBUG 0
++#endif
++#if YYDEBUG
++extern int yydebug;
+ #endif
+ 
++/* Token type.  */
++#ifndef YYTOKENTYPE
++# define YYTOKENTYPE
++  enum yytokentype
++  {
++    TK_API = 258,
++    TK_AUTOPYNAME = 259,
++    TK_DEFDOCSTRFMT = 260,
++    TK_DEFDOCSTRSIG = 261,
++    TK_DEFENCODING = 262,
++    TK_PLUGIN = 263,
++    TK_VIRTERRORHANDLER = 264,
++    TK_EXPTYPEHINTCODE = 265,
++    TK_TYPEHINTCODE = 266,
++    TK_DOCSTRING = 267,
++    TK_DOC = 268,
++    TK_EXPORTEDDOC = 269,
++    TK_EXTRACT = 270,
++    TK_MAKEFILE = 271,
++    TK_ACCESSCODE = 272,
++    TK_GETCODE = 273,
++    TK_SETCODE = 274,
++    TK_PREINITCODE = 275,
++    TK_INITCODE = 276,
++    TK_POSTINITCODE = 277,
++    TK_FINALCODE = 278,
++    TK_UNITCODE = 279,
++    TK_UNITPOSTINCLUDECODE = 280,
++    TK_MODCODE = 281,
++    TK_TYPECODE = 282,
++    TK_PREPYCODE = 283,
++    TK_COPYING = 284,
++    TK_MAPPEDTYPE = 285,
++    TK_CODELINE = 286,
++    TK_IF = 287,
++    TK_END = 288,
++    TK_NAME_VALUE = 289,
++    TK_PATH_VALUE = 290,
++    TK_STRING_VALUE = 291,
++    TK_VIRTUALCATCHERCODE = 292,
++    TK_TRAVERSECODE = 293,
++    TK_CLEARCODE = 294,
++    TK_GETBUFFERCODE = 295,
++    TK_RELEASEBUFFERCODE = 296,
++    TK_READBUFFERCODE = 297,
++    TK_WRITEBUFFERCODE = 298,
++    TK_SEGCOUNTCODE = 299,
++    TK_CHARBUFFERCODE = 300,
++    TK_PICKLECODE = 301,
++    TK_VIRTUALCALLCODE = 302,
++    TK_METHODCODE = 303,
++    TK_PREMETHODCODE = 304,
++    TK_INSTANCECODE = 305,
++    TK_FROMTYPE = 306,
++    TK_TOTYPE = 307,
++    TK_TOSUBCLASS = 308,
++    TK_INCLUDE = 309,
++    TK_OPTINCLUDE = 310,
++    TK_IMPORT = 311,
++    TK_EXPHEADERCODE = 312,
++    TK_MODHEADERCODE = 313,
++    TK_TYPEHEADERCODE = 314,
++    TK_MODULE = 315,
++    TK_CMODULE = 316,
++    TK_CONSMODULE = 317,
++    TK_COMPOMODULE = 318,
++    TK_CLASS = 319,
++    TK_STRUCT = 320,
++    TK_PUBLIC = 321,
++    TK_PROTECTED = 322,
++    TK_PRIVATE = 323,
++    TK_SIGNALS = 324,
++    TK_SIGNAL_METHOD = 325,
++    TK_SLOTS = 326,
++    TK_SLOT_METHOD = 327,
++    TK_BOOL = 328,
++    TK_SHORT = 329,
++    TK_INT = 330,
++    TK_LONG = 331,
++    TK_FLOAT = 332,
++    TK_DOUBLE = 333,
++    TK_CHAR = 334,
++    TK_WCHAR_T = 335,
++    TK_VOID = 336,
++    TK_PYOBJECT = 337,
++    TK_PYTUPLE = 338,
++    TK_PYLIST = 339,
++    TK_PYDICT = 340,
++    TK_PYCALLABLE = 341,
++    TK_PYSLICE = 342,
++    TK_PYTYPE = 343,
++    TK_PYBUFFER = 344,
++    TK_VIRTUAL = 345,
++    TK_ENUM = 346,
++    TK_SIGNED = 347,
++    TK_UNSIGNED = 348,
++    TK_SCOPE = 349,
++    TK_LOGICAL_OR = 350,
++    TK_CONST = 351,
++    TK_STATIC = 352,
++    TK_SIPSIGNAL = 353,
++    TK_SIPSLOT = 354,
++    TK_SIPANYSLOT = 355,
++    TK_SIPRXCON = 356,
++    TK_SIPRXDIS = 357,
++    TK_SIPSLOTCON = 358,
++    TK_SIPSLOTDIS = 359,
++    TK_SIPSSIZET = 360,
++    TK_NUMBER_VALUE = 361,
++    TK_REAL_VALUE = 362,
++    TK_TYPEDEF = 363,
++    TK_NAMESPACE = 364,
++    TK_TIMELINE = 365,
++    TK_PLATFORMS = 366,
++    TK_FEATURE = 367,
++    TK_LICENSE = 368,
++    TK_QCHAR_VALUE = 369,
++    TK_TRUE_VALUE = 370,
++    TK_FALSE_VALUE = 371,
++    TK_NULL_VALUE = 372,
++    TK_OPERATOR = 373,
++    TK_THROW = 374,
++    TK_QOBJECT = 375,
++    TK_EXCEPTION = 376,
++    TK_RAISECODE = 377,
++    TK_VIRTERRORCODE = 378,
++    TK_EXPLICIT = 379,
++    TK_TEMPLATE = 380,
++    TK_FINAL = 381,
++    TK_ELLIPSIS = 382,
++    TK_DEFMETATYPE = 383,
++    TK_DEFSUPERTYPE = 384,
++    TK_PROPERTY = 385,
++    TK_HIDE_NS = 386,
++    TK_FORMAT = 387,
++    TK_GET = 388,
++    TK_ID = 389,
++    TK_KWARGS = 390,
++    TK_LANGUAGE = 391,
++    TK_LICENSEE = 392,
++    TK_NAME = 393,
++    TK_OPTIONAL = 394,
++    TK_ORDER = 395,
++    TK_REMOVELEADING = 396,
++    TK_SET = 397,
++    TK_SIGNATURE = 398,
++    TK_TIMESTAMP = 399,
++    TK_TYPE = 400,
++    TK_USEARGNAMES = 401,
++    TK_USELIMITEDAPI = 402,
++    TK_ALLRAISEPYEXC = 403,
++    TK_CALLSUPERINIT = 404,
++    TK_DEFERRORHANDLER = 405,
++    TK_VERSION = 406
++  };
++#endif
++/* Tokens.  */
++#define TK_API 258
++#define TK_AUTOPYNAME 259
++#define TK_DEFDOCSTRFMT 260
++#define TK_DEFDOCSTRSIG 261
++#define TK_DEFENCODING 262
++#define TK_PLUGIN 263
++#define TK_VIRTERRORHANDLER 264
++#define TK_EXPTYPEHINTCODE 265
++#define TK_TYPEHINTCODE 266
++#define TK_DOCSTRING 267
++#define TK_DOC 268
++#define TK_EXPORTEDDOC 269
++#define TK_EXTRACT 270
++#define TK_MAKEFILE 271
++#define TK_ACCESSCODE 272
++#define TK_GETCODE 273
++#define TK_SETCODE 274
++#define TK_PREINITCODE 275
++#define TK_INITCODE 276
++#define TK_POSTINITCODE 277
++#define TK_FINALCODE 278
++#define TK_UNITCODE 279
++#define TK_UNITPOSTINCLUDECODE 280
++#define TK_MODCODE 281
++#define TK_TYPECODE 282
++#define TK_PREPYCODE 283
++#define TK_COPYING 284
++#define TK_MAPPEDTYPE 285
++#define TK_CODELINE 286
++#define TK_IF 287
++#define TK_END 288
++#define TK_NAME_VALUE 289
++#define TK_PATH_VALUE 290
++#define TK_STRING_VALUE 291
++#define TK_VIRTUALCATCHERCODE 292
++#define TK_TRAVERSECODE 293
++#define TK_CLEARCODE 294
++#define TK_GETBUFFERCODE 295
++#define TK_RELEASEBUFFERCODE 296
++#define TK_READBUFFERCODE 297
++#define TK_WRITEBUFFERCODE 298
++#define TK_SEGCOUNTCODE 299
++#define TK_CHARBUFFERCODE 300
++#define TK_PICKLECODE 301
++#define TK_VIRTUALCALLCODE 302
++#define TK_METHODCODE 303
++#define TK_PREMETHODCODE 304
++#define TK_INSTANCECODE 305
++#define TK_FROMTYPE 306
++#define TK_TOTYPE 307
++#define TK_TOSUBCLASS 308
++#define TK_INCLUDE 309
++#define TK_OPTINCLUDE 310
++#define TK_IMPORT 311
++#define TK_EXPHEADERCODE 312
++#define TK_MODHEADERCODE 313
++#define TK_TYPEHEADERCODE 314
++#define TK_MODULE 315
++#define TK_CMODULE 316
++#define TK_CONSMODULE 317
++#define TK_COMPOMODULE 318
++#define TK_CLASS 319
++#define TK_STRUCT 320
++#define TK_PUBLIC 321
++#define TK_PROTECTED 322
++#define TK_PRIVATE 323
++#define TK_SIGNALS 324
++#define TK_SIGNAL_METHOD 325
++#define TK_SLOTS 326
++#define TK_SLOT_METHOD 327
++#define TK_BOOL 328
++#define TK_SHORT 329
++#define TK_INT 330
++#define TK_LONG 331
++#define TK_FLOAT 332
++#define TK_DOUBLE 333
++#define TK_CHAR 334
++#define TK_WCHAR_T 335
++#define TK_VOID 336
++#define TK_PYOBJECT 337
++#define TK_PYTUPLE 338
++#define TK_PYLIST 339
++#define TK_PYDICT 340
++#define TK_PYCALLABLE 341
++#define TK_PYSLICE 342
++#define TK_PYTYPE 343
++#define TK_PYBUFFER 344
++#define TK_VIRTUAL 345
++#define TK_ENUM 346
++#define TK_SIGNED 347
++#define TK_UNSIGNED 348
++#define TK_SCOPE 349
++#define TK_LOGICAL_OR 350
++#define TK_CONST 351
++#define TK_STATIC 352
++#define TK_SIPSIGNAL 353
++#define TK_SIPSLOT 354
++#define TK_SIPANYSLOT 355
++#define TK_SIPRXCON 356
++#define TK_SIPRXDIS 357
++#define TK_SIPSLOTCON 358
++#define TK_SIPSLOTDIS 359
++#define TK_SIPSSIZET 360
++#define TK_NUMBER_VALUE 361
++#define TK_REAL_VALUE 362
++#define TK_TYPEDEF 363
++#define TK_NAMESPACE 364
++#define TK_TIMELINE 365
++#define TK_PLATFORMS 366
++#define TK_FEATURE 367
++#define TK_LICENSE 368
++#define TK_QCHAR_VALUE 369
++#define TK_TRUE_VALUE 370
++#define TK_FALSE_VALUE 371
++#define TK_NULL_VALUE 372
++#define TK_OPERATOR 373
++#define TK_THROW 374
++#define TK_QOBJECT 375
++#define TK_EXCEPTION 376
++#define TK_RAISECODE 377
++#define TK_VIRTERRORCODE 378
++#define TK_EXPLICIT 379
++#define TK_TEMPLATE 380
++#define TK_FINAL 381
++#define TK_ELLIPSIS 382
++#define TK_DEFMETATYPE 383
++#define TK_DEFSUPERTYPE 384
++#define TK_PROPERTY 385
++#define TK_HIDE_NS 386
++#define TK_FORMAT 387
++#define TK_GET 388
++#define TK_ID 389
++#define TK_KWARGS 390
++#define TK_LANGUAGE 391
++#define TK_LICENSEE 392
++#define TK_NAME 393
++#define TK_OPTIONAL 394
++#define TK_ORDER 395
++#define TK_REMOVELEADING 396
++#define TK_SET 397
++#define TK_SIGNATURE 398
++#define TK_TIMESTAMP 399
++#define TK_TYPE 400
++#define TK_USEARGNAMES 401
++#define TK_USELIMITEDAPI 402
++#define TK_ALLRAISEPYEXC 403
++#define TK_CALLSUPERINIT 404
++#define TK_DEFERRORHANDLER 405
++#define TK_VERSION 406
++
++/* Value type.  */
+ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+-typedef union YYSTYPE
+-#line 203 "sip-4.19.12/sipgen/metasrc/parser.y"
++
++union YYSTYPE
+ {
++#line 203 "sipgen/metasrc/parser.y" /* yacc.c:355  */
++
+     char            qchar;
+     char            *text;
+     long            number;
+@@ -621,22 +632,25 @@
+     variableCfg     variable;
+     vehCfg          veh;
+     int             token;
+-}
+-/* Line 193 of yacc.c.  */
+-#line 627 "sip-4.19.12/sipgen/parser.c"
+-	YYSTYPE;
+-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+-# define YYSTYPE_IS_DECLARED 1
++
++#line 637 "sipgen/parser.c" /* yacc.c:355  */
++};
++
++typedef union YYSTYPE YYSTYPE;
+ # define YYSTYPE_IS_TRIVIAL 1
++# define YYSTYPE_IS_DECLARED 1
+ #endif
+ 
+ 
++extern YYSTYPE yylval;
+ 
+-/* Copy the second part of user declarations.  */
++int yyparse (void);
+ 
++#endif /* !YY_YY_SIPGEN_PARSER_H_INCLUDED  */
+ 
+-/* Line 216 of yacc.c.  */
+-#line 640 "sip-4.19.12/sipgen/parser.c"
++/* Copy the second part of user declarations.  */
++
++#line 654 "sipgen/parser.c" /* yacc.c:358  */
+ 
+ #ifdef short
+ # undef short
+@@ -650,11 +664,8 @@
+ 
+ #ifdef YYTYPE_INT8
+ typedef YYTYPE_INT8 yytype_int8;
+-#elif (defined __STDC__ || defined __C99__FUNC__ \
+-     || defined __cplusplus || defined _MSC_VER)
+-typedef signed char yytype_int8;
+ #else
+-typedef short int yytype_int8;
++typedef signed char yytype_int8;
+ #endif
+ 
+ #ifdef YYTYPE_UINT16
+@@ -674,8 +685,7 @@
+ #  define YYSIZE_T __SIZE_TYPE__
+ # elif defined size_t
+ #  define YYSIZE_T size_t
+-# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+-     || defined __cplusplus || defined _MSC_VER)
++# elif ! defined YYSIZE_T
+ #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+ #  define YYSIZE_T size_t
+ # else
+@@ -689,39 +699,68 @@
+ # if defined YYENABLE_NLS && YYENABLE_NLS
+ #  if ENABLE_NLS
+ #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+-#   define YY_(msgid) dgettext ("bison-runtime", msgid)
++#   define YY_(Msgid) dgettext ("bison-runtime", Msgid)
+ #  endif
+ # endif
+ # ifndef YY_
+-#  define YY_(msgid) msgid
++#  define YY_(Msgid) Msgid
++# endif
++#endif
++
++#ifndef YY_ATTRIBUTE
++# if (defined __GNUC__                                               \
++      && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \
++     || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
++#  define YY_ATTRIBUTE(Spec) __attribute__(Spec)
++# else
++#  define YY_ATTRIBUTE(Spec) /* empty */
++# endif
++#endif
++
++#ifndef YY_ATTRIBUTE_PURE
++# define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
++#endif
++
++#ifndef YY_ATTRIBUTE_UNUSED
++# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
++#endif
++
++#if !defined _Noreturn \
++     && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
++# if defined _MSC_VER && 1200 <= _MSC_VER
++#  define _Noreturn __declspec (noreturn)
++# else
++#  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
+ # endif
+ #endif
+ 
+ /* Suppress unused-variable warnings by "using" E.  */
+ #if ! defined lint || defined __GNUC__
+-# define YYUSE(e) ((void) (e))
++# define YYUSE(E) ((void) (E))
+ #else
+-# define YYUSE(e) /* empty */
++# define YYUSE(E) /* empty */
+ #endif
+ 
+-/* Identity function, used to suppress warnings about constant conditions.  */
+-#ifndef lint
+-# define YYID(n) (n)
+-#else
+-#if (defined __STDC__ || defined __C99__FUNC__ \
+-     || defined __cplusplus || defined _MSC_VER)
+-static int
+-YYID (int i)
++#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
++/* Suppress an incorrect diagnostic about yylval being uninitialized.  */
++# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
++    _Pragma ("GCC diagnostic push") \
++    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
++    _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
++# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
++    _Pragma ("GCC diagnostic pop")
+ #else
+-static int
+-YYID (i)
+-    int i;
++# define YY_INITIAL_VALUE(Value) Value
+ #endif
+-{
+-  return i;
+-}
++#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
++# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
++# define YY_IGNORE_MAYBE_UNINITIALIZED_END
++#endif
++#ifndef YY_INITIAL_VALUE
++# define YY_INITIAL_VALUE(Value) /* Nothing. */
+ #endif
+ 
++
+ #if ! defined yyoverflow || YYERROR_VERBOSE
+ 
+ /* The parser invokes alloca or malloc; define the necessary symbols.  */
+@@ -739,11 +778,11 @@
+ #    define alloca _alloca
+ #   else
+ #    define YYSTACK_ALLOC alloca
+-#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+-     || defined __cplusplus || defined _MSC_VER)
++#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
+ #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+-#     ifndef _STDLIB_H
+-#      define _STDLIB_H 1
++      /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
++#     ifndef EXIT_SUCCESS
++#      define EXIT_SUCCESS 0
+ #     endif
+ #    endif
+ #   endif
+@@ -751,8 +790,8 @@
+ # endif
+ 
+ # ifdef YYSTACK_ALLOC
+-   /* Pacify GCC's `empty if-body' warning.  */
+-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
++   /* Pacify GCC's 'empty if-body' warning.  */
++#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+ #  ifndef YYSTACK_ALLOC_MAXIMUM
+     /* The OS might guarantee only one guard page at the bottom of the stack,
+        and a page size can be as small as 4096 bytes.  So we cannot safely
+@@ -766,25 +805,23 @@
+ #  ifndef YYSTACK_ALLOC_MAXIMUM
+ #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+ #  endif
+-#  if (defined __cplusplus && ! defined _STDLIB_H \
++#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
+        && ! ((defined YYMALLOC || defined malloc) \
+-	     && (defined YYFREE || defined free)))
++             && (defined YYFREE || defined free)))
+ #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+-#   ifndef _STDLIB_H
+-#    define _STDLIB_H 1
++#   ifndef EXIT_SUCCESS
++#    define EXIT_SUCCESS 0
+ #   endif
+ #  endif
+ #  ifndef YYMALLOC
+ #   define YYMALLOC malloc
+-#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+-     || defined __cplusplus || defined _MSC_VER)
++#   if ! defined malloc && ! defined EXIT_SUCCESS
+ void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+ #   endif
+ #  endif
+ #  ifndef YYFREE
+ #   define YYFREE free
+-#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+-     || defined __cplusplus || defined _MSC_VER)
++#   if ! defined free && ! defined EXIT_SUCCESS
+ void free (void *); /* INFRINGES ON USER NAME SPACE */
+ #   endif
+ #  endif
+@@ -794,14 +831,14 @@
+ 
+ #if (! defined yyoverflow \
+      && (! defined __cplusplus \
+-	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
++         || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+ 
+ /* A type that is properly aligned for any stack member.  */
+ union yyalloc
+ {
+-  yytype_int16 yyss;
+-  YYSTYPE yyvs;
+-  };
++  yytype_int16 yyss_alloc;
++  YYSTYPE yyvs_alloc;
++};
+ 
+ /* The size of the maximum gap between one aligned stack and the next.  */
+ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+@@ -812,42 +849,46 @@
+      ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+       + YYSTACK_GAP_MAXIMUM)
+ 
+-/* Copy COUNT objects from FROM to TO.  The source and destination do
+-   not overlap.  */
+-# ifndef YYCOPY
+-#  if defined __GNUC__ && 1 < __GNUC__
+-#   define YYCOPY(To, From, Count) \
+-      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+-#  else
+-#   define YYCOPY(To, From, Count)		\
+-      do					\
+-	{					\
+-	  YYSIZE_T yyi;				\
+-	  for (yyi = 0; yyi < (Count); yyi++)	\
+-	    (To)[yyi] = (From)[yyi];		\
+-	}					\
+-      while (YYID (0))
+-#  endif
+-# endif
++# define YYCOPY_NEEDED 1
+ 
+ /* Relocate STACK from its old location to the new one.  The
+    local variables YYSIZE and YYSTACKSIZE give the old and new number of
+    elements in the stack, and YYPTR gives the new location of the
+    stack.  Advance YYPTR to a properly aligned location for the next
+    stack.  */
+-# define YYSTACK_RELOCATE(Stack)					\
+-    do									\
+-      {									\
+-	YYSIZE_T yynewbytes;						\
+-	YYCOPY (&yyptr->Stack, Stack, yysize);				\
+-	Stack = &yyptr->Stack;						\
+-	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+-	yyptr += yynewbytes / sizeof (*yyptr);				\
+-      }									\
+-    while (YYID (0))
++# define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
++    do                                                                  \
++      {                                                                 \
++        YYSIZE_T yynewbytes;                                            \
++        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
++        Stack = &yyptr->Stack_alloc;                                    \
++        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
++        yyptr += yynewbytes / sizeof (*yyptr);                          \
++      }                                                                 \
++    while (0)
+ 
+ #endif
+ 
++#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
++/* Copy COUNT objects from SRC to DST.  The source and destination do
++   not overlap.  */
++# ifndef YYCOPY
++#  if defined __GNUC__ && 1 < __GNUC__
++#   define YYCOPY(Dst, Src, Count) \
++      __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
++#  else
++#   define YYCOPY(Dst, Src, Count)              \
++      do                                        \
++        {                                       \
++          YYSIZE_T yyi;                         \
++          for (yyi = 0; yyi < (Count); yyi++)   \
++            (Dst)[yyi] = (Src)[yyi];            \
++        }                                       \
++      while (0)
++#  endif
++# endif
++#endif /* !YYCOPY_NEEDED */
++
+ /* YYFINAL -- State number of the termination state.  */
+ #define YYFINAL  4
+ /* YYLAST -- Last index in YYTABLE.  */
+@@ -859,17 +900,19 @@
+ #define YYNNTS  254
+ /* YYNRULES -- Number of rules.  */
+ #define YYNRULES  594
+-/* YYNRULES -- Number of states.  */
++/* YYNSTATES -- Number of states.  */
+ #define YYNSTATES  1042
+ 
+-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
++/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
++   by yylex, with out-of-bounds checking.  */
+ #define YYUNDEFTOK  2
+ #define YYMAXUTOK   406
+ 
+-#define YYTRANSLATE(YYX)						\
++#define YYTRANSLATE(YYX)                                                \
+   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+ 
+-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
++/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
++   as returned by yylex, without out-of-bounds checking.  */
+ static const yytype_uint8 yytranslate[] =
+ {
+        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+@@ -916,250 +959,7 @@
+ };
+ 
+ #if YYDEBUG
+-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+-   YYRHS.  */
+-static const yytype_uint16 yyprhs[] =
+-{
+-       0,     0,     3,     5,     8,     9,    12,    14,    16,    18,
+-      20,    22,    24,    26,    28,    30,    32,    34,    36,    38,
+-      40,    42,    44,    46,    48,    50,    52,    54,    56,    58,
+-      60,    62,    64,    66,    68,    70,    72,    74,    76,    78,
+-      80,    82,    84,    86,    88,    90,    92,    94,    96,    98,
+-     100,   102,   104,   106,   108,   110,   112,   115,   117,   121,
+-     123,   127,   131,   134,   136,   140,   142,   146,   150,   153,
+-     155,   159,   161,   165,   169,   172,   174,   178,   180,   184,
+-     188,   192,   194,   198,   200,   204,   208,   211,   214,   218,
+-     220,   224,   228,   232,   238,   239,   243,   248,   250,   253,
+-     255,   257,   259,   261,   264,   265,   271,   272,   279,   284,
+-     286,   289,   291,   293,   295,   297,   300,   303,   305,   307,
+-     309,   324,   325,   331,   332,   336,   338,   341,   342,   348,
+-     350,   353,   355,   358,   360,   364,   366,   370,   374,   375,
+-     381,   383,   386,   388,   389,   395,   397,   400,   404,   409,
+-     411,   415,   417,   421,   422,   424,   428,   430,   434,   438,
+-     442,   446,   450,   453,   455,   459,   461,   465,   469,   472,
+-     474,   478,   480,   484,   488,   491,   493,   497,   499,   503,
+-     507,   511,   513,   517,   519,   523,   527,   528,   533,   535,
+-     538,   540,   542,   544,   548,   550,   554,   556,   560,   564,
+-     565,   570,   572,   575,   577,   579,   581,   585,   589,   590,
+-     594,   598,   600,   604,   608,   612,   616,   620,   624,   628,
+-     632,   636,   640,   641,   646,   648,   651,   653,   655,   657,
+-     659,   661,   663,   664,   666,   669,   671,   675,   677,   681,
+-     685,   689,   692,   695,   697,   701,   703,   707,   711,   712,
+-     715,   716,   719,   720,   723,   726,   729,   732,   735,   738,
+-     741,   744,   747,   750,   753,   756,   759,   762,   765,   768,
+-     771,   774,   777,   780,   783,   786,   789,   792,   795,   798,
+-     801,   804,   807,   810,   814,   816,   820,   824,   828,   829,
+-     831,   835,   837,   841,   845,   849,   850,   852,   856,   858,
+-     862,   864,   868,   872,   876,   881,   884,   886,   889,   890,
+-     900,   901,   903,   905,   906,   908,   909,   911,   912,   914,
+-     916,   919,   921,   923,   928,   929,   931,   932,   935,   936,
+-     939,   941,   945,   947,   949,   951,   953,   955,   957,   958,
+-     960,   962,   964,   966,   968,   970,   974,   975,   979,   982,
+-     984,   986,   990,   992,   994,   996,   998,  1003,  1005,  1007,
+-    1009,  1011,  1013,  1015,  1016,  1018,  1022,  1029,  1042,  1043,
+-    1044,  1053,  1054,  1058,  1063,  1064,  1065,  1074,  1075,  1078,
+-    1080,  1084,  1087,  1088,  1090,  1092,  1094,  1095,  1099,  1100,
+-    1102,  1105,  1107,  1109,  1111,  1113,  1115,  1117,  1119,  1121,
+-    1123,  1125,  1127,  1129,  1131,  1133,  1135,  1137,  1139,  1141,
+-    1143,  1145,  1147,  1149,  1151,  1153,  1155,  1157,  1159,  1161,
+-    1164,  1167,  1170,  1174,  1178,  1182,  1185,  1189,  1193,  1195,
+-    1199,  1203,  1207,  1211,  1212,  1217,  1219,  1222,  1224,  1226,
+-    1228,  1230,  1232,  1233,  1235,  1248,  1249,  1253,  1255,  1267,
+-    1268,  1269,  1276,  1277,  1278,  1286,  1287,  1289,  1307,  1315,
+-    1333,  1350,  1352,  1354,  1356,  1358,  1360,  1362,  1364,  1366,
+-    1369,  1372,  1375,  1378,  1381,  1384,  1387,  1390,  1393,  1396,
+-    1400,  1404,  1406,  1409,  1412,  1414,  1417,  1420,  1423,  1425,
+-    1428,  1429,  1431,  1432,  1434,  1435,  1438,  1439,  1443,  1445,
+-    1449,  1451,  1455,  1457,  1463,  1465,  1467,  1468,  1471,  1472,
+-    1475,  1476,  1479,  1480,  1483,  1485,  1486,  1488,  1492,  1497,
+-    1502,  1507,  1511,  1515,  1522,  1529,  1533,  1536,  1537,  1541,
+-    1542,  1546,  1548,  1549,  1553,  1555,  1557,  1559,  1560,  1564,
+-    1566,  1575,  1576,  1580,  1582,  1585,  1587,  1589,  1592,  1595,
+-    1598,  1603,  1607,  1611,  1612,  1614,  1615,  1619,  1622,  1624,
+-    1629,  1632,  1635,  1637,  1639,  1642,  1644,  1646,  1649,  1652,
+-    1656,  1658,  1660,  1662,  1665,  1668,  1670,  1672,  1674,  1676,
+-    1678,  1680,  1682,  1684,  1686,  1688,  1690,  1692,  1694,  1696,
+-    1700,  1701,  1706,  1707,  1709
+-};
+-
+-/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
+-static const yytype_int16 yyrhs[] =
+-{
+-     175,     0,    -1,   176,    -1,   175,   176,    -1,    -1,   177,
+-     178,    -1,   269,    -1,   255,    -1,   262,    -1,   192,    -1,
+-     291,    -1,   279,    -1,   283,    -1,   284,    -1,   200,    -1,
+-     230,    -1,   222,    -1,   226,    -1,   239,    -1,   180,    -1,
+-     184,    -1,   188,    -1,   243,    -1,   247,    -1,   251,    -1,
+-     292,    -1,   293,    -1,   306,    -1,   308,    -1,   309,    -1,
+-     310,    -1,   311,    -1,   312,    -1,   313,    -1,   314,    -1,
+-     315,    -1,   317,    -1,   318,    -1,   328,    -1,   332,    -1,
+-     210,    -1,   212,    -1,   196,    -1,   179,    -1,   234,    -1,
+-     238,    -1,   218,    -1,   358,    -1,   364,    -1,   361,    -1,
+-     204,    -1,   357,    -1,   335,    -1,   392,    -1,   416,    -1,
+-     294,    -1,     5,   181,    -1,    36,    -1,   152,   182,   153,
+-      -1,   183,    -1,   182,   154,   183,    -1,   138,   155,    36,
+-      -1,     6,   185,    -1,    36,    -1,   152,   186,   153,    -1,
+-     187,    -1,   186,   154,   187,    -1,   138,   155,    36,    -1,
+-       7,   189,    -1,    36,    -1,   152,   190,   153,    -1,   191,
+-      -1,   190,   154,   191,    -1,   138,   155,    36,    -1,     8,
+-     193,    -1,    34,    -1,   152,   194,   153,    -1,   195,    -1,
+-     194,   154,   195,    -1,   138,   155,    34,    -1,     9,   197,
+-     333,    -1,    34,    -1,   152,   198,   153,    -1,   199,    -1,
+-     198,   154,   199,    -1,   138,   155,    34,    -1,     3,   201,
+-      -1,    34,   106,    -1,   152,   202,   153,    -1,   203,    -1,
+-     202,   154,   203,    -1,   138,   155,   381,    -1,   151,   155,
+-     106,    -1,   121,   351,   205,   397,   206,    -1,    -1,   152,
+-     351,   153,    -1,   156,   207,   157,   158,    -1,   208,    -1,
+-     207,   208,    -1,   234,    -1,   238,    -1,   209,    -1,   294,
+-      -1,   122,   333,    -1,    -1,    30,   424,   397,   211,   214,
+-      -1,    -1,   363,    30,   424,   397,   213,   214,    -1,   156,
+-     215,   157,   158,    -1,   216,    -1,   215,   216,    -1,   234,
+-      -1,   238,    -1,   294,    -1,   307,    -1,    51,   333,    -1,
+-      52,   333,    -1,   303,    -1,   335,    -1,   217,    -1,    97,
+-     420,    34,   152,   405,   153,   394,   426,   397,   389,   158,
+-     327,   403,   402,    -1,    -1,   109,    34,   219,   220,   158,
+-      -1,    -1,   156,   221,   157,    -1,   179,    -1,   221,   179,
+-      -1,    -1,   111,   223,   156,   224,   157,    -1,   225,    -1,
+-     224,   225,    -1,    34,    -1,   112,   227,    -1,    34,    -1,
+-     152,   228,   153,    -1,   229,    -1,   228,   154,   229,    -1,
+-     138,   155,   381,    -1,    -1,   110,   231,   156,   232,   157,
+-      -1,   233,    -1,   232,   233,    -1,    34,    -1,    -1,    32,
+-     152,   235,   237,   153,    -1,    34,    -1,   159,    34,    -1,
+-     236,    95,    34,    -1,   236,    95,   159,    34,    -1,   236,
+-      -1,   339,   160,   339,    -1,    33,    -1,   113,   240,   397,
+-      -1,    -1,    36,    -1,   152,   241,   153,    -1,   242,    -1,
+-     241,   154,   242,    -1,   145,   155,    36,    -1,   137,   155,
+-      36,    -1,   143,   155,    36,    -1,   144,   155,    36,    -1,
+-     128,   244,    -1,   277,    -1,   152,   245,   153,    -1,   246,
+-      -1,   245,   154,   246,    -1,   138,   155,   277,    -1,   129,
+-     248,    -1,   277,    -1,   152,   249,   153,    -1,   250,    -1,
+-     249,   154,   250,    -1,   138,   155,   277,    -1,   131,   252,
+-      -1,   351,    -1,   152,   253,   153,    -1,   254,    -1,   253,
+-     154,   254,    -1,   138,   155,   351,    -1,    62,   256,   259,
+-      -1,   277,    -1,   152,   257,   153,    -1,   258,    -1,   257,
+-     154,   258,    -1,   138,   155,   277,    -1,    -1,   156,   260,
+-     157,   158,    -1,   261,    -1,   260,   261,    -1,   234,    -1,
+-     238,    -1,   323,    -1,    63,   263,   266,    -1,   277,    -1,
+-     152,   264,   153,    -1,   265,    -1,   264,   154,   265,    -1,
+-     138,   155,   277,    -1,    -1,   156,   267,   157,   158,    -1,
+-     268,    -1,   267,   268,    -1,   234,    -1,   238,    -1,   323,
+-      -1,    60,   270,   274,    -1,    61,   277,   278,    -1,    -1,
+-     277,   271,   278,    -1,   152,   272,   153,    -1,   273,    -1,
+-     272,   154,   273,    -1,   135,   155,    36,    -1,   136,   155,
+-      36,    -1,   138,   155,   277,    -1,   146,   155,   354,    -1,
+-     147,   155,   354,    -1,   148,   155,   354,    -1,   149,   155,
+-     354,    -1,   150,   155,    34,    -1,   151,   155,   106,    -1,
+-      -1,   156,   275,   157,   158,    -1,   276,    -1,   275,   276,
+-      -1,   234,    -1,   238,    -1,   319,    -1,   323,    -1,    34,
+-      -1,    35,    -1,    -1,   106,    -1,    54,   280,    -1,    35,
+-      -1,   152,   281,   153,    -1,   282,    -1,   281,   154,   282,
+-      -1,   138,   155,    35,    -1,   139,   155,   354,    -1,    55,
+-      35,    -1,    56,   285,    -1,    35,    -1,   152,   286,   153,
+-      -1,   287,    -1,   286,   154,   287,    -1,   138,   155,    35,
+-      -1,    -1,    17,   333,    -1,    -1,    18,   333,    -1,    -1,
+-      19,   333,    -1,    29,   333,    -1,    57,   333,    -1,    58,
+-     333,    -1,    59,   333,    -1,    38,   333,    -1,    39,   333,
+-      -1,    40,   333,    -1,    41,   333,    -1,    42,   333,    -1,
+-      43,   333,    -1,    44,   333,    -1,    45,   333,    -1,    50,
+-     333,    -1,    46,   333,    -1,    23,   333,    -1,    26,   333,
+-      -1,    27,   333,    -1,    20,   333,    -1,    21,   333,    -1,
+-      22,   333,    -1,    24,   333,    -1,    25,   333,    -1,    28,
+-     333,    -1,    10,   333,    -1,    11,   333,    -1,    11,   333,
+-      -1,    13,   333,    -1,    14,   333,    -1,     4,   320,    -1,
+-     152,   321,   153,    -1,   322,    -1,   321,   154,   322,    -1,
+-     141,   155,    36,    -1,    12,   324,   333,    -1,    -1,    36,
+-      -1,   152,   325,   153,    -1,   326,    -1,   325,   154,   326,
+-      -1,   132,   155,    36,    -1,   143,   155,    36,    -1,    -1,
+-     323,    -1,    15,   329,   333,    -1,    34,    -1,   152,   330,
+-     153,    -1,   331,    -1,   330,   154,   331,    -1,   134,   155,
+-      34,    -1,   140,   155,   106,    -1,    16,    35,   338,   333,
+-      -1,   334,    33,    -1,    31,    -1,   334,    31,    -1,    -1,
+-      91,   337,   339,   397,   336,   156,   340,   157,   158,    -1,
+-      -1,    64,    -1,    65,    -1,    -1,    35,    -1,    -1,    34,
+-      -1,    -1,   341,    -1,   342,    -1,   341,   342,    -1,   234,
+-      -1,   238,    -1,    34,   344,   397,   343,    -1,    -1,   154,
+-      -1,    -1,   155,   349,    -1,    -1,   155,   346,    -1,   349,
+-      -1,   346,   347,   349,    -1,   160,    -1,   161,    -1,   162,
+-      -1,   163,    -1,   164,    -1,   165,    -1,    -1,   159,    -1,
+-     166,    -1,   160,    -1,   161,    -1,   162,    -1,   164,    -1,
+-     350,   348,   355,    -1,    -1,   152,   351,   153,    -1,    94,
+-     352,    -1,   352,    -1,   353,    -1,   352,    94,   353,    -1,
+-      34,    -1,   115,    -1,   116,    -1,   351,    -1,   424,   152,
+-     356,   153,    -1,   107,    -1,   106,    -1,   354,    -1,   117,
+-      -1,    36,    -1,   114,    -1,    -1,   346,    -1,   356,   154,
+-     346,    -1,   108,   420,    34,   397,   158,   327,    -1,   108,
+-     420,   152,   162,    34,   153,   152,   425,   153,   397,   158,
+-     327,    -1,    -1,    -1,    65,   351,   359,   367,   397,   360,
+-     371,   158,    -1,    -1,   363,   362,   364,    -1,   125,   167,
+-     425,   168,    -1,    -1,    -1,    64,   351,   365,   367,   397,
+-     366,   371,   158,    -1,    -1,   169,   368,    -1,   369,    -1,
+-     368,   154,   369,    -1,   370,   351,    -1,    -1,    66,    -1,
+-      67,    -1,    68,    -1,    -1,   156,   372,   157,    -1,    -1,
+-     373,    -1,   372,   373,    -1,   234,    -1,   238,    -1,   218,
+-      -1,   358,    -1,   364,    -1,   361,    -1,   204,    -1,   357,
+-      -1,   335,    -1,   374,    -1,   323,    -1,   307,    -1,   294,
+-      -1,   295,    -1,   296,    -1,   297,    -1,   298,    -1,   299,
+-      -1,   300,    -1,   301,    -1,   302,    -1,   303,    -1,   304,
+-      -1,   305,    -1,   316,    -1,   384,    -1,   383,    -1,   408,
+-      -1,    53,   333,    -1,    52,   333,    -1,    51,   333,    -1,
+-      66,   382,   169,    -1,    67,   382,   169,    -1,    68,   382,
+-     169,    -1,    69,   169,    -1,   130,   375,   378,    -1,   152,
+-     376,   153,    -1,   377,    -1,   376,   154,   377,    -1,   133,
+-     155,    34,    -1,   138,   155,   381,    -1,   142,   155,    34,
+-      -1,    -1,   156,   379,   157,   158,    -1,   380,    -1,   379,
+-     380,    -1,   234,    -1,   238,    -1,   323,    -1,    34,    -1,
+-      36,    -1,    -1,    71,    -1,   391,   166,    34,   152,   153,
+-     426,   396,   397,   158,   403,   402,   404,    -1,    -1,   124,
+-     385,   386,    -1,   386,    -1,    34,   152,   405,   153,   426,
+-     397,   387,   158,   327,   403,   402,    -1,    -1,    -1,   170,
+-     388,   152,   405,   153,   171,    -1,    -1,    -1,   170,   390,
+-     420,   152,   405,   153,   171,    -1,    -1,    90,    -1,   420,
+-      34,   152,   405,   153,   394,   395,   426,   396,   397,   389,
+-     158,   327,   403,   402,   404,   401,    -1,   420,   118,   155,
+-     152,   420,   153,   158,    -1,   420,   118,   393,   152,   405,
+-     153,   394,   395,   426,   396,   397,   389,   158,   403,   402,
+-     404,   401,    -1,   118,   420,   152,   405,   153,   394,   395,
+-     426,   396,   397,   389,   158,   403,   402,   404,   401,    -1,
+-     161,    -1,   160,    -1,   162,    -1,   163,    -1,   172,    -1,
+-     164,    -1,   165,    -1,   173,    -1,   167,   167,    -1,   168,
+-     168,    -1,   161,   155,    -1,   160,   155,    -1,   162,   155,
+-      -1,   163,   155,    -1,   172,   155,    -1,   164,   155,    -1,
+-     165,   155,    -1,   173,   155,    -1,   167,   167,   155,    -1,
+-     168,   168,   155,    -1,   166,    -1,   152,   153,    -1,   170,
+-     171,    -1,   167,    -1,   167,   155,    -1,   155,   155,    -1,
+-     159,   155,    -1,   168,    -1,   168,   155,    -1,    -1,    96,
+-      -1,    -1,   126,    -1,    -1,   155,   106,    -1,    -1,   163,
+-     398,   163,    -1,   399,    -1,   398,   154,   399,    -1,    34,
+-      -1,    34,   155,   400,    -1,   277,    -1,    34,   169,   278,
+-     160,   278,    -1,    36,    -1,   106,    -1,    -1,    47,   333,
+-      -1,    -1,    48,   333,    -1,    -1,    49,   333,    -1,    -1,
+-      37,   333,    -1,   406,    -1,    -1,   407,    -1,   406,   154,
+-     407,    -1,    98,   339,   397,   345,    -1,    99,   339,   397,
+-     345,    -1,   100,   339,   397,   345,    -1,   101,   339,   397,
+-      -1,   102,   339,   397,    -1,   103,   152,   405,   153,   339,
+-     397,    -1,   104,   152,   405,   153,   339,   397,    -1,   120,
+-     339,   397,    -1,   421,   345,    -1,    -1,    70,   409,   411,
+-      -1,    -1,    72,   410,   411,    -1,   411,    -1,    -1,    97,
+-     412,   413,    -1,   413,    -1,   414,    -1,   416,    -1,    -1,
+-      90,   415,   392,    -1,   392,    -1,   420,    34,   397,   417,
+-     158,   288,   289,   290,    -1,    -1,   156,   418,   157,    -1,
+-     419,    -1,   418,   419,    -1,   234,    -1,   238,    -1,    17,
+-     333,    -1,    18,   333,    -1,    19,   333,    -1,    96,   424,
+-     423,   422,    -1,   424,   423,   422,    -1,   420,   339,   397,
+-      -1,    -1,   164,    -1,    -1,   423,   162,    96,    -1,   423,
+-     162,    -1,   351,    -1,   351,   167,   425,   168,    -1,    65,
+-     351,    -1,    93,    74,    -1,    74,    -1,    93,    -1,    93,
+-      75,    -1,    75,    -1,    76,    -1,    93,    76,    -1,    76,
+-      76,    -1,    93,    76,    76,    -1,    77,    -1,    78,    -1,
+-      73,    -1,    92,    79,    -1,    93,    79,    -1,    79,    -1,
+-      80,    -1,    81,    -1,    82,    -1,    83,    -1,    84,    -1,
+-      85,    -1,    86,    -1,    87,    -1,    88,    -1,    89,    -1,
+-     105,    -1,   127,    -1,   420,    -1,   425,   154,   420,    -1,
+-      -1,   119,   152,   427,   153,    -1,    -1,   351,    -1,   427,
+-     154,   351,    -1
+-};
+-
+-/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
++  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
+ static const yytype_uint16 yyrline[] =
+ {
+        0,   576,   576,   577,   580,   580,   599,   600,   601,   602,
+@@ -1225,7 +1025,7 @@
+ };
+ #endif
+ 
+-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
++#if YYDEBUG || YYERROR_VERBOSE || 0
+ /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
+ static const char *const yytname[] =
+@@ -1268,7 +1068,7 @@
+   "TK_CALLSUPERINIT", "TK_DEFERRORHANDLER", "TK_VERSION", "'('", "')'",
+   "','", "'='", "'{'", "'}'", "';'", "'!'", "'-'", "'+'", "'*'", "'/'",
+   "'&'", "'|'", "'~'", "'<'", "'>'", "':'", "'['", "']'", "'%'", "'^'",
+-  "$accept", "specification", "statement", "@1", "modstatement",
++  "$accept", "specification", "statement", "$@1", "modstatement",
+   "nsstatement", "defdocstringfmt", "defdocstringfmt_args",
+   "defdocstringfmt_arg_list", "defdocstringfmt_arg", "defdocstringsig",
+   "defdocstringsig_args", "defdocstringsig_arg_list",
+@@ -1278,13 +1078,13 @@
+   "veh_arg_list", "veh_arg", "api", "api_args", "api_arg_list", "api_arg",
+   "exception", "baseexception", "exception_body",
+   "exception_body_directives", "exception_body_directive", "raisecode",
+-  "mappedtype", "@2", "mappedtypetmpl", "@3", "mtdefinition", "mtbody",
+-  "mtline", "mtfunction", "namespace", "@4", "optnsbody", "nsbody",
+-  "platforms", "@5", "platformlist", "platform", "feature", "feature_args",
+-  "feature_arg_list", "feature_arg", "timeline", "@6", "qualifierlist",
+-  "qualifiername", "ifstart", "@7", "oredqualifiers", "qualifiers",
+-  "ifend", "license", "license_args", "license_arg_list", "license_arg",
+-  "defmetatype", "defmetatype_args", "defmetatype_arg_list",
++  "mappedtype", "$@2", "mappedtypetmpl", "$@3", "mtdefinition", "mtbody",
++  "mtline", "mtfunction", "namespace", "$@4", "optnsbody", "nsbody",
++  "platforms", "$@5", "platformlist", "platform", "feature",
++  "feature_args", "feature_arg_list", "feature_arg", "timeline", "$@6",
++  "qualifierlist", "qualifiername", "ifstart", "$@7", "oredqualifiers",
++  "qualifiers", "ifend", "license", "license_args", "license_arg_list",
++  "license_arg", "defmetatype", "defmetatype_args", "defmetatype_arg_list",
+   "defmetatype_arg", "defsupertype", "defsupertype_args",
+   "defsupertype_arg_list", "defsupertype_arg", "hiddenns", "hiddenns_args",
+   "hiddenns_arg_list", "hiddenns_arg", "consmodule", "consmodule_args",
+@@ -1292,7 +1092,7 @@
+   "consmodule_body_directives", "consmodule_body_directive", "compmodule",
+   "compmodule_args", "compmodule_arg_list", "compmodule_arg",
+   "compmodule_body", "compmodule_body_directives",
+-  "compmodule_body_directive", "module", "module_args", "@8",
++  "compmodule_body_directive", "module", "module_args", "$@8",
+   "module_arg_list", "module_arg", "module_body", "module_body_directives",
+   "module_body_directive", "dottedname", "optnumber", "include",
+   "include_args", "include_arg_list", "include_arg", "optinclude",
+@@ -1307,31 +1107,31 @@
+   "autopyname_args", "autopyname_arg_list", "autopyname_arg", "docstring",
+   "docstring_args", "docstring_arg_list", "docstring_arg", "optdocstring",
+   "extract", "extract_args", "extract_arg_list", "extract_arg", "makefile",
+-  "codeblock", "codelines", "enum", "@9", "optenumkey", "optfilename",
++  "codeblock", "codelines", "enum", "$@9", "optenumkey", "optfilename",
+   "optname", "optenumbody", "enumbody", "enumline", "optcomma",
+   "optenumassign", "optassign", "expr", "binop", "optunop", "value",
+   "optcast", "scopedname", "scopednamehead", "scopepart", "bool_value",
+-  "simplevalue", "exprlist", "typedef", "struct", "@10", "@11",
+-  "classtmpl", "@12", "template", "class", "@13", "@14", "superclasses",
++  "simplevalue", "exprlist", "typedef", "struct", "$@10", "$@11",
++  "classtmpl", "$@12", "template", "class", "$@13", "$@14", "superclasses",
+   "superlist", "superclass", "class_access", "optclassbody", "classbody",
+   "classline", "property", "property_args", "property_arg_list",
+   "property_arg", "property_body", "property_body_directives",
+   "property_body_directive", "name_or_string", "optslot", "dtor", "ctor",
+-  "@15", "simplector", "optctorsig", "@16", "optsig", "@17", "optvirtual",
+-  "function", "operatorname", "optconst", "optfinal", "optabstract",
+-  "optflags", "flaglist", "flag", "flagvalue", "virtualcallcode",
+-  "methodcode", "premethodcode", "virtualcatchercode", "arglist",
+-  "rawarglist", "argvalue", "varmember", "@18", "@19", "simple_varmem",
+-  "@20", "varmem", "member", "@21", "variable", "variable_body",
+-  "variable_body_directives", "variable_body_directive", "cpptype",
+-  "argtype", "optref", "deref", "basetype", "cpptypelist", "optexceptions",
+-  "exceptionlist", 0
++  "$@15", "simplector", "optctorsig", "$@16", "optsig", "$@17",
++  "optvirtual", "function", "operatorname", "optconst", "optfinal",
++  "optabstract", "optflags", "flaglist", "flag", "flagvalue",
++  "virtualcallcode", "methodcode", "premethodcode", "virtualcatchercode",
++  "arglist", "rawarglist", "argvalue", "varmember", "$@18", "$@19",
++  "simple_varmem", "$@20", "varmem", "member", "$@21", "variable",
++  "variable_body", "variable_body_directives", "variable_body_directive",
++  "cpptype", "argtype", "optref", "deref", "basetype", "cpptypelist",
++  "optexceptions", "exceptionlist", YY_NULLPTR
+ };
+ #endif
+ 
+ # ifdef YYPRINT
+-/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+-   token YYLEX-NUM.  */
++/* YYTOKNUM[NUM] -- (External) token number corresponding to the
++   (internal) symbol number NUM (which must be that of a token).  */
+ static const yytype_uint16 yytoknum[] =
+ {
+        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+@@ -1355,282 +1155,18 @@
+ };
+ # endif
+ 
+-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+-static const yytype_uint16 yyr1[] =
+-{
+-       0,   174,   175,   175,   177,   176,   178,   178,   178,   178,
+-     178,   178,   178,   178,   178,   178,   178,   178,   178,   178,
+-     178,   178,   178,   178,   178,   178,   178,   178,   178,   178,
+-     178,   178,   178,   178,   178,   178,   178,   178,   178,   178,
+-     178,   178,   178,   178,   179,   179,   179,   179,   179,   179,
+-     179,   179,   179,   179,   179,   179,   180,   181,   181,   182,
+-     182,   183,   184,   185,   185,   186,   186,   187,   188,   189,
+-     189,   190,   190,   191,   192,   193,   193,   194,   194,   195,
+-     196,   197,   197,   198,   198,   199,   200,   201,   201,   202,
+-     202,   203,   203,   204,   205,   205,   206,   207,   207,   208,
+-     208,   208,   208,   209,   211,   210,   213,   212,   214,   215,
+-     215,   216,   216,   216,   216,   216,   216,   216,   216,   216,
+-     217,   219,   218,   220,   220,   221,   221,   223,   222,   224,
+-     224,   225,   226,   227,   227,   228,   228,   229,   231,   230,
+-     232,   232,   233,   235,   234,   236,   236,   236,   236,   237,
+-     237,   238,   239,   240,   240,   240,   241,   241,   242,   242,
+-     242,   242,   243,   244,   244,   245,   245,   246,   247,   248,
+-     248,   249,   249,   250,   251,   252,   252,   253,   253,   254,
+-     255,   256,   256,   257,   257,   258,   259,   259,   260,   260,
+-     261,   261,   261,   262,   263,   263,   264,   264,   265,   266,
+-     266,   267,   267,   268,   268,   268,   269,   269,   271,   270,
+-     270,   272,   272,   273,   273,   273,   273,   273,   273,   273,
+-     273,   273,   274,   274,   275,   275,   276,   276,   276,   276,
+-     277,   277,   278,   278,   279,   280,   280,   281,   281,   282,
+-     282,   283,   284,   285,   285,   286,   286,   287,   288,   288,
+-     289,   289,   290,   290,   291,   292,   293,   294,   295,   296,
+-     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+-     307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
+-     317,   318,   319,   320,   321,   321,   322,   323,   324,   324,
+-     324,   325,   325,   326,   326,   327,   327,   328,   329,   329,
+-     330,   330,   331,   331,   332,   333,   334,   334,   336,   335,
+-     337,   337,   337,   338,   338,   339,   339,   340,   340,   341,
+-     341,   342,   342,   342,   343,   343,   344,   344,   345,   345,
+-     346,   346,   347,   347,   347,   347,   347,   347,   348,   348,
+-     348,   348,   348,   348,   348,   349,   350,   350,   351,   351,
+-     352,   352,   353,   354,   354,   355,   355,   355,   355,   355,
+-     355,   355,   355,   356,   356,   356,   357,   357,   359,   360,
+-     358,   362,   361,   363,   365,   366,   364,   367,   367,   368,
+-     368,   369,   370,   370,   370,   370,   371,   371,   372,   372,
+-     372,   373,   373,   373,   373,   373,   373,   373,   373,   373,
+-     373,   373,   373,   373,   373,   373,   373,   373,   373,   373,
+-     373,   373,   373,   373,   373,   373,   373,   373,   373,   373,
+-     373,   373,   373,   373,   373,   373,   374,   375,   376,   376,
+-     377,   377,   377,   378,   378,   379,   379,   380,   380,   380,
+-     381,   381,   382,   382,   383,   385,   384,   384,   386,   387,
+-     388,   387,   389,   390,   389,   391,   391,   392,   392,   392,
+-     392,   393,   393,   393,   393,   393,   393,   393,   393,   393,
+-     393,   393,   393,   393,   393,   393,   393,   393,   393,   393,
+-     393,   393,   393,   393,   393,   393,   393,   393,   393,   393,
+-     394,   394,   395,   395,   396,   396,   397,   397,   398,   398,
+-     399,   399,   400,   400,   400,   400,   401,   401,   402,   402,
+-     403,   403,   404,   404,   405,   406,   406,   406,   407,   407,
+-     407,   407,   407,   407,   407,   407,   407,   409,   408,   410,
+-     408,   408,   412,   411,   411,   413,   413,   415,   414,   414,
+-     416,   417,   417,   418,   418,   419,   419,   419,   419,   419,
+-     420,   420,   421,   422,   422,   423,   423,   423,   424,   424,
+-     424,   424,   424,   424,   424,   424,   424,   424,   424,   424,
+-     424,   424,   424,   424,   424,   424,   424,   424,   424,   424,
+-     424,   424,   424,   424,   424,   424,   424,   424,   425,   425,
+-     426,   426,   427,   427,   427
+-};
++#define YYPACT_NINF -848
+ 
+-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+-static const yytype_uint8 yyr2[] =
+-{
+-       0,     2,     1,     2,     0,     2,     1,     1,     1,     1,
+-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+-       1,     1,     1,     1,     1,     1,     2,     1,     3,     1,
+-       3,     3,     2,     1,     3,     1,     3,     3,     2,     1,
+-       3,     1,     3,     3,     2,     1,     3,     1,     3,     3,
+-       3,     1,     3,     1,     3,     3,     2,     2,     3,     1,
+-       3,     3,     3,     5,     0,     3,     4,     1,     2,     1,
+-       1,     1,     1,     2,     0,     5,     0,     6,     4,     1,
+-       2,     1,     1,     1,     1,     2,     2,     1,     1,     1,
+-      14,     0,     5,     0,     3,     1,     2,     0,     5,     1,
+-       2,     1,     2,     1,     3,     1,     3,     3,     0,     5,
+-       1,     2,     1,     0,     5,     1,     2,     3,     4,     1,
+-       3,     1,     3,     0,     1,     3,     1,     3,     3,     3,
+-       3,     3,     2,     1,     3,     1,     3,     3,     2,     1,
+-       3,     1,     3,     3,     2,     1,     3,     1,     3,     3,
+-       3,     1,     3,     1,     3,     3,     0,     4,     1,     2,
+-       1,     1,     1,     3,     1,     3,     1,     3,     3,     0,
+-       4,     1,     2,     1,     1,     1,     3,     3,     0,     3,
+-       3,     1,     3,     3,     3,     3,     3,     3,     3,     3,
+-       3,     3,     0,     4,     1,     2,     1,     1,     1,     1,
+-       1,     1,     0,     1,     2,     1,     3,     1,     3,     3,
+-       3,     2,     2,     1,     3,     1,     3,     3,     0,     2,
+-       0,     2,     0,     2,     2,     2,     2,     2,     2,     2,
+-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+-       2,     2,     2,     3,     1,     3,     3,     3,     0,     1,
+-       3,     1,     3,     3,     3,     0,     1,     3,     1,     3,
+-       1,     3,     3,     3,     4,     2,     1,     2,     0,     9,
+-       0,     1,     1,     0,     1,     0,     1,     0,     1,     1,
+-       2,     1,     1,     4,     0,     1,     0,     2,     0,     2,
+-       1,     3,     1,     1,     1,     1,     1,     1,     0,     1,
+-       1,     1,     1,     1,     1,     3,     0,     3,     2,     1,
+-       1,     3,     1,     1,     1,     1,     4,     1,     1,     1,
+-       1,     1,     1,     0,     1,     3,     6,    12,     0,     0,
+-       8,     0,     3,     4,     0,     0,     8,     0,     2,     1,
+-       3,     2,     0,     1,     1,     1,     0,     3,     0,     1,
+-       2,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+-       1,     1,     1,     1,     1,     1,     1,     1,     1,     2,
+-       2,     2,     3,     3,     3,     2,     3,     3,     1,     3,
+-       3,     3,     3,     0,     4,     1,     2,     1,     1,     1,
+-       1,     1,     0,     1,    12,     0,     3,     1,    11,     0,
+-       0,     6,     0,     0,     7,     0,     1,    17,     7,    17,
+-      16,     1,     1,     1,     1,     1,     1,     1,     1,     2,
+-       2,     2,     2,     2,     2,     2,     2,     2,     2,     3,
+-       3,     1,     2,     2,     1,     2,     2,     2,     1,     2,
+-       0,     1,     0,     1,     0,     2,     0,     3,     1,     3,
+-       1,     3,     1,     5,     1,     1,     0,     2,     0,     2,
+-       0,     2,     0,     2,     1,     0,     1,     3,     4,     4,
+-       4,     3,     3,     6,     6,     3,     2,     0,     3,     0,
+-       3,     1,     0,     3,     1,     1,     1,     0,     3,     1,
+-       8,     0,     3,     1,     2,     1,     1,     2,     2,     2,
+-       4,     3,     3,     0,     1,     0,     3,     2,     1,     4,
+-       2,     2,     1,     1,     2,     1,     1,     2,     2,     3,
+-       1,     1,     1,     2,     2,     1,     1,     1,     1,     1,
+-       1,     1,     1,     1,     1,     1,     1,     1,     1,     3,
+-       0,     4,     0,     1,     3
+-};
++#define yypact_value_is_default(Yystate) \
++  (!!((Yystate) == (-848)))
+ 
+-/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+-   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+-   means the default is an error.  */
+-static const yytype_uint16 yydefact[] =
+-{
+-       4,     4,     2,     0,     1,     3,     0,     0,     0,     0,
+-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+-       0,     0,     0,     0,     0,     0,     0,     0,   151,   352,
+-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+-       0,     0,   572,   562,   565,   566,   570,   571,   575,   576,
+-     577,   578,   579,   580,   581,   582,   583,   584,   585,   310,
+-       0,   563,     0,     0,   586,     0,     0,   138,   127,     0,
+-     153,     0,     0,     0,   587,     0,     0,     0,     5,    43,
+-      19,    20,    21,     9,    42,    14,    50,    40,    41,    46,
+-      16,    17,    15,    44,    45,    18,    22,    23,    24,     7,
+-       8,     6,    11,    12,    13,    10,    25,    26,    55,    27,
+-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+-      38,    39,    52,   558,   349,   350,    51,    47,    49,   371,
+-      48,    53,    54,     0,   555,     0,     0,    86,    57,     0,
+-      56,    63,     0,    62,    69,     0,    68,    75,     0,    74,
+-      81,     0,     0,   306,   277,     0,   278,   280,   281,   298,
+-       0,     0,   313,   271,   272,   273,   274,   275,   269,   276,
+-     254,     0,   496,   143,   235,     0,   234,   241,   243,     0,
+-     242,   255,   256,   257,   230,   231,     0,   222,   208,   232,
+-       0,   186,   181,     0,   199,   194,   374,   368,   568,   311,
+-     312,   315,   573,   561,   564,   567,   574,   348,   555,     0,
+-     121,     0,     0,   133,     0,   132,   154,     0,   496,     0,
+-      94,     0,     0,   162,   163,     0,   168,   169,     0,   174,
+-     175,     0,     0,     0,     0,   496,     0,   553,    87,     0,
+-       0,     0,    89,     0,     0,    59,     0,     0,    65,     0,
+-       0,    71,     0,     0,    77,     0,     0,    83,    80,   307,
+-     305,     0,     0,     0,   300,   297,   314,     0,   560,     0,
+-     104,   315,     0,     0,     0,   237,     0,     0,   245,     0,
+-       0,     0,     0,     0,     0,     0,     0,     0,     0,   211,
+-       0,   206,   232,   233,   207,     0,     0,   183,     0,   180,
+-       0,     0,   196,     0,   193,   377,   377,   316,   496,   569,
+-     553,   496,     0,   123,     0,     0,     0,     0,   135,     0,
+-       0,     0,     0,     0,   156,   152,   515,     0,   496,   588,
+-       0,     0,     0,   165,     0,     0,   171,     0,     0,   177,
+-       0,   351,   496,   372,   515,   541,     0,     0,     0,   462,
+-     461,   463,   464,   466,   467,   481,   484,   488,     0,   465,
+-     468,     0,   557,   554,   551,     0,     0,    88,     0,     0,
+-      58,     0,     0,    64,     0,     0,    70,     0,     0,    76,
+-       0,     0,    82,     0,     0,     0,   299,     0,   304,   500,
+-       0,   498,     0,   145,     0,   149,     0,     0,     0,     0,
+-     236,     0,     0,   244,     0,     0,     0,     0,     0,     0,
+-       0,     0,     0,     0,   210,     0,     0,   288,   226,   227,
+-       0,   224,   228,   229,   209,     0,   182,     0,   190,   191,
+-       0,   188,   192,     0,   195,     0,   203,   204,     0,   201,
+-     205,   382,   496,   496,   308,   550,     0,     0,     0,     0,
+-     142,     0,   140,   131,     0,   129,     0,   134,     0,     0,
+-       0,     0,     0,   155,     0,   315,   315,   315,   315,   315,
+-       0,     0,   315,     0,   514,   516,   315,   328,     0,     0,
+-       0,   373,     0,   164,     0,     0,   170,     0,     0,   176,
+-       0,   559,   106,     0,     0,     0,   482,     0,   486,   487,
+-     472,   471,   473,   474,   476,   477,   485,   469,   489,   470,
+-     483,   475,   478,   515,   556,   440,   441,    91,    92,    90,
+-      61,    60,    67,    66,    73,    72,    79,    78,    85,    84,
+-     302,   303,   301,     0,     0,   497,     0,   105,   146,     0,
+-     144,   315,   239,   353,   354,   240,   238,   247,   246,   213,
+-     214,   215,   216,   217,   218,   219,   220,   221,   212,     0,
+-     282,   289,     0,     0,     0,   225,   185,   184,     0,   189,
+-     198,   197,     0,   202,   383,   384,   385,   378,   379,     0,
+-     375,   369,     0,   295,     0,   125,     0,   371,   122,   139,
+-     141,   128,   130,   137,   136,   159,   160,   161,   158,   157,
+-     496,   496,   496,   496,   496,   515,   515,   496,   490,     0,
+-     496,   346,   526,    95,     0,    93,   589,   167,   166,   173,
+-     172,   179,   178,     0,   490,     0,     0,     0,   545,   546,
+-       0,   543,   248,     0,   479,   480,     0,   230,   504,   505,
+-     502,   501,   499,     0,     0,     0,     0,     0,     0,   109,
+-     119,   111,   112,   113,   117,   114,   118,   147,     0,   150,
+-       0,     0,   284,     0,     0,     0,   291,   287,   223,   187,
+-     200,   382,   381,   386,   386,   317,   296,   366,     0,   124,
+-     126,   328,   328,   328,   521,   522,     0,     0,   525,   491,
+-     492,   517,   552,     0,   329,   330,   338,     0,     0,    97,
+-     101,    99,   100,   102,   107,   492,   547,   548,   549,   542,
+-     544,     0,   250,     0,   490,   232,   270,   266,   115,   116,
+-       0,     0,   110,   148,     0,   283,     0,     0,     0,   290,
+-       0,   380,   388,     0,     0,   326,   321,   322,     0,   318,
+-     319,     0,   518,   519,   520,   315,   315,   493,   590,     0,
+-     332,   333,   334,   335,   336,   337,   346,   339,   341,   342,
+-     343,   344,   340,     0,   103,     0,    98,   590,   249,     0,
+-     252,   458,   492,     0,     0,   108,   286,   285,   293,   294,
+-     292,     0,     0,   352,     0,     0,     0,     0,     0,     0,
+-       0,     0,     0,     0,     0,     0,   442,   442,   442,     0,
+-     527,   529,   537,   532,   445,     0,   397,   393,   391,   392,
+-     403,   404,   405,   406,   407,   408,   409,   410,   411,   412,
+-     413,   414,   402,   415,   401,   399,   398,   394,   396,   395,
+-     455,   389,   400,   417,   416,   447,     0,   539,   418,   531,
+-     534,   535,   536,   376,   370,   346,   496,     0,   320,     0,
+-     496,   496,     0,   494,   347,   331,   361,   358,   357,   362,
+-     360,   355,   359,   345,     0,    96,   494,   251,     0,   540,
+-     590,   232,   515,   279,   268,   515,   258,   259,   260,   261,
+-     262,   263,   264,   265,   267,   421,   420,   419,   443,     0,
+-       0,     0,   425,     0,     0,     0,     0,     0,     0,   433,
+-     387,   390,     0,   327,   324,   309,   496,   523,   524,   592,
+-       0,   496,   346,   496,   253,   494,   503,     0,     0,   422,
+-     423,   424,   537,   528,   530,   538,     0,   533,     0,   446,
+-       0,     0,     0,     0,   428,     0,   426,     0,   325,   323,
+-       0,   593,     0,   495,   452,   364,     0,   452,   496,   490,
+-     590,     0,     0,     0,     0,   427,     0,   437,   438,   439,
+-       0,   435,     0,   295,   591,     0,   453,     0,   356,   346,
+-       0,   452,   590,   496,   430,   431,   432,   429,     0,   436,
+-     590,   367,   594,     0,   510,   365,   295,     0,   496,   449,
+-     434,   494,     0,     0,   508,   510,   510,   452,   450,     0,
+-     496,   515,   511,     0,   512,   508,   508,     0,     0,   295,
+-       0,     0,   509,     0,   506,   512,   512,   295,   515,   510,
+-     510,     0,   513,     0,   460,   506,   506,   510,     0,   508,
+-     508,   454,   507,   457,   459,   508,     0,   448,   512,   120,
+-     451,   444
+-};
++#define YYTABLE_NINF -561
+ 
+-/* YYDEFGOTO[NTERM-NUM].  */
+-static const yytype_int16 yydefgoto[] =
+-{
+-      -1,     1,     2,     3,    78,    79,    80,   140,   244,   245,
+-      81,   143,   247,   248,    82,   146,   250,   251,    83,   149,
+-     253,   254,    84,   152,   256,   257,    85,   137,   241,   242,
+-      86,   328,   615,   698,   699,   700,    87,   392,    88,   623,
+-     537,   648,   649,   650,    89,   313,   449,   586,    90,   212,
+-     454,   455,    91,   215,   317,   318,    92,   211,   451,   452,
+-      93,   271,   395,   396,    94,    95,   218,   323,   324,    96,
+-     223,   332,   333,    97,   226,   335,   336,    98,   229,   338,
+-     339,    99,   191,   296,   297,   299,   430,   431,   100,   194,
+-     301,   302,   304,   438,   439,   101,   187,   292,   288,   289,
+-     291,   420,   421,   188,   294,   102,   176,   274,   275,   103,
+-     104,   180,   277,   278,   712,   770,   869,   105,   106,   107,
+-     108,   811,   812,   813,   814,   815,   816,   817,   818,   654,
+-     820,   821,   109,   655,   110,   111,   112,   113,   114,   115,
+-     116,   117,   823,   118,   119,   422,   560,   661,   662,   676,
+-     563,   665,   666,   677,   120,   161,   263,   264,   121,   154,
+-     155,   122,   582,   201,   267,   308,   738,   739,   740,   939,
+-     846,   612,   694,   756,   763,   695,   696,   123,   124,   125,
+-     545,   863,   946,   126,   127,   306,   674,   128,   234,   587,
+-     130,   305,   673,   442,   577,   578,   579,   733,   830,   831,
+-     832,   899,   933,   934,   936,   960,   961,   517,   889,   833,
+-     834,   897,   835,   999,  1008,   967,   983,   836,   837,   361,
+-     690,   748,   911,   270,   390,   391,   641,  1024,  1004,   994,
+-    1014,   473,   474,   475,   838,   893,   894,   839,   896,   840,
+-     841,   895,   842,   495,   630,   631,   476,   477,   364,   237,
+-     134,   330,   853,   942
+-};
++#define yytable_value_is_error(Yytable_value) \
++  0
+ 
+-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+-   STATE-NUM.  */
+-#define YYPACT_NINF -848
++  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
++     STATE-NUM.  */
+ static const yytype_int16 yypact[] =
+ {
+     -848,   264,  -848,  1011,  -848,  -848,    67,    30,    64,    89,
+@@ -1740,7 +1276,119 @@
+     -848,  -848
+ };
+ 
+-/* YYPGOTO[NTERM-NUM].  */
++  /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
++     Performed when YYTABLE does not specify something else to do.  Zero
++     means the default is an error.  */
++static const yytype_uint16 yydefact[] =
++{
++       4,     4,     2,     0,     1,     3,     0,     0,     0,     0,
++       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
++       0,     0,     0,     0,     0,     0,     0,     0,   151,   352,
++       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
++       0,     0,   572,   562,   565,   566,   570,   571,   575,   576,
++     577,   578,   579,   580,   581,   582,   583,   584,   585,   310,
++       0,   563,     0,     0,   586,     0,     0,   138,   127,     0,
++     153,     0,     0,     0,   587,     0,     0,     0,     5,    43,
++      19,    20,    21,     9,    42,    14,    50,    40,    41,    46,
++      16,    17,    15,    44,    45,    18,    22,    23,    24,     7,
++       8,     6,    11,    12,    13,    10,    25,    26,    55,    27,
++      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
++      38,    39,    52,   558,   349,   350,    51,    47,    49,   371,
++      48,    53,    54,     0,   555,     0,     0,    86,    57,     0,
++      56,    63,     0,    62,    69,     0,    68,    75,     0,    74,
++      81,     0,     0,   306,   277,     0,   278,   280,   281,   298,
++       0,     0,   313,   271,   272,   273,   274,   275,   269,   276,
++     254,     0,   496,   143,   235,     0,   234,   241,   243,     0,
++     242,   255,   256,   257,   230,   231,     0,   222,   208,   232,
++       0,   186,   181,     0,   199,   194,   374,   368,   568,   311,
++     312,   315,   573,   561,   564,   567,   574,   348,   555,     0,
++     121,     0,     0,   133,     0,   132,   154,     0,   496,     0,
++      94,     0,     0,   162,   163,     0,   168,   169,     0,   174,
++     175,     0,     0,     0,     0,   496,     0,   553,    87,     0,
++       0,     0,    89,     0,     0,    59,     0,     0,    65,     0,
++       0,    71,     0,     0,    77,     0,     0,    83,    80,   307,
++     305,     0,     0,     0,   300,   297,   314,     0,   560,     0,
++     104,   315,     0,     0,     0,   237,     0,     0,   245,     0,
++       0,     0,     0,     0,     0,     0,     0,     0,     0,   211,
++       0,   206,   232,   233,   207,     0,     0,   183,     0,   180,
++       0,     0,   196,     0,   193,   377,   377,   316,   496,   569,
++     553,   496,     0,   123,     0,     0,     0,     0,   135,     0,
++       0,     0,     0,     0,   156,   152,   515,     0,   496,   588,
++       0,     0,     0,   165,     0,     0,   171,     0,     0,   177,
++       0,   351,   496,   372,   515,   541,     0,     0,     0,   462,
++     461,   463,   464,   466,   467,   481,   484,   488,     0,   465,
++     468,     0,   557,   554,   551,     0,     0,    88,     0,     0,
++      58,     0,     0,    64,     0,     0,    70,     0,     0,    76,
++       0,     0,    82,     0,     0,     0,   299,     0,   304,   500,
++       0,   498,     0,   145,     0,   149,     0,     0,     0,     0,
++     236,     0,     0,   244,     0,     0,     0,     0,     0,     0,
++       0,     0,     0,     0,   210,     0,     0,   288,   226,   227,
++       0,   224,   228,   229,   209,     0,   182,     0,   190,   191,
++       0,   188,   192,     0,   195,     0,   203,   204,     0,   201,
++     205,   382,   496,   496,   308,   550,     0,     0,     0,     0,
++     142,     0,   140,   131,     0,   129,     0,   134,     0,     0,
++       0,     0,     0,   155,     0,   315,   315,   315,   315,   315,
++       0,     0,   315,     0,   514,   516,   315,   328,     0,     0,
++       0,   373,     0,   164,     0,     0,   170,     0,     0,   176,
++       0,   559,   106,     0,     0,     0,   482,     0,   486,   487,
++     472,   471,   473,   474,   476,   477,   485,   469,   489,   470,
++     483,   475,   478,   515,   556,   440,   441,    91,    92,    90,
++      61,    60,    67,    66,    73,    72,    79,    78,    85,    84,
++     302,   303,   301,     0,     0,   497,     0,   105,   146,     0,
++     144,   315,   239,   353,   354,   240,   238,   247,   246,   213,
++     214,   215,   216,   217,   218,   219,   220,   221,   212,     0,
++     282,   289,     0,     0,     0,   225,   185,   184,     0,   189,
++     198,   197,     0,   202,   383,   384,   385,   378,   379,     0,
++     375,   369,     0,   295,     0,   125,     0,   371,   122,   139,
++     141,   128,   130,   137,   136,   159,   160,   161,   158,   157,
++     496,   496,   496,   496,   496,   515,   515,   496,   490,     0,
++     496,   346,   526,    95,     0,    93,   589,   167,   166,   173,
++     172,   179,   178,     0,   490,     0,     0,     0,   545,   546,
++       0,   543,   248,     0,   479,   480,     0,   230,   504,   505,
++     502,   501,   499,     0,     0,     0,     0,     0,     0,   109,
++     119,   111,   112,   113,   117,   114,   118,   147,     0,   150,
++       0,     0,   284,     0,     0,     0,   291,   287,   223,   187,
++     200,   382,   381,   386,   386,   317,   296,   366,     0,   124,
++     126,   328,   328,   328,   521,   522,     0,     0,   525,   491,
++     492,   517,   552,     0,   329,   330,   338,     0,     0,    97,
++     101,    99,   100,   102,   107,   492,   547,   548,   549,   542,
++     544,     0,   250,     0,   490,   232,   270,   266,   115,   116,
++       0,     0,   110,   148,     0,   283,     0,     0,     0,   290,
++       0,   380,   388,     0,     0,   326,   321,   322,     0,   318,
++     319,     0,   518,   519,   520,   315,   315,   493,   590,     0,
++     332,   333,   334,   335,   336,   337,   346,   339,   341,   342,
++     343,   344,   340,     0,   103,     0,    98,   590,   249,     0,
++     252,   458,   492,     0,     0,   108,   286,   285,   293,   294,
++     292,     0,     0,   352,     0,     0,     0,     0,     0,     0,
++       0,     0,     0,     0,     0,     0,   442,   442,   442,     0,
++     527,   529,   537,   532,   445,     0,   397,   393,   391,   392,
++     403,   404,   405,   406,   407,   408,   409,   410,   411,   412,
++     413,   414,   402,   415,   401,   399,   398,   394,   396,   395,
++     455,   389,   400,   417,   416,   447,     0,   539,   418,   531,
++     534,   535,   536,   376,   370,   346,   496,     0,   320,     0,
++     496,   496,     0,   494,   347,   331,   361,   358,   357,   362,
++     360,   355,   359,   345,     0,    96,   494,   251,     0,   540,
++     590,   232,   515,   279,   268,   515,   258,   259,   260,   261,
++     262,   263,   264,   265,   267,   421,   420,   419,   443,     0,
++       0,     0,   425,     0,     0,     0,     0,     0,     0,   433,
++     387,   390,     0,   327,   324,   309,   496,   523,   524,   592,
++       0,   496,   346,   496,   253,   494,   503,     0,     0,   422,
++     423,   424,   537,   528,   530,   538,     0,   533,     0,   446,
++       0,     0,     0,     0,   428,     0,   426,     0,   325,   323,
++       0,   593,     0,   495,   452,   364,     0,   452,   496,   490,
++     590,     0,     0,     0,     0,   427,     0,   437,   438,   439,
++       0,   435,     0,   295,   591,     0,   453,     0,   356,   346,
++       0,   452,   590,   496,   430,   431,   432,   429,     0,   436,
++     590,   367,   594,     0,   510,   365,   295,     0,   496,   449,
++     434,   494,     0,     0,   508,   510,   510,   452,   450,     0,
++     496,   515,   511,     0,   512,   508,   508,     0,     0,   295,
++       0,     0,   509,     0,   506,   512,   512,   295,   515,   510,
++     510,     0,   513,     0,   460,   506,   506,   510,     0,   508,
++     508,   454,   507,   457,   459,   508,     0,   448,   512,   120,
++     451,   444
++};
++
++  /* YYPGOTO[NTERM-NUM].  */
+ static const yytype_int16 yypgoto[] =
+ {
+     -848,  -848,   761,  -848,  -848,  -397,  -848,  -848,  -848,   427,
+@@ -1771,11 +1419,40 @@
+      -10,  -204,  -732,  -848
+ };
+ 
+-/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+-   positive, shift that token.  If negative, reduce the rule which
+-   number is the opposite.  If zero, do what YYDEFACT says.
+-   If YYTABLE_NINF, syntax error.  */
+-#define YYTABLE_NINF -561
++  /* YYDEFGOTO[NTERM-NUM].  */
++static const yytype_int16 yydefgoto[] =
++{
++      -1,     1,     2,     3,    78,    79,    80,   140,   244,   245,
++      81,   143,   247,   248,    82,   146,   250,   251,    83,   149,
++     253,   254,    84,   152,   256,   257,    85,   137,   241,   242,
++      86,   328,   615,   698,   699,   700,    87,   392,    88,   623,
++     537,   648,   649,   650,    89,   313,   449,   586,    90,   212,
++     454,   455,    91,   215,   317,   318,    92,   211,   451,   452,
++      93,   271,   395,   396,    94,    95,   218,   323,   324,    96,
++     223,   332,   333,    97,   226,   335,   336,    98,   229,   338,
++     339,    99,   191,   296,   297,   299,   430,   431,   100,   194,
++     301,   302,   304,   438,   439,   101,   187,   292,   288,   289,
++     291,   420,   421,   188,   294,   102,   176,   274,   275,   103,
++     104,   180,   277,   278,   712,   770,   869,   105,   106,   107,
++     108,   811,   812,   813,   814,   815,   816,   817,   818,   654,
++     820,   821,   109,   655,   110,   111,   112,   113,   114,   115,
++     116,   117,   823,   118,   119,   422,   560,   661,   662,   676,
++     563,   665,   666,   677,   120,   161,   263,   264,   121,   154,
++     155,   122,   582,   201,   267,   308,   738,   739,   740,   939,
++     846,   612,   694,   756,   763,   695,   696,   123,   124,   125,
++     545,   863,   946,   126,   127,   306,   674,   128,   234,   587,
++     130,   305,   673,   442,   577,   578,   579,   733,   830,   831,
++     832,   899,   933,   934,   936,   960,   961,   517,   889,   833,
++     834,   897,   835,   999,  1008,   967,   983,   836,   837,   361,
++     690,   748,   911,   270,   390,   391,   641,  1024,  1004,   994,
++    1014,   473,   474,   475,   838,   893,   894,   839,   896,   840,
++     841,   895,   842,   495,   630,   631,   476,   477,   364,   237,
++     134,   330,   853,   942
++};
++
++  /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
++     positive, shift that token.  If negative, reduce the rule whose
++     number is the opposite.  If YYTABLE_NINF, syntax error.  */
+ static const yytype_int16 yytable[] =
+ {
+      156,   157,   158,   133,   493,   163,   164,   165,   166,   167,
+@@ -2108,8 +1785,8 @@
+       -1,   127
+ };
+ 
+-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+-   symbol of state STATE-NUM.  */
++  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
++     symbol of state STATE-NUM.  */
+ static const yytype_uint16 yystos[] =
+ {
+        0,   175,   176,   177,     0,   176,     3,     5,     6,     7,
+@@ -2219,95 +1896,171 @@
+      171,   404
+ };
+ 
+-#define yyerrok		(yyerrstatus = 0)
+-#define yyclearin	(yychar = YYEMPTY)
+-#define YYEMPTY		(-2)
+-#define YYEOF		0
++  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
++static const yytype_uint16 yyr1[] =
++{
++       0,   174,   175,   175,   177,   176,   178,   178,   178,   178,
++     178,   178,   178,   178,   178,   178,   178,   178,   178,   178,
++     178,   178,   178,   178,   178,   178,   178,   178,   178,   178,
++     178,   178,   178,   178,   178,   178,   178,   178,   178,   178,
++     178,   178,   178,   178,   179,   179,   179,   179,   179,   179,
++     179,   179,   179,   179,   179,   179,   180,   181,   181,   182,
++     182,   183,   184,   185,   185,   186,   186,   187,   188,   189,
++     189,   190,   190,   191,   192,   193,   193,   194,   194,   195,
++     196,   197,   197,   198,   198,   199,   200,   201,   201,   202,
++     202,   203,   203,   204,   205,   205,   206,   207,   207,   208,
++     208,   208,   208,   209,   211,   210,   213,   212,   214,   215,
++     215,   216,   216,   216,   216,   216,   216,   216,   216,   216,
++     217,   219,   218,   220,   220,   221,   221,   223,   222,   224,
++     224,   225,   226,   227,   227,   228,   228,   229,   231,   230,
++     232,   232,   233,   235,   234,   236,   236,   236,   236,   237,
++     237,   238,   239,   240,   240,   240,   241,   241,   242,   242,
++     242,   242,   243,   244,   244,   245,   245,   246,   247,   248,
++     248,   249,   249,   250,   251,   252,   252,   253,   253,   254,
++     255,   256,   256,   257,   257,   258,   259,   259,   260,   260,
++     261,   261,   261,   262,   263,   263,   264,   264,   265,   266,
++     266,   267,   267,   268,   268,   268,   269,   269,   271,   270,
++     270,   272,   272,   273,   273,   273,   273,   273,   273,   273,
++     273,   273,   274,   274,   275,   275,   276,   276,   276,   276,
++     277,   277,   278,   278,   279,   280,   280,   281,   281,   282,
++     282,   283,   284,   285,   285,   286,   286,   287,   288,   288,
++     289,   289,   290,   290,   291,   292,   293,   294,   295,   296,
++     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
++     307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
++     317,   318,   319,   320,   321,   321,   322,   323,   324,   324,
++     324,   325,   325,   326,   326,   327,   327,   328,   329,   329,
++     330,   330,   331,   331,   332,   333,   334,   334,   336,   335,
++     337,   337,   337,   338,   338,   339,   339,   340,   340,   341,
++     341,   342,   342,   342,   343,   343,   344,   344,   345,   345,
++     346,   346,   347,   347,   347,   347,   347,   347,   348,   348,
++     348,   348,   348,   348,   348,   349,   350,   350,   351,   351,
++     352,   352,   353,   354,   354,   355,   355,   355,   355,   355,
++     355,   355,   355,   356,   356,   356,   357,   357,   359,   360,
++     358,   362,   361,   363,   365,   366,   364,   367,   367,   368,
++     368,   369,   370,   370,   370,   370,   371,   371,   372,   372,
++     372,   373,   373,   373,   373,   373,   373,   373,   373,   373,
++     373,   373,   373,   373,   373,   373,   373,   373,   373,   373,
++     373,   373,   373,   373,   373,   373,   373,   373,   373,   373,
++     373,   373,   373,   373,   373,   373,   374,   375,   376,   376,
++     377,   377,   377,   378,   378,   379,   379,   380,   380,   380,
++     381,   381,   382,   382,   383,   385,   384,   384,   386,   387,
++     388,   387,   389,   390,   389,   391,   391,   392,   392,   392,
++     392,   393,   393,   393,   393,   393,   393,   393,   393,   393,
++     393,   393,   393,   393,   393,   393,   393,   393,   393,   393,
++     393,   393,   393,   393,   393,   393,   393,   393,   393,   393,
++     394,   394,   395,   395,   396,   396,   397,   397,   398,   398,
++     399,   399,   400,   400,   400,   400,   401,   401,   402,   402,
++     403,   403,   404,   404,   405,   406,   406,   406,   407,   407,
++     407,   407,   407,   407,   407,   407,   407,   409,   408,   410,
++     408,   408,   412,   411,   411,   413,   413,   415,   414,   414,
++     416,   417,   417,   418,   418,   419,   419,   419,   419,   419,
++     420,   420,   421,   422,   422,   423,   423,   423,   424,   424,
++     424,   424,   424,   424,   424,   424,   424,   424,   424,   424,
++     424,   424,   424,   424,   424,   424,   424,   424,   424,   424,
++     424,   424,   424,   424,   424,   424,   424,   424,   425,   425,
++     426,   426,   427,   427,   427
++};
+ 
+-#define YYACCEPT	goto yyacceptlab
+-#define YYABORT		goto yyabortlab
+-#define YYERROR		goto yyerrorlab
++  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
++static const yytype_uint8 yyr2[] =
++{
++       0,     2,     1,     2,     0,     2,     1,     1,     1,     1,
++       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
++       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
++       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
++       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
++       1,     1,     1,     1,     1,     1,     2,     1,     3,     1,
++       3,     3,     2,     1,     3,     1,     3,     3,     2,     1,
++       3,     1,     3,     3,     2,     1,     3,     1,     3,     3,
++       3,     1,     3,     1,     3,     3,     2,     2,     3,     1,
++       3,     3,     3,     5,     0,     3,     4,     1,     2,     1,
++       1,     1,     1,     2,     0,     5,     0,     6,     4,     1,
++       2,     1,     1,     1,     1,     2,     2,     1,     1,     1,
++      14,     0,     5,     0,     3,     1,     2,     0,     5,     1,
++       2,     1,     2,     1,     3,     1,     3,     3,     0,     5,
++       1,     2,     1,     0,     5,     1,     2,     3,     4,     1,
++       3,     1,     3,     0,     1,     3,     1,     3,     3,     3,
++       3,     3,     2,     1,     3,     1,     3,     3,     2,     1,
++       3,     1,     3,     3,     2,     1,     3,     1,     3,     3,
++       3,     1,     3,     1,     3,     3,     0,     4,     1,     2,
++       1,     1,     1,     3,     1,     3,     1,     3,     3,     0,
++       4,     1,     2,     1,     1,     1,     3,     3,     0,     3,
++       3,     1,     3,     3,     3,     3,     3,     3,     3,     3,
++       3,     3,     0,     4,     1,     2,     1,     1,     1,     1,
++       1,     1,     0,     1,     2,     1,     3,     1,     3,     3,
++       3,     2,     2,     1,     3,     1,     3,     3,     0,     2,
++       0,     2,     0,     2,     2,     2,     2,     2,     2,     2,
++       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
++       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
++       2,     2,     2,     3,     1,     3,     3,     3,     0,     1,
++       3,     1,     3,     3,     3,     0,     1,     3,     1,     3,
++       1,     3,     3,     3,     4,     2,     1,     2,     0,     9,
++       0,     1,     1,     0,     1,     0,     1,     0,     1,     1,
++       2,     1,     1,     4,     0,     1,     0,     2,     0,     2,
++       1,     3,     1,     1,     1,     1,     1,     1,     0,     1,
++       1,     1,     1,     1,     1,     3,     0,     3,     2,     1,
++       1,     3,     1,     1,     1,     1,     4,     1,     1,     1,
++       1,     1,     1,     0,     1,     3,     6,    12,     0,     0,
++       8,     0,     3,     4,     0,     0,     8,     0,     2,     1,
++       3,     2,     0,     1,     1,     1,     0,     3,     0,     1,
++       2,     1,     1,     1,     1,     1,     1,     1,     1,     1,
++       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
++       1,     1,     1,     1,     1,     1,     1,     1,     1,     2,
++       2,     2,     3,     3,     3,     2,     3,     3,     1,     3,
++       3,     3,     3,     0,     4,     1,     2,     1,     1,     1,
++       1,     1,     0,     1,    12,     0,     3,     1,    11,     0,
++       0,     6,     0,     0,     7,     0,     1,    17,     7,    17,
++      16,     1,     1,     1,     1,     1,     1,     1,     1,     2,
++       2,     2,     2,     2,     2,     2,     2,     2,     2,     3,
++       3,     1,     2,     2,     1,     2,     2,     2,     1,     2,
++       0,     1,     0,     1,     0,     2,     0,     3,     1,     3,
++       1,     3,     1,     5,     1,     1,     0,     2,     0,     2,
++       0,     2,     0,     2,     1,     0,     1,     3,     4,     4,
++       4,     3,     3,     6,     6,     3,     2,     0,     3,     0,
++       3,     1,     0,     3,     1,     1,     1,     0,     3,     1,
++       8,     0,     3,     1,     2,     1,     1,     2,     2,     2,
++       4,     3,     3,     0,     1,     0,     3,     2,     1,     4,
++       2,     2,     1,     1,     2,     1,     1,     2,     2,     3,
++       1,     1,     1,     2,     2,     1,     1,     1,     1,     1,
++       1,     1,     1,     1,     1,     1,     1,     1,     1,     3,
++       0,     4,     0,     1,     3
++};
+ 
+ 
+-/* Like YYERROR except do call yyerror.  This remains here temporarily
+-   to ease the transition to the new meaning of YYERROR, for GCC.
+-   Once GCC version 2 has supplanted version 1, this can go.  */
++#define yyerrok         (yyerrstatus = 0)
++#define yyclearin       (yychar = YYEMPTY)
++#define YYEMPTY         (-2)
++#define YYEOF           0
++
++#define YYACCEPT        goto yyacceptlab
++#define YYABORT         goto yyabortlab
++#define YYERROR         goto yyerrorlab
+ 
+-#define YYFAIL		goto yyerrlab
+ 
+ #define YYRECOVERING()  (!!yyerrstatus)
+ 
+-#define YYBACKUP(Token, Value)					\
+-do								\
+-  if (yychar == YYEMPTY && yylen == 1)				\
+-    {								\
+-      yychar = (Token);						\
+-      yylval = (Value);						\
+-      yytoken = YYTRANSLATE (yychar);				\
+-      YYPOPSTACK (1);						\
+-      goto yybackup;						\
+-    }								\
+-  else								\
+-    {								\
++#define YYBACKUP(Token, Value)                                  \
++do                                                              \
++  if (yychar == YYEMPTY)                                        \
++    {                                                           \
++      yychar = (Token);                                         \
++      yylval = (Value);                                         \
++      YYPOPSTACK (yylen);                                       \
++      yystate = *yyssp;                                         \
++      goto yybackup;                                            \
++    }                                                           \
++  else                                                          \
++    {                                                           \
+       yyerror (YY_("syntax error: cannot back up")); \
+-      YYERROR;							\
+-    }								\
+-while (YYID (0))
+-
+-
+-#define YYTERROR	1
+-#define YYERRCODE	256
+-
+-
+-/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+-   If N is 0, then set CURRENT to the empty location which ends
+-   the previous symbol: RHS[0] (always defined).  */
+-
+-#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+-#ifndef YYLLOC_DEFAULT
+-# define YYLLOC_DEFAULT(Current, Rhs, N)				\
+-    do									\
+-      if (YYID (N))                                                    \
+-	{								\
+-	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
+-	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
+-	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
+-	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
+-	}								\
+-      else								\
+-	{								\
+-	  (Current).first_line   = (Current).last_line   =		\
+-	    YYRHSLOC (Rhs, 0).last_line;				\
+-	  (Current).first_column = (Current).last_column =		\
+-	    YYRHSLOC (Rhs, 0).last_column;				\
+-	}								\
+-    while (YYID (0))
+-#endif
+-
+-
+-/* YY_LOCATION_PRINT -- Print the location on the stream.
+-   This macro was not mandated originally: define only if we know
+-   we won't break user code: when these are the locations we know.  */
+-
+-#ifndef YY_LOCATION_PRINT
+-# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
+-#  define YY_LOCATION_PRINT(File, Loc)			\
+-     fprintf (File, "%d.%d-%d.%d",			\
+-	      (Loc).first_line, (Loc).first_column,	\
+-	      (Loc).last_line,  (Loc).last_column)
+-# else
+-#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+-# endif
+-#endif
++      YYERROR;                                                  \
++    }                                                           \
++while (0)
+ 
++/* Error token number */
++#define YYTERROR        1
++#define YYERRCODE       256
+ 
+-/* YYLEX -- calling `yylex' with the right arguments.  */
+ 
+-#ifdef YYLEX_PARAM
+-# define YYLEX yylex (YYLEX_PARAM)
+-#else
+-# define YYLEX yylex ()
+-#endif
+ 
+ /* Enable debugging if requested.  */
+ #if YYDEBUG
+@@ -2317,54 +2070,46 @@
+ #  define YYFPRINTF fprintf
+ # endif
+ 
+-# define YYDPRINTF(Args)			\
+-do {						\
+-  if (yydebug)					\
+-    YYFPRINTF Args;				\
+-} while (YYID (0))
++# define YYDPRINTF(Args)                        \
++do {                                            \
++  if (yydebug)                                  \
++    YYFPRINTF Args;                             \
++} while (0)
+ 
+-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
+-do {									  \
+-  if (yydebug)								  \
+-    {									  \
+-      YYFPRINTF (stderr, "%s ", Title);					  \
+-      yy_symbol_print (stderr,						  \
+-		  Type, Value); \
+-      YYFPRINTF (stderr, "\n");						  \
+-    }									  \
+-} while (YYID (0))
++/* This macro is provided for backward compatibility. */
++#ifndef YY_LOCATION_PRINT
++# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
++#endif
+ 
+ 
+-/*--------------------------------.
+-| Print this symbol on YYOUTPUT.  |
+-`--------------------------------*/
++# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
++do {                                                                      \
++  if (yydebug)                                                            \
++    {                                                                     \
++      YYFPRINTF (stderr, "%s ", Title);                                   \
++      yy_symbol_print (stderr,                                            \
++                  Type, Value); \
++      YYFPRINTF (stderr, "\n");                                           \
++    }                                                                     \
++} while (0)
++
++
++/*----------------------------------------.
++| Print this symbol's value on YYOUTPUT.  |
++`----------------------------------------*/
+ 
+-/*ARGSUSED*/
+-#if (defined __STDC__ || defined __C99__FUNC__ \
+-     || defined __cplusplus || defined _MSC_VER)
+ static void
+ yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+-#else
+-static void
+-yy_symbol_value_print (yyoutput, yytype, yyvaluep)
+-    FILE *yyoutput;
+-    int yytype;
+-    YYSTYPE const * const yyvaluep;
+-#endif
+ {
++  FILE *yyo = yyoutput;
++  YYUSE (yyo);
+   if (!yyvaluep)
+     return;
+ # ifdef YYPRINT
+   if (yytype < YYNTOKENS)
+     YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+-# else
+-  YYUSE (yyoutput);
+ # endif
+-  switch (yytype)
+-    {
+-      default:
+-	break;
+-    }
++  YYUSE (yytype);
+ }
+ 
+ 
+@@ -2372,22 +2117,11 @@
+ | Print this symbol on YYOUTPUT.  |
+ `--------------------------------*/
+ 
+-#if (defined __STDC__ || defined __C99__FUNC__ \
+-     || defined __cplusplus || defined _MSC_VER)
+ static void
+ yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+-#else
+-static void
+-yy_symbol_print (yyoutput, yytype, yyvaluep)
+-    FILE *yyoutput;
+-    int yytype;
+-    YYSTYPE const * const yyvaluep;
+-#endif
+ {
+-  if (yytype < YYNTOKENS)
+-    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+-  else
+-    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
++  YYFPRINTF (yyoutput, "%s %s (",
++             yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
+ 
+   yy_symbol_value_print (yyoutput, yytype, yyvaluep);
+   YYFPRINTF (yyoutput, ")");
+@@ -2398,66 +2132,54 @@
+ | TOP (included).                                                   |
+ `------------------------------------------------------------------*/
+ 
+-#if (defined __STDC__ || defined __C99__FUNC__ \
+-     || defined __cplusplus || defined _MSC_VER)
+-static void
+-yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
+-#else
+ static void
+-yy_stack_print (bottom, top)
+-    yytype_int16 *bottom;
+-    yytype_int16 *top;
+-#endif
++yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
+ {
+   YYFPRINTF (stderr, "Stack now");
+-  for (; bottom <= top; ++bottom)
+-    YYFPRINTF (stderr, " %d", *bottom);
++  for (; yybottom <= yytop; yybottom++)
++    {
++      int yybot = *yybottom;
++      YYFPRINTF (stderr, " %d", yybot);
++    }
+   YYFPRINTF (stderr, "\n");
+ }
+ 
+-# define YY_STACK_PRINT(Bottom, Top)				\
+-do {								\
+-  if (yydebug)							\
+-    yy_stack_print ((Bottom), (Top));				\
+-} while (YYID (0))
++# define YY_STACK_PRINT(Bottom, Top)                            \
++do {                                                            \
++  if (yydebug)                                                  \
++    yy_stack_print ((Bottom), (Top));                           \
++} while (0)
+ 
+ 
+ /*------------------------------------------------.
+ | Report that the YYRULE is going to be reduced.  |
+ `------------------------------------------------*/
+ 
+-#if (defined __STDC__ || defined __C99__FUNC__ \
+-     || defined __cplusplus || defined _MSC_VER)
+ static void
+-yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+-#else
+-static void
+-yy_reduce_print (yyvsp, yyrule)
+-    YYSTYPE *yyvsp;
+-    int yyrule;
+-#endif
++yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
+ {
++  unsigned long int yylno = yyrline[yyrule];
+   int yynrhs = yyr2[yyrule];
+   int yyi;
+-  unsigned long int yylno = yyrline[yyrule];
+   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+-	     yyrule - 1, yylno);
++             yyrule - 1, yylno);
+   /* The symbols being reduced.  */
+   for (yyi = 0; yyi < yynrhs; yyi++)
+     {
+-      fprintf (stderr, "   $%d = ", yyi + 1);
+-      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+-		       &(yyvsp[(yyi + 1) - (yynrhs)])
+-		       		       );
+-      fprintf (stderr, "\n");
++      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
++      yy_symbol_print (stderr,
++                       yystos[yyssp[yyi + 1 - yynrhs]],
++                       &(yyvsp[(yyi + 1) - (yynrhs)])
++                                              );
++      YYFPRINTF (stderr, "\n");
+     }
+ }
+ 
+-# define YY_REDUCE_PRINT(Rule)		\
+-do {					\
+-  if (yydebug)				\
+-    yy_reduce_print (yyvsp, Rule); \
+-} while (YYID (0))
++# define YY_REDUCE_PRINT(Rule)          \
++do {                                    \
++  if (yydebug)                          \
++    yy_reduce_print (yyssp, yyvsp, Rule); \
++} while (0)
+ 
+ /* Nonzero means print parse trace.  It is left uninitialized so that
+    multiple parsers can coexist.  */
+@@ -2471,7 +2193,7 @@
+ 
+ 
+ /* YYINITDEPTH -- initial size of the parser's stacks.  */
+-#ifndef	YYINITDEPTH
++#ifndef YYINITDEPTH
+ # define YYINITDEPTH 200
+ #endif
+ 
+@@ -2486,7 +2208,6 @@
+ # define YYMAXDEPTH 10000
+ #endif
+ 
+-
+ 
+ #if YYERROR_VERBOSE
+ 
+@@ -2495,15 +2216,8 @@
+ #   define yystrlen strlen
+ #  else
+ /* Return the length of YYSTR.  */
+-#if (defined __STDC__ || defined __C99__FUNC__ \
+-     || defined __cplusplus || defined _MSC_VER)
+ static YYSIZE_T
+ yystrlen (const char *yystr)
+-#else
+-static YYSIZE_T
+-yystrlen (yystr)
+-    const char *yystr;
+-#endif
+ {
+   YYSIZE_T yylen;
+   for (yylen = 0; yystr[yylen]; yylen++)
+@@ -2519,16 +2233,8 @@
+ #  else
+ /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+    YYDEST.  */
+-#if (defined __STDC__ || defined __C99__FUNC__ \
+-     || defined __cplusplus || defined _MSC_VER)
+ static char *
+ yystpcpy (char *yydest, const char *yysrc)
+-#else
+-static char *
+-yystpcpy (yydest, yysrc)
+-    char *yydest;
+-    const char *yysrc;
+-#endif
+ {
+   char *yyd = yydest;
+   const char *yys = yysrc;
+@@ -2558,27 +2264,27 @@
+       char const *yyp = yystr;
+ 
+       for (;;)
+-	switch (*++yyp)
+-	  {
+-	  case '\'':
+-	  case ',':
+-	    goto do_not_strip_quotes;
++        switch (*++yyp)
++          {
++          case '\'':
++          case ',':
++            goto do_not_strip_quotes;
+ 
+-	  case '\\':
+-	    if (*++yyp != '\\')
+-	      goto do_not_strip_quotes;
+-	    /* Fall through.  */
+-	  default:
+-	    if (yyres)
+-	      yyres[yyn] = *yyp;
+-	    yyn++;
+-	    break;
++          case '\\':
++            if (*++yyp != '\\')
++              goto do_not_strip_quotes;
++            /* Fall through.  */
++          default:
++            if (yyres)
++              yyres[yyn] = *yyp;
++            yyn++;
++            break;
+ 
+-	  case '"':
+-	    if (yyres)
+-	      yyres[yyn] = '\0';
+-	    return yyn;
+-	  }
++          case '"':
++            if (yyres)
++              yyres[yyn] = '\0';
++            return yyn;
++          }
+     do_not_strip_quotes: ;
+     }
+ 
+@@ -2589,211 +2295,209 @@
+ }
+ # endif
+ 
+-/* Copy into YYRESULT an error message about the unexpected token
+-   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
+-   including the terminating null byte.  If YYRESULT is null, do not
+-   copy anything; just return the number of bytes that would be
+-   copied.  As a special case, return 0 if an ordinary "syntax error"
+-   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
+-   size calculation.  */
+-static YYSIZE_T
+-yysyntax_error (char *yyresult, int yystate, int yychar)
++/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
++   about the unexpected token YYTOKEN for the state stack whose top is
++   YYSSP.
++
++   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
++   not large enough to hold the message.  In that case, also set
++   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
++   required number of bytes is too large to store.  */
++static int
++yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
++                yytype_int16 *yyssp, int yytoken)
+ {
+-  int yyn = yypact[yystate];
++  YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
++  YYSIZE_T yysize = yysize0;
++  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
++  /* Internationalized format string. */
++  const char *yyformat = YY_NULLPTR;
++  /* Arguments of yyformat. */
++  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
++  /* Number of reported tokens (one for the "unexpected", one per
++     "expected"). */
++  int yycount = 0;
+ 
+-  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
+-    return 0;
+-  else
++  /* There are many possibilities here to consider:
++     - If this state is a consistent state with a default action, then
++       the only way this function was invoked is if the default action
++       is an error action.  In that case, don't check for expected
++       tokens because there are none.
++     - The only way there can be no lookahead present (in yychar) is if
++       this state is a consistent state with a default action.  Thus,
++       detecting the absence of a lookahead is sufficient to determine
++       that there is no unexpected or expected token to report.  In that
++       case, just report a simple "syntax error".
++     - Don't assume there isn't a lookahead just because this state is a
++       consistent state with a default action.  There might have been a
++       previous inconsistent state, consistent state with a non-default
++       action, or user semantic action that manipulated yychar.
++     - Of course, the expected token list depends on states to have
++       correct lookahead information, and it depends on the parser not
++       to perform extra reductions after fetching a lookahead from the
++       scanner and before detecting a syntax error.  Thus, state merging
++       (from LALR or IELR) and default reductions corrupt the expected
++       token list.  However, the list is correct for canonical LR with
++       one exception: it will still contain any token that will not be
++       accepted due to an error action in a later state.
++  */
++  if (yytoken != YYEMPTY)
+     {
+-      int yytype = YYTRANSLATE (yychar);
+-      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+-      YYSIZE_T yysize = yysize0;
+-      YYSIZE_T yysize1;
+-      int yysize_overflow = 0;
+-      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+-      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+-      int yyx;
+-
+-# if 0
+-      /* This is so xgettext sees the translatable formats that are
+-	 constructed on the fly.  */
+-      YY_("syntax error, unexpected %s");
+-      YY_("syntax error, unexpected %s, expecting %s");
+-      YY_("syntax error, unexpected %s, expecting %s or %s");
+-      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
+-      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+-# endif
+-      char *yyfmt;
+-      char const *yyf;
+-      static char const yyunexpected[] = "syntax error, unexpected %s";
+-      static char const yyexpecting[] = ", expecting %s";
+-      static char const yyor[] = " or %s";
+-      char yyformat[sizeof yyunexpected
+-		    + sizeof yyexpecting - 1
+-		    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+-		       * (sizeof yyor - 1))];
+-      char const *yyprefix = yyexpecting;
+-
+-      /* Start YYX at -YYN if negative to avoid negative indexes in
+-	 YYCHECK.  */
+-      int yyxbegin = yyn < 0 ? -yyn : 0;
+-
+-      /* Stay within bounds of both yycheck and yytname.  */
+-      int yychecklim = YYLAST - yyn + 1;
+-      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+-      int yycount = 1;
+-
+-      yyarg[0] = yytname[yytype];
+-      yyfmt = yystpcpy (yyformat, yyunexpected);
++      int yyn = yypact[*yyssp];
++      yyarg[yycount++] = yytname[yytoken];
++      if (!yypact_value_is_default (yyn))
++        {
++          /* Start YYX at -YYN if negative to avoid negative indexes in
++             YYCHECK.  In other words, skip the first -YYN actions for
++             this state because they are default actions.  */
++          int yyxbegin = yyn < 0 ? -yyn : 0;
++          /* Stay within bounds of both yycheck and yytname.  */
++          int yychecklim = YYLAST - yyn + 1;
++          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
++          int yyx;
+ 
+-      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+-	if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+-	  {
+-	    if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+-	      {
+-		yycount = 1;
+-		yysize = yysize0;
+-		yyformat[sizeof yyunexpected - 1] = '\0';
+-		break;
+-	      }
+-	    yyarg[yycount++] = yytname[yyx];
+-	    yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+-	    yysize_overflow |= (yysize1 < yysize);
+-	    yysize = yysize1;
+-	    yyfmt = yystpcpy (yyfmt, yyprefix);
+-	    yyprefix = yyor;
+-	  }
++          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
++            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
++                && !yytable_value_is_error (yytable[yyx + yyn]))
++              {
++                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
++                  {
++                    yycount = 1;
++                    yysize = yysize0;
++                    break;
++                  }
++                yyarg[yycount++] = yytname[yyx];
++                {
++                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
++                  if (! (yysize <= yysize1
++                         && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
++                    return 2;
++                  yysize = yysize1;
++                }
++              }
++        }
++    }
+ 
+-      yyf = YY_(yyformat);
+-      yysize1 = yysize + yystrlen (yyf);
+-      yysize_overflow |= (yysize1 < yysize);
+-      yysize = yysize1;
++  switch (yycount)
++    {
++# define YYCASE_(N, S)                      \
++      case N:                               \
++        yyformat = S;                       \
++      break
++      YYCASE_(0, YY_("syntax error"));
++      YYCASE_(1, YY_("syntax error, unexpected %s"));
++      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
++      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
++      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
++      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
++# undef YYCASE_
++    }
+ 
+-      if (yysize_overflow)
+-	return YYSIZE_MAXIMUM;
++  {
++    YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
++    if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
++      return 2;
++    yysize = yysize1;
++  }
+ 
+-      if (yyresult)
+-	{
+-	  /* Avoid sprintf, as that infringes on the user's name space.
+-	     Don't have undefined behavior even if the translation
+-	     produced a string with the wrong number of "%s"s.  */
+-	  char *yyp = yyresult;
+-	  int yyi = 0;
+-	  while ((*yyp = *yyf) != '\0')
+-	    {
+-	      if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+-		{
+-		  yyp += yytnamerr (yyp, yyarg[yyi++]);
+-		  yyf += 2;
+-		}
+-	      else
+-		{
+-		  yyp++;
+-		  yyf++;
+-		}
+-	    }
+-	}
+-      return yysize;
++  if (*yymsg_alloc < yysize)
++    {
++      *yymsg_alloc = 2 * yysize;
++      if (! (yysize <= *yymsg_alloc
++             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
++        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
++      return 1;
+     }
++
++  /* Avoid sprintf, as that infringes on the user's name space.
++     Don't have undefined behavior even if the translation
++     produced a string with the wrong number of "%s"s.  */
++  {
++    char *yyp = *yymsg;
++    int yyi = 0;
++    while ((*yyp = *yyformat) != '\0')
++      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
++        {
++          yyp += yytnamerr (yyp, yyarg[yyi++]);
++          yyformat += 2;
++        }
++      else
++        {
++          yyp++;
++          yyformat++;
++        }
++  }
++  return 0;
+ }
+ #endif /* YYERROR_VERBOSE */
+-
+ 
+ /*-----------------------------------------------.
+ | Release the memory associated to this symbol.  |
+ `-----------------------------------------------*/
+ 
+-/*ARGSUSED*/
+-#if (defined __STDC__ || defined __C99__FUNC__ \
+-     || defined __cplusplus || defined _MSC_VER)
+ static void
+ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+-#else
+-static void
+-yydestruct (yymsg, yytype, yyvaluep)
+-    const char *yymsg;
+-    int yytype;
+-    YYSTYPE *yyvaluep;
+-#endif
+ {
+   YYUSE (yyvaluep);
+-
+   if (!yymsg)
+     yymsg = "Deleting";
+   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+ 
+-  switch (yytype)
+-    {
+-
+-      default:
+-	break;
+-    }
++  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
++  YYUSE (yytype);
++  YY_IGNORE_MAYBE_UNINITIALIZED_END
+ }
+-
+-
+-/* Prevent warnings from -Wmissing-prototypes.  */
+ 
+-#ifdef YYPARSE_PARAM
+-#if defined __STDC__ || defined __cplusplus
+-int yyparse (void *YYPARSE_PARAM);
+-#else
+-int yyparse ();
+-#endif
+-#else /* ! YYPARSE_PARAM */
+-#if defined __STDC__ || defined __cplusplus
+-int yyparse (void);
+-#else
+-int yyparse ();
+-#endif
+-#endif /* ! YYPARSE_PARAM */
+ 
+ 
+ 
+-/* The look-ahead symbol.  */
++/* The lookahead symbol.  */
+ int yychar;
+ 
+-/* The semantic value of the look-ahead symbol.  */
++/* The semantic value of the lookahead symbol.  */
+ YYSTYPE yylval;
+-
+ /* Number of syntax errors so far.  */
+ int yynerrs;
+ 
+ 
+-
+ /*----------.
+ | yyparse.  |
+ `----------*/
+ 
+-#ifdef YYPARSE_PARAM
+-#if (defined __STDC__ || defined __C99__FUNC__ \
+-     || defined __cplusplus || defined _MSC_VER)
+-int
+-yyparse (void *YYPARSE_PARAM)
+-#else
+-int
+-yyparse (YYPARSE_PARAM)
+-    void *YYPARSE_PARAM;
+-#endif
+-#else /* ! YYPARSE_PARAM */
+-#if (defined __STDC__ || defined __C99__FUNC__ \
+-     || defined __cplusplus || defined _MSC_VER)
+ int
+ yyparse (void)
+-#else
+-int
+-yyparse ()
+-
+-#endif
+-#endif
+ {
+-  
+-  int yystate;
++    int yystate;
++    /* Number of tokens to shift before error messages enabled.  */
++    int yyerrstatus;
++
++    /* The stacks and their tools:
++       'yyss': related to states.
++       'yyvs': related to semantic values.
++
++       Refer to the stacks through separate pointers, to allow yyoverflow
++       to reallocate them elsewhere.  */
++
++    /* The state stack.  */
++    yytype_int16 yyssa[YYINITDEPTH];
++    yytype_int16 *yyss;
++    yytype_int16 *yyssp;
++
++    /* The semantic value stack.  */
++    YYSTYPE yyvsa[YYINITDEPTH];
++    YYSTYPE *yyvs;
++    YYSTYPE *yyvsp;
++
++    YYSIZE_T yystacksize;
++
+   int yyn;
+   int yyresult;
+-  /* Number of tokens to shift before error messages enabled.  */
+-  int yyerrstatus;
+-  /* Look-ahead token as an internal (translated) token number.  */
++  /* Lookahead token as an internal (translated) token number.  */
+   int yytoken = 0;
++  /* The variables used to return semantic value and location from the
++     action routines.  */
++  YYSTYPE yyval;
++
+ #if YYERROR_VERBOSE
+   /* Buffer for error messages, and its allocated size.  */
+   char yymsgbuf[128];
+@@ -2801,54 +2505,22 @@
+   YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+ #endif
+ 
+-  /* Three stacks and their tools:
+-     `yyss': related to states,
+-     `yyvs': related to semantic values,
+-     `yyls': related to locations.
+-
+-     Refer to the stacks thru separate pointers, to allow yyoverflow
+-     to reallocate them elsewhere.  */
+-
+-  /* The state stack.  */
+-  yytype_int16 yyssa[YYINITDEPTH];
+-  yytype_int16 *yyss = yyssa;
+-  yytype_int16 *yyssp;
+-
+-  /* The semantic value stack.  */
+-  YYSTYPE yyvsa[YYINITDEPTH];
+-  YYSTYPE *yyvs = yyvsa;
+-  YYSTYPE *yyvsp;
+-
+-
+-
+ #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
+ 
+-  YYSIZE_T yystacksize = YYINITDEPTH;
+-
+-  /* The variables used to return semantic value and location from the
+-     action routines.  */
+-  YYSTYPE yyval;
+-
+-
+   /* The number of symbols on the RHS of the reduced rule.
+      Keep to zero when no symbol should be popped.  */
+   int yylen = 0;
+ 
++  yyssp = yyss = yyssa;
++  yyvsp = yyvs = yyvsa;
++  yystacksize = YYINITDEPTH;
++
+   YYDPRINTF ((stderr, "Starting parse\n"));
+ 
+   yystate = 0;
+   yyerrstatus = 0;
+   yynerrs = 0;
+-  yychar = YYEMPTY;		/* Cause a token to be read.  */
+-
+-  /* Initialize stack pointers.
+-     Waste one element of value and location stack
+-     so that they stay on the same level as the state stack.
+-     The wasted elements are never initialized.  */
+-
+-  yyssp = yyss;
+-  yyvsp = yyvs;
+-
++  yychar = YYEMPTY; /* Cause a token to be read.  */
+   goto yysetstate;
+ 
+ /*------------------------------------------------------------.
+@@ -2869,25 +2541,23 @@
+ 
+ #ifdef yyoverflow
+       {
+-	/* Give user a chance to reallocate the stack.  Use copies of
+-	   these so that the &'s don't force the real ones into
+-	   memory.  */
+-	YYSTYPE *yyvs1 = yyvs;
+-	yytype_int16 *yyss1 = yyss;
+-
+-
+-	/* Each stack pointer address is followed by the size of the
+-	   data in use in that stack, in bytes.  This used to be a
+-	   conditional around just the two extra args, but that might
+-	   be undefined if yyoverflow is a macro.  */
+-	yyoverflow (YY_("memory exhausted"),
+-		    &yyss1, yysize * sizeof (*yyssp),
+-		    &yyvs1, yysize * sizeof (*yyvsp),
++        /* Give user a chance to reallocate the stack.  Use copies of
++           these so that the &'s don't force the real ones into
++           memory.  */
++        YYSTYPE *yyvs1 = yyvs;
++        yytype_int16 *yyss1 = yyss;
+ 
+-		    &yystacksize);
++        /* Each stack pointer address is followed by the size of the
++           data in use in that stack, in bytes.  This used to be a
++           conditional around just the two extra args, but that might
++           be undefined if yyoverflow is a macro.  */
++        yyoverflow (YY_("memory exhausted"),
++                    &yyss1, yysize * sizeof (*yyssp),
++                    &yyvs1, yysize * sizeof (*yyvsp),
++                    &yystacksize);
+ 
+-	yyss = yyss1;
+-	yyvs = yyvs1;
++        yyss = yyss1;
++        yyvs = yyvs1;
+       }
+ #else /* no yyoverflow */
+ # ifndef YYSTACK_RELOCATE
+@@ -2895,23 +2565,22 @@
+ # else
+       /* Extend the stack our own way.  */
+       if (YYMAXDEPTH <= yystacksize)
+-	goto yyexhaustedlab;
++        goto yyexhaustedlab;
+       yystacksize *= 2;
+       if (YYMAXDEPTH < yystacksize)
+-	yystacksize = YYMAXDEPTH;
++        yystacksize = YYMAXDEPTH;
+ 
+       {
+-	yytype_int16 *yyss1 = yyss;
+-	union yyalloc *yyptr =
+-	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+-	if (! yyptr)
+-	  goto yyexhaustedlab;
+-	YYSTACK_RELOCATE (yyss);
+-	YYSTACK_RELOCATE (yyvs);
+-
++        yytype_int16 *yyss1 = yyss;
++        union yyalloc *yyptr =
++          (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
++        if (! yyptr)
++          goto yyexhaustedlab;
++        YYSTACK_RELOCATE (yyss_alloc, yyss);
++        YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+ #  undef YYSTACK_RELOCATE
+-	if (yyss1 != yyssa)
+-	  YYSTACK_FREE (yyss1);
++        if (yyss1 != yyssa)
++          YYSTACK_FREE (yyss1);
+       }
+ # endif
+ #endif /* no yyoverflow */
+@@ -2919,16 +2588,18 @@
+       yyssp = yyss + yysize - 1;
+       yyvsp = yyvs + yysize - 1;
+ 
+-
+       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+-		  (unsigned long int) yystacksize));
++                  (unsigned long int) yystacksize));
+ 
+       if (yyss + yystacksize - 1 <= yyssp)
+-	YYABORT;
++        YYABORT;
+     }
+ 
+   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+ 
++  if (yystate == YYFINAL)
++    YYACCEPT;
++
+   goto yybackup;
+ 
+ /*-----------.
+@@ -2937,20 +2608,20 @@
+ yybackup:
+ 
+   /* Do appropriate processing given the current state.  Read a
+-     look-ahead token if we need one and don't already have one.  */
++     lookahead token if we need one and don't already have one.  */
+ 
+-  /* First try to decide what to do without reference to look-ahead token.  */
++  /* First try to decide what to do without reference to lookahead token.  */
+   yyn = yypact[yystate];
+-  if (yyn == YYPACT_NINF)
++  if (yypact_value_is_default (yyn))
+     goto yydefault;
+ 
+-  /* Not known => get a look-ahead token if don't already have one.  */
++  /* Not known => get a lookahead token if don't already have one.  */
+ 
+-  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
++  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
+   if (yychar == YYEMPTY)
+     {
+       YYDPRINTF ((stderr, "Reading a token: "));
+-      yychar = YYLEX;
++      yychar = yylex ();
+     }
+ 
+   if (yychar <= YYEOF)
+@@ -2972,29 +2643,27 @@
+   yyn = yytable[yyn];
+   if (yyn <= 0)
+     {
+-      if (yyn == 0 || yyn == YYTABLE_NINF)
+-	goto yyerrlab;
++      if (yytable_value_is_error (yyn))
++        goto yyerrlab;
+       yyn = -yyn;
+       goto yyreduce;
+     }
+ 
+-  if (yyn == YYFINAL)
+-    YYACCEPT;
+-
+   /* Count tokens shifted since error; after three, turn off error
+      status.  */
+   if (yyerrstatus)
+     yyerrstatus--;
+ 
+-  /* Shift the look-ahead token.  */
++  /* Shift the lookahead token.  */
+   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+ 
+-  /* Discard the shifted token unless it is eof.  */
+-  if (yychar != YYEOF)
+-    yychar = YYEMPTY;
++  /* Discard the shifted token.  */
++  yychar = YYEMPTY;
+ 
+   yystate = yyn;
++  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+   *++yyvsp = yylval;
++  YY_IGNORE_MAYBE_UNINITIALIZED_END
+ 
+   goto yynewstate;
+ 
+@@ -3017,7 +2686,7 @@
+   yylen = yyr2[yyn];
+ 
+   /* If YYLEN is nonzero, implement the default value of the action:
+-     `$$ = $1'.
++     '$$ = $1'.
+ 
+      Otherwise, the following line sets YYVAL to garbage.
+      This behavior is undocumented and Bison
+@@ -3031,7 +2700,7 @@
+   switch (yyn)
+     {
+         case 4:
+-#line 580 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 580 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             /*
+              * We don't do these in parserEOF() because the parser is reading
+@@ -3049,10 +2718,11 @@
+                 previousFile = NULL;
+             }
+     }
++#line 2722 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 55:
+-#line 650 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 650 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+@@ -3061,151 +2731,167 @@
+                 if (scope == NULL)
+                     yyerror("%TypeHeaderCode can only be used in a namespace, class or mapped type");
+ 
+-                appendCodeBlock(&scope->iff->hdrcode, (yyvsp[(1) - (1)].codeb));
++                appendCodeBlock(&scope->iff->hdrcode, (yyvsp[0].codeb));
+             }
+         }
++#line 2738 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 56:
+-#line 663 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 663 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+-                currentModule->defdocstringfmt = convertFormat((yyvsp[(2) - (2)].defdocstringfmt).name);
++                currentModule->defdocstringfmt = convertFormat((yyvsp[0].defdocstringfmt).name);
+         }
++#line 2747 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 57:
+-#line 669 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 669 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             resetLexerState();
+ 
+-            (yyval.defdocstringfmt).name = (yyvsp[(1) - (1)].text);
++            (yyval.defdocstringfmt).name = (yyvsp[0].text);
+         }
++#line 2757 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 58:
+-#line 674 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 674 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.defdocstringfmt) = (yyvsp[(2) - (3)].defdocstringfmt);
++            (yyval.defdocstringfmt) = (yyvsp[-1].defdocstringfmt);
+         }
++#line 2765 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 60:
+-#line 680 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 680 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.defdocstringfmt) = (yyvsp[(1) - (3)].defdocstringfmt);
++            (yyval.defdocstringfmt) = (yyvsp[-2].defdocstringfmt);
+ 
+-            switch ((yyvsp[(3) - (3)].defdocstringfmt).token)
++            switch ((yyvsp[0].defdocstringfmt).token)
+             {
+-            case TK_NAME: (yyval.defdocstringfmt).name = (yyvsp[(3) - (3)].defdocstringfmt).name; break;
++            case TK_NAME: (yyval.defdocstringfmt).name = (yyvsp[0].defdocstringfmt).name; break;
+             }
+         }
++#line 2778 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 61:
+-#line 690 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 690 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.defdocstringfmt).token = TK_NAME;
+ 
+-            (yyval.defdocstringfmt).name = (yyvsp[(3) - (3)].text);
++            (yyval.defdocstringfmt).name = (yyvsp[0].text);
+         }
++#line 2788 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 62:
+-#line 697 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 697 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+-                currentModule->defdocstringsig = convertSignature((yyvsp[(2) - (2)].defdocstringsig).name);
++                currentModule->defdocstringsig = convertSignature((yyvsp[0].defdocstringsig).name);
+         }
++#line 2797 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 63:
+-#line 703 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 703 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             resetLexerState();
+ 
+-            (yyval.defdocstringsig).name = (yyvsp[(1) - (1)].text);
++            (yyval.defdocstringsig).name = (yyvsp[0].text);
+         }
++#line 2807 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 64:
+-#line 708 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 708 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.defdocstringsig) = (yyvsp[(2) - (3)].defdocstringsig);
++            (yyval.defdocstringsig) = (yyvsp[-1].defdocstringsig);
+         }
++#line 2815 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 66:
+-#line 714 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 714 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.defdocstringsig) = (yyvsp[(1) - (3)].defdocstringsig);
++            (yyval.defdocstringsig) = (yyvsp[-2].defdocstringsig);
+ 
+-            switch ((yyvsp[(3) - (3)].defdocstringsig).token)
++            switch ((yyvsp[0].defdocstringsig).token)
+             {
+-            case TK_NAME: (yyval.defdocstringsig).name = (yyvsp[(3) - (3)].defdocstringsig).name; break;
++            case TK_NAME: (yyval.defdocstringsig).name = (yyvsp[0].defdocstringsig).name; break;
+             }
+         }
++#line 2828 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 67:
+-#line 724 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 724 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.defdocstringsig).token = TK_NAME;
+ 
+-            (yyval.defdocstringsig).name = (yyvsp[(3) - (3)].text);
++            (yyval.defdocstringsig).name = (yyvsp[0].text);
+         }
++#line 2838 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 68:
+-#line 731 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 731 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+-                if ((currentModule->encoding = convertEncoding((yyvsp[(2) - (2)].defencoding).name)) == no_type)
++                if ((currentModule->encoding = convertEncoding((yyvsp[0].defencoding).name)) == no_type)
+                     yyerror("The %DefaultEncoding name must be one of \"ASCII\", \"Latin-1\", \"UTF-8\" or \"None\"");
+             }
+         }
++#line 2850 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 69:
+-#line 740 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 740 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             resetLexerState();
+ 
+-            (yyval.defencoding).name = (yyvsp[(1) - (1)].text);
++            (yyval.defencoding).name = (yyvsp[0].text);
+         }
++#line 2860 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 70:
+-#line 745 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 745 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.defencoding) = (yyvsp[(2) - (3)].defencoding);
++            (yyval.defencoding) = (yyvsp[-1].defencoding);
+         }
++#line 2868 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 72:
+-#line 751 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 751 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.defencoding) = (yyvsp[(1) - (3)].defencoding);
++            (yyval.defencoding) = (yyvsp[-2].defencoding);
+ 
+-            switch ((yyvsp[(3) - (3)].defencoding).token)
++            switch ((yyvsp[0].defencoding).token)
+             {
+-            case TK_NAME: (yyval.defencoding).name = (yyvsp[(3) - (3)].defencoding).name; break;
++            case TK_NAME: (yyval.defencoding).name = (yyvsp[0].defencoding).name; break;
+             }
+         }
++#line 2881 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 73:
+-#line 761 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 761 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.defencoding).token = TK_NAME;
+ 
+-            (yyval.defencoding).name = (yyvsp[(3) - (3)].text);
++            (yyval.defencoding).name = (yyvsp[0].text);
+         }
++#line 2891 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 74:
+-#line 768 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 768 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             /*
+              * Note that %Plugin is internal in SIP v4.  The current thinking
+@@ -3213,51 +2899,56 @@
+              */
+ 
+             if (notSkipping())
+-                appendString(&currentSpec->plugins, (yyvsp[(2) - (2)].plugin).name);
++                appendString(&currentSpec->plugins, (yyvsp[0].plugin).name);
+         }
++#line 2905 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 75:
+-#line 779 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 779 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             resetLexerState();
+ 
+-            (yyval.plugin).name = (yyvsp[(1) - (1)].text);
++            (yyval.plugin).name = (yyvsp[0].text);
+         }
++#line 2915 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 76:
+-#line 784 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 784 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.plugin) = (yyvsp[(2) - (3)].plugin);
++            (yyval.plugin) = (yyvsp[-1].plugin);
+         }
++#line 2923 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 78:
+-#line 790 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 790 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.plugin) = (yyvsp[(1) - (3)].plugin);
++            (yyval.plugin) = (yyvsp[-2].plugin);
+ 
+-            switch ((yyvsp[(3) - (3)].plugin).token)
++            switch ((yyvsp[0].plugin).token)
+             {
+-            case TK_NAME: (yyval.plugin).name = (yyvsp[(3) - (3)].plugin).name; break;
++            case TK_NAME: (yyval.plugin).name = (yyvsp[0].plugin).name; break;
+             }
+         }
++#line 2936 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 79:
+-#line 800 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 800 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.plugin).token = TK_NAME;
+ 
+-            (yyval.plugin).name = (yyvsp[(3) - (3)].text);
++            (yyval.plugin).name = (yyvsp[0].text);
+         }
++#line 2946 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 80:
+-#line 807 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 807 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            if ((yyvsp[(2) - (3)].veh).name == NULL)
++            if ((yyvsp[-1].veh).name == NULL)
+                 yyerror("%VirtualErrorHandler must have a 'name' argument");
+ 
+             if (notSkipping())
+@@ -3266,7 +2957,7 @@
+ 
+                 /* Check there isn't already a handler with the same name. */
+                 for (tailp = &currentSpec->errorhandlers; (veh = *tailp) != NULL; tailp = &veh->next)
+-                    if (strcmp(veh->name, (yyvsp[(2) - (3)].veh).name) == 0)
++                    if (strcmp(veh->name, (yyvsp[-1].veh).name) == 0)
+                         break;
+ 
+                 if (veh != NULL)
+@@ -3274,8 +2965,8 @@
+ 
+                 veh = sipMalloc(sizeof (virtErrorHandler));
+ 
+-                veh->name = (yyvsp[(2) - (3)].veh).name;
+-                appendCodeBlock(&veh->code, (yyvsp[(3) - (3)].codeb));
++                veh->name = (yyvsp[-1].veh).name;
++                appendCodeBlock(&veh->code, (yyvsp[0].codeb));
+                 veh->mod = currentModule;
+                 veh->index = -1;
+                 veh->next = NULL;
+@@ -3283,62 +2974,67 @@
+                 *tailp = veh;
+             }
+         }
++#line 2978 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 81:
+-#line 836 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 836 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             resetLexerState();
+ 
+-            (yyval.veh).name = (yyvsp[(1) - (1)].text);
++            (yyval.veh).name = (yyvsp[0].text);
+         }
++#line 2988 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 82:
+-#line 841 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 841 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.veh) = (yyvsp[(2) - (3)].veh);
++            (yyval.veh) = (yyvsp[-1].veh);
+         }
++#line 2996 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 84:
+-#line 847 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 847 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.veh) = (yyvsp[(1) - (3)].veh);
++            (yyval.veh) = (yyvsp[-2].veh);
+ 
+-            switch ((yyvsp[(3) - (3)].veh).token)
++            switch ((yyvsp[0].veh).token)
+             {
+-            case TK_NAME: (yyval.veh).name = (yyvsp[(3) - (3)].veh).name; break;
++            case TK_NAME: (yyval.veh).name = (yyvsp[0].veh).name; break;
+             }
+         }
++#line 3009 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 85:
+-#line 857 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 857 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.veh).token = TK_NAME;
+ 
+-            (yyval.veh).name = (yyvsp[(3) - (3)].text);
++            (yyval.veh).name = (yyvsp[0].text);
+         }
++#line 3019 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 86:
+-#line 864 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 864 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+                 apiVersionRangeDef *avd;
+ 
+-                if (findAPI(currentSpec, (yyvsp[(2) - (2)].api).name) != NULL)
++                if (findAPI(currentSpec, (yyvsp[0].api).name) != NULL)
+                     yyerror("The API name in the %API directive has already been defined");
+ 
+-                if ((yyvsp[(2) - (2)].api).version < 1)
++                if ((yyvsp[0].api).version < 1)
+                     yyerror("The version number in the %API directive must be greater than or equal to 1");
+ 
+                 avd = sipMalloc(sizeof (apiVersionRangeDef));
+ 
+-                avd->api_name = cacheName(currentSpec, (yyvsp[(2) - (2)].api).name);
+-                avd->from = (yyvsp[(2) - (2)].api).version;
++                avd->api_name = cacheName(currentSpec, (yyvsp[0].api).name);
++                avd->from = (yyvsp[0].api).version;
+                 avd->to = -1;
+ 
+                 avd->next = currentModule->api_versions;
+@@ -3348,62 +3044,68 @@
+                     setIsUsedName(avd->api_name);
+             }
+         }
++#line 3048 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 87:
+-#line 890 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 890 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             resetLexerState();
+ 
+             deprecated("%API name and version number should be specified using the 'name' and 'version' arguments");
+ 
+-            (yyval.api).name = (yyvsp[(1) - (2)].text);
+-            (yyval.api).version = (yyvsp[(2) - (2)].number);
++            (yyval.api).name = (yyvsp[-1].text);
++            (yyval.api).version = (yyvsp[0].number);
+         }
++#line 3061 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 88:
+-#line 898 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 898 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.api) = (yyvsp[(2) - (3)].api);
++            (yyval.api) = (yyvsp[-1].api);
+         }
++#line 3069 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 90:
+-#line 904 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 904 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.api) = (yyvsp[(1) - (3)].api);
++            (yyval.api) = (yyvsp[-2].api);
+ 
+-            switch ((yyvsp[(3) - (3)].api).token)
++            switch ((yyvsp[0].api).token)
+             {
+-            case TK_NAME: (yyval.api).name = (yyvsp[(3) - (3)].api).name; break;
+-            case TK_VERSION: (yyval.api).version = (yyvsp[(3) - (3)].api).version; break;
++            case TK_NAME: (yyval.api).name = (yyvsp[0].api).name; break;
++            case TK_VERSION: (yyval.api).version = (yyvsp[0].api).version; break;
+             }
+         }
++#line 3083 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 91:
+-#line 915 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 915 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.api).token = TK_NAME;
+ 
+-            (yyval.api).name = (yyvsp[(3) - (3)].text);
++            (yyval.api).name = (yyvsp[0].text);
+             (yyval.api).version = 0;
+         }
++#line 3094 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 92:
+-#line 921 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 921 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.api).token = TK_VERSION;
+ 
+             (yyval.api).name = NULL;
+-            (yyval.api).version = (yyvsp[(3) - (3)].number);
++            (yyval.api).version = (yyvsp[0].number);
+         }
++#line 3105 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 93:
+-#line 929 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 929 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+@@ -3416,20 +3118,20 @@
+                 exceptionDef *xd;
+                 const char *pyname;
+ 
+-                checkAnnos(&(yyvsp[(4) - (5)].optflags), annos);
++                checkAnnos(&(yyvsp[-1].optflags), annos);
+ 
+                 if (currentSpec->genc)
+                     yyerror("%Exception not allowed in a C module");
+ 
+-                if ((yyvsp[(5) - (5)].exception).raise_code == NULL)
++                if ((yyvsp[0].exception).raise_code == NULL)
+                     yyerror("%Exception must have a %RaiseCode sub-directive");
+ 
+-                pyname = getPythonName(currentModule, &(yyvsp[(4) - (5)].optflags), scopedNameTail((yyvsp[(2) - (5)].scpvalp)));
++                pyname = getPythonName(currentModule, &(yyvsp[-1].optflags), scopedNameTail((yyvsp[-3].scpvalp)));
+ 
+                 checkAttributes(currentSpec, currentModule, NULL, NULL,
+                         pyname, FALSE);
+ 
+-                xd = findException(currentSpec, (yyvsp[(2) - (5)].scpvalp), TRUE);
++                xd = findException(currentSpec, (yyvsp[-3].scpvalp), TRUE);
+ 
+                 if (xd->cd != NULL)
+                     yyerror("%Exception name has already been seen as a class name - it must be defined before being used");
+@@ -3439,28 +3141,30 @@
+ 
+                 /* Complete the definition. */
+                 xd->iff->module = currentModule;
+-                appendCodeBlock(&xd->iff->hdrcode, (yyvsp[(5) - (5)].exception).type_header_code);
++                appendCodeBlock(&xd->iff->hdrcode, (yyvsp[0].exception).type_header_code);
+                 xd->pyname = pyname;
+-                xd->bibase = (yyvsp[(3) - (5)].exceptionbase).bibase;
+-                xd->base = (yyvsp[(3) - (5)].exceptionbase).base;
+-                appendCodeBlock(&xd->raisecode, (yyvsp[(5) - (5)].exception).raise_code);
++                xd->bibase = (yyvsp[-2].exceptionbase).bibase;
++                xd->base = (yyvsp[-2].exceptionbase).base;
++                appendCodeBlock(&xd->raisecode, (yyvsp[0].exception).raise_code);
+ 
+-                if (getOptFlag(&(yyvsp[(4) - (5)].optflags), "Default", bool_flag) != NULL)
++                if (getOptFlag(&(yyvsp[-1].optflags), "Default", bool_flag) != NULL)
+                     currentModule->defexception = xd;
+             }
+         }
++#line 3155 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 94:
+-#line 976 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 976 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.exceptionbase).bibase = NULL;
+             (yyval.exceptionbase).base = NULL;
+         }
++#line 3164 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 95:
+-#line 980 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 980 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             exceptionDef *xd;
+ 
+@@ -3469,13 +3173,13 @@
+ 
+             /* See if it is a defined exception. */
+             for (xd = currentSpec->exceptions; xd != NULL; xd = xd->next)
+-                if (compareScopedNames(xd->iff->fqcname, (yyvsp[(2) - (3)].scpvalp)) == 0)
++                if (compareScopedNames(xd->iff->fqcname, (yyvsp[-1].scpvalp)) == 0)
+                 {
+                     (yyval.exceptionbase).base = xd;
+                     break;
+                 }
+ 
+-            if (xd == NULL && (yyvsp[(2) - (3)].scpvalp)->next == NULL && strncmp((yyvsp[(2) - (3)].scpvalp)->name, "SIP_", 4) == 0)
++            if (xd == NULL && (yyvsp[-1].scpvalp)->next == NULL && strncmp((yyvsp[-1].scpvalp)->name, "SIP_", 4) == 0)
+             {
+                 /* See if it is a builtin exception. */
+ 
+@@ -3556,7 +3260,7 @@
+                 char **cp;
+ 
+                 for (cp = builtins; *cp != NULL; ++cp)
+-                    if (strcmp((yyvsp[(2) - (3)].scpvalp)->name + 4, *cp) == 0)
++                    if (strcmp((yyvsp[-1].scpvalp)->name + 4, *cp) == 0)
+                     {
+                         (yyval.exceptionbase).bibase = *cp;
+                         break;
+@@ -3566,49 +3270,54 @@
+             if ((yyval.exceptionbase).bibase == NULL && (yyval.exceptionbase).base == NULL)
+                 yyerror("Unknown exception base type");
+         }
++#line 3274 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 96:
+-#line 1087 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1087 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.exception) = (yyvsp[(2) - (4)].exception);
++            (yyval.exception) = (yyvsp[-2].exception);
+         }
++#line 3282 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 98:
+-#line 1093 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1093 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.exception) = (yyvsp[(1) - (2)].exception);
++            (yyval.exception) = (yyvsp[-1].exception);
+ 
+-            switch ((yyvsp[(2) - (2)].exception).token)
++            switch ((yyvsp[0].exception).token)
+             {
+-            case TK_RAISECODE: (yyval.exception).raise_code = (yyvsp[(2) - (2)].exception).raise_code; break;
+-            case TK_TYPEHEADERCODE: (yyval.exception).type_header_code = (yyvsp[(2) - (2)].exception).type_header_code; break;
++            case TK_RAISECODE: (yyval.exception).raise_code = (yyvsp[0].exception).raise_code; break;
++            case TK_TYPEHEADERCODE: (yyval.exception).type_header_code = (yyvsp[0].exception).type_header_code; break;
+             }
+         }
++#line 3296 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 99:
+-#line 1104 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1104 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.exception).token = TK_IF;
+         }
++#line 3304 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 100:
+-#line 1107 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1107 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.exception).token = TK_END;
+         }
++#line 3312 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 101:
+-#line 1110 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1110 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+                 (yyval.exception).token = TK_RAISECODE;
+-                (yyval.exception).raise_code = (yyvsp[(1) - (1)].codeb);
++                (yyval.exception).raise_code = (yyvsp[0].codeb);
+             }
+             else
+             {
+@@ -3618,15 +3327,16 @@
+ 
+             (yyval.exception).type_header_code = NULL;
+         }
++#line 3331 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 102:
+-#line 1124 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1124 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+                 (yyval.exception).token = TK_TYPEHEADERCODE;
+-                (yyval.exception).type_header_code = (yyvsp[(1) - (1)].codeb);
++                (yyval.exception).type_header_code = (yyvsp[0].codeb);
+             }
+             else
+             {
+@@ -3636,17 +3346,19 @@
+ 
+             (yyval.exception).raise_code = NULL;
+         }
++#line 3350 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 103:
+-#line 1140 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1140 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.codeb) = (yyvsp[(2) - (2)].codeb);
++            (yyval.codeb) = (yyvsp[0].codeb);
+         }
++#line 3358 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 104:
+-#line 1145 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1145 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+@@ -3663,15 +3375,16 @@
+                     NULL
+                 };
+ 
+-                checkAnnos(&(yyvsp[(3) - (3)].optflags), annos);
++                checkAnnos(&(yyvsp[0].optflags), annos);
+ 
+-                currentMappedType = newMappedType(currentSpec, &(yyvsp[(2) - (3)].memArg), &(yyvsp[(3) - (3)].optflags));
++                currentMappedType = newMappedType(currentSpec, &(yyvsp[-1].memArg), &(yyvsp[0].optflags));
+             }
+         }
++#line 3384 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 106:
+-#line 1168 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1168 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+@@ -3690,7 +3403,7 @@
+                 mappedTypeTmplDef *mtt;
+                 ifaceFileDef *iff;
+ 
+-                checkAnnos(&(yyvsp[(4) - (4)].optflags), annos);
++                checkAnnos(&(yyvsp[0].optflags), annos);
+ 
+                 if (currentSpec->genc)
+                     yyerror("%MappedType templates not allowed in a C module");
+@@ -3699,32 +3412,32 @@
+                  * Check the template arguments are basic types or simple
+                  * names.
+                  */
+-                for (a = 0; a < (yyvsp[(1) - (4)].signature).nrArgs; ++a)
++                for (a = 0; a < (yyvsp[-3].signature).nrArgs; ++a)
+                 {
+-                    argDef *ad = &(yyvsp[(1) - (4)].signature).args[a];
++                    argDef *ad = &(yyvsp[-3].signature).args[a];
+ 
+                     if (ad->atype == defined_type && ad->u.snd->next != NULL)
+                         yyerror("%MappedType template arguments must be simple names");
+                 }
+ 
+-                if ((yyvsp[(3) - (4)].memArg).atype != template_type)
++                if ((yyvsp[-1].memArg).atype != template_type)
+                     yyerror("%MappedType template must map a template type");
+ 
+-                (yyvsp[(3) - (4)].memArg).u.td->fqname  = fullyQualifiedName((yyvsp[(3) - (4)].memArg).u.td->fqname);
++                (yyvsp[-1].memArg).u.td->fqname  = fullyQualifiedName((yyvsp[-1].memArg).u.td->fqname);
+ 
+                 /* Check a template hasn't already been provided. */
+                 for (mtt = currentSpec->mappedtypetemplates; mtt != NULL; mtt = mtt->next)
+-                    if (compareScopedNames(mtt->mt->type.u.td->fqname, (yyvsp[(3) - (4)].memArg).u.td->fqname ) == 0 && sameTemplateSignature(&mtt->mt->type.u.td->types, &(yyvsp[(3) - (4)].memArg).u.td->types, TRUE))
++                    if (compareScopedNames(mtt->mt->type.u.td->fqname, (yyvsp[-1].memArg).u.td->fqname ) == 0 && sameTemplateSignature(&mtt->mt->type.u.td->types, &(yyvsp[-1].memArg).u.td->types, TRUE))
+                         yyerror("%MappedType template for this type has already been defined");
+ 
+-                (yyvsp[(3) - (4)].memArg).nrderefs = 0;
+-                (yyvsp[(3) - (4)].memArg).argflags = 0;
++                (yyvsp[-1].memArg).nrderefs = 0;
++                (yyvsp[-1].memArg).argflags = 0;
+ 
+                 mtt = sipMalloc(sizeof (mappedTypeTmplDef));
+ 
+-                mtt->sig = (yyvsp[(1) - (4)].signature);
+-                mtt->mt = allocMappedType(currentSpec, &(yyvsp[(3) - (4)].memArg));
+-                mappedTypeAnnos(mtt->mt, &(yyvsp[(4) - (4)].optflags));
++                mtt->sig = (yyvsp[-3].signature);
++                mtt->mt = allocMappedType(currentSpec, &(yyvsp[-1].memArg));
++                mappedTypeAnnos(mtt->mt, &(yyvsp[0].optflags));
+                 mtt->next = currentSpec->mappedtypetemplates;
+ 
+                 currentSpec->mappedtypetemplates = mtt;
+@@ -3737,10 +3450,11 @@
+                 mtt->mt->iff = iff;
+             }
+         }
++#line 3454 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 108:
+-#line 1235 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1235 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+@@ -3753,82 +3467,89 @@
+                 currentMappedType = NULL;
+             }
+         }
++#line 3471 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 113:
+-#line 1255 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1255 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+-                appendCodeBlock(&currentMappedType->iff->hdrcode, (yyvsp[(1) - (1)].codeb));
++                appendCodeBlock(&currentMappedType->iff->hdrcode, (yyvsp[0].codeb));
+         }
++#line 3480 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 114:
+-#line 1259 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1259 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+-                appendCodeBlock(&currentMappedType->typecode, (yyvsp[(1) - (1)].codeb));
++                appendCodeBlock(&currentMappedType->typecode, (yyvsp[0].codeb));
+         }
++#line 3489 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 115:
+-#line 1263 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1263 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+                 if (currentMappedType->convfromcode != NULL)
+                     yyerror("%MappedType has more than one %ConvertFromTypeCode directive");
+ 
+-                appendCodeBlock(&currentMappedType->convfromcode, (yyvsp[(2) - (2)].codeb));
++                appendCodeBlock(&currentMappedType->convfromcode, (yyvsp[0].codeb));
+             }
+         }
++#line 3503 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 116:
+-#line 1272 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1272 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+                 if (currentMappedType->convtocode != NULL)
+                     yyerror("%MappedType has more than one %ConvertToTypeCode directive");
+ 
+-                appendCodeBlock(&currentMappedType->convtocode, (yyvsp[(2) - (2)].codeb));
++                appendCodeBlock(&currentMappedType->convtocode, (yyvsp[0].codeb));
+             }
+         }
++#line 3517 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 117:
+-#line 1281 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1281 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+                 if (currentMappedType->instancecode != NULL)
+                     yyerror("%MappedType has more than one %InstanceCode directive");
+ 
+-                appendCodeBlock(&currentMappedType->instancecode, (yyvsp[(1) - (1)].codeb));
++                appendCodeBlock(&currentMappedType->instancecode, (yyvsp[0].codeb));
+             }
+         }
++#line 3531 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 120:
+-#line 1294 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1294 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+-                applyTypeFlags(currentModule, &(yyvsp[(2) - (14)].memArg), &(yyvsp[(9) - (14)].optflags));
++                applyTypeFlags(currentModule, &(yyvsp[-12].memArg), &(yyvsp[-5].optflags));
+ 
+-                (yyvsp[(5) - (14)].signature).result = (yyvsp[(2) - (14)].memArg);
++                (yyvsp[-9].signature).result = (yyvsp[-12].memArg);
+ 
+                 newFunction(currentSpec, currentModule, NULL, NULL,
+-                        currentMappedType, 0, TRUE, FALSE, FALSE, FALSE, (yyvsp[(3) - (14)].text),
+-                        &(yyvsp[(5) - (14)].signature), (yyvsp[(7) - (14)].number), FALSE, &(yyvsp[(9) - (14)].optflags), (yyvsp[(14) - (14)].codeb), NULL, NULL, (yyvsp[(8) - (14)].throwlist), (yyvsp[(10) - (14)].optsignature), (yyvsp[(12) - (14)].docstr),
+-                        FALSE, (yyvsp[(13) - (14)].codeb));
++                        currentMappedType, 0, TRUE, FALSE, FALSE, FALSE, (yyvsp[-11].text),
++                        &(yyvsp[-9].signature), (yyvsp[-7].number), FALSE, &(yyvsp[-5].optflags), (yyvsp[0].codeb), NULL, NULL, (yyvsp[-6].throwlist), (yyvsp[-4].optsignature), (yyvsp[-2].docstr),
++                        FALSE, (yyvsp[-1].codeb));
+             }
+         }
++#line 3549 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 121:
+-#line 1309 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1309 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (currentSpec -> genc)
+                 yyerror("namespace definition not allowed in a C module");
+@@ -3844,17 +3565,18 @@
+                     scope = NULL;
+ 
+                 ns = newClass(currentSpec, namespace_iface, NULL,
+-                        text2scopedName(scope, (yyvsp[(2) - (2)].text)), NULL, NULL, NULL, NULL);
++                        text2scopedName(scope, (yyvsp[0].text)), NULL, NULL, NULL, NULL);
+ 
+                 pushScope(ns);
+ 
+                 sectionFlags = 0;
+             }
+         }
++#line 3576 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 122:
+-#line 1330 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1330 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+@@ -3869,10 +3591,11 @@
+                 popScope();
+             }
+         }
++#line 3595 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 127:
+-#line 1354 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1354 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+@@ -3883,10 +3606,11 @@
+                         yyerror("%Platforms has already been defined for this module");
+             }
+         }
++#line 3610 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 128:
+-#line 1364 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1364 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+@@ -3904,70 +3628,78 @@
+                     yyerror("No more than one of these %Platforms must be specified with the -t flag");
+             }
+         }
++#line 3632 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 131:
+-#line 1387 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1387 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            newQualifier(currentModule, -1, -1, notSkipping(), (yyvsp[(1) - (1)].text),
++            newQualifier(currentModule, -1, -1, notSkipping(), (yyvsp[0].text),
+                     platform_qualifier);
+         }
++#line 3641 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 132:
+-#line 1393 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1393 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            newQualifier(currentModule, -1, -1, notSkipping(), (yyvsp[(2) - (2)].feature).name,
++            newQualifier(currentModule, -1, -1, notSkipping(), (yyvsp[0].feature).name,
+                     feature_qualifier);
+         }
++#line 3650 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 133:
+-#line 1399 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1399 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             resetLexerState();
+ 
+-            (yyval.feature).name = (yyvsp[(1) - (1)].text);
++            (yyval.feature).name = (yyvsp[0].text);
+         }
++#line 3660 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 134:
+-#line 1404 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1404 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.feature) = (yyvsp[(2) - (3)].feature);
++            (yyval.feature) = (yyvsp[-1].feature);
+         }
++#line 3668 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 136:
+-#line 1410 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1410 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.feature) = (yyvsp[(1) - (3)].feature);
++            (yyval.feature) = (yyvsp[-2].feature);
+ 
+-            switch ((yyvsp[(3) - (3)].feature).token)
++            switch ((yyvsp[0].feature).token)
+             {
+-            case TK_NAME: (yyval.feature).name = (yyvsp[(3) - (3)].feature).name; break;
++            case TK_NAME: (yyval.feature).name = (yyvsp[0].feature).name; break;
+             }
+         }
++#line 3681 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 137:
+-#line 1420 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1420 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.feature).token = TK_NAME;
+ 
+-            (yyval.feature).name = (yyvsp[(3) - (3)].text);
++            (yyval.feature).name = (yyvsp[0].text);
+         }
++#line 3691 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 138:
+-#line 1427 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1427 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             currentTimelineOrder = 0;
+         }
++#line 3699 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 139:
+-#line 1430 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1430 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+@@ -3989,25 +3721,28 @@
+                 currentModule->nrtimelines++;
+             }
+         }
++#line 3725 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 142:
+-#line 1457 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1457 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             newQualifier(currentModule, currentModule->nrtimelines,
+-                    currentTimelineOrder++, TRUE, (yyvsp[(1) - (1)].text), time_qualifier);
++                    currentTimelineOrder++, TRUE, (yyvsp[0].text), time_qualifier);
+         }
++#line 3734 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 143:
+-#line 1463 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1463 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             currentPlatforms = NULL;
+         }
++#line 3742 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 144:
+-#line 1465 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1465 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (stackPtr >= MAX_NESTED_IF)
+                 yyerror("Internal error: increase the value of MAX_NESTED_IF");
+@@ -4015,102 +3750,110 @@
+             /* Nested %Ifs are implicit logical ands. */
+ 
+             if (stackPtr > 0)
+-                (yyvsp[(4) - (5)].boolean) = ((yyvsp[(4) - (5)].boolean) && skipStack[stackPtr - 1]);
++                (yyvsp[-1].boolean) = ((yyvsp[-1].boolean) && skipStack[stackPtr - 1]);
+ 
+-            skipStack[stackPtr] = (yyvsp[(4) - (5)].boolean);
++            skipStack[stackPtr] = (yyvsp[-1].boolean);
+ 
+             platformStack[stackPtr] = currentPlatforms;
+ 
+             ++stackPtr;
+         }
++#line 3762 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 145:
+-#line 1482 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1482 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.boolean) = platOrFeature((yyvsp[(1) - (1)].text), FALSE);
++            (yyval.boolean) = platOrFeature((yyvsp[0].text), FALSE);
+         }
++#line 3770 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 146:
+-#line 1485 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1485 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.boolean) = platOrFeature((yyvsp[(2) - (2)].text), TRUE);
++            (yyval.boolean) = platOrFeature((yyvsp[0].text), TRUE);
+         }
++#line 3778 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 147:
+-#line 1488 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1488 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.boolean) = (platOrFeature((yyvsp[(3) - (3)].text), FALSE) || (yyvsp[(1) - (3)].boolean));
++            (yyval.boolean) = (platOrFeature((yyvsp[0].text), FALSE) || (yyvsp[-2].boolean));
+         }
++#line 3786 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 148:
+-#line 1491 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1491 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.boolean) = (platOrFeature((yyvsp[(4) - (4)].text), TRUE) || (yyvsp[(1) - (4)].boolean));
++            (yyval.boolean) = (platOrFeature((yyvsp[0].text), TRUE) || (yyvsp[-3].boolean));
+         }
++#line 3794 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 150:
+-#line 1497 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1497 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.boolean) = timePeriod((yyvsp[(1) - (3)].text), (yyvsp[(3) - (3)].text));
++            (yyval.boolean) = timePeriod((yyvsp[-2].text), (yyvsp[0].text));
+         }
++#line 3802 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 151:
+-#line 1502 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1502 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (stackPtr-- <= 0)
+                 yyerror("Too many %End directives");
+ 
+             currentPlatforms = (stackPtr == 0 ? NULL : platformStack[stackPtr - 1]);
+         }
++#line 3813 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 152:
+-#line 1510 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1510 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             optFlag *of;
+ 
+-            if ((yyvsp[(3) - (3)].optflags).nrFlags != 0)
++            if ((yyvsp[0].optflags).nrFlags != 0)
+                 deprecated("%License annotations are deprecated, use arguments instead");
+ 
+-            if ((yyvsp[(2) - (3)].license).type == NULL)
+-                if ((of = getOptFlag(&(yyvsp[(3) - (3)].optflags), "Type", string_flag)) != NULL)
+-                    (yyvsp[(2) - (3)].license).type = of->fvalue.sval;
++            if ((yyvsp[-1].license).type == NULL)
++                if ((of = getOptFlag(&(yyvsp[0].optflags), "Type", string_flag)) != NULL)
++                    (yyvsp[-1].license).type = of->fvalue.sval;
+ 
+-            if ((yyvsp[(2) - (3)].license).licensee == NULL)
+-                if ((of = getOptFlag(&(yyvsp[(3) - (3)].optflags), "Licensee", string_flag)) != NULL)
+-                    (yyvsp[(2) - (3)].license).licensee = of->fvalue.sval;
++            if ((yyvsp[-1].license).licensee == NULL)
++                if ((of = getOptFlag(&(yyvsp[0].optflags), "Licensee", string_flag)) != NULL)
++                    (yyvsp[-1].license).licensee = of->fvalue.sval;
+ 
+-            if ((yyvsp[(2) - (3)].license).signature == NULL)
+-                if ((of = getOptFlag(&(yyvsp[(3) - (3)].optflags), "Signature", string_flag)) != NULL)
+-                    (yyvsp[(2) - (3)].license).signature = of->fvalue.sval;
++            if ((yyvsp[-1].license).signature == NULL)
++                if ((of = getOptFlag(&(yyvsp[0].optflags), "Signature", string_flag)) != NULL)
++                    (yyvsp[-1].license).signature = of->fvalue.sval;
+ 
+-            if ((yyvsp[(2) - (3)].license).timestamp == NULL)
+-                if ((of = getOptFlag(&(yyvsp[(3) - (3)].optflags), "Timestamp", string_flag)) != NULL)
+-                    (yyvsp[(2) - (3)].license).timestamp = of->fvalue.sval;
++            if ((yyvsp[-1].license).timestamp == NULL)
++                if ((of = getOptFlag(&(yyvsp[0].optflags), "Timestamp", string_flag)) != NULL)
++                    (yyvsp[-1].license).timestamp = of->fvalue.sval;
+ 
+-            if ((yyvsp[(2) - (3)].license).type == NULL)
++            if ((yyvsp[-1].license).type == NULL)
+                 yyerror("%License must have a 'type' argument");
+ 
+             if (notSkipping())
+             {
+                 currentModule->license = sipMalloc(sizeof (licenseDef));
+ 
+-                currentModule->license->type = (yyvsp[(2) - (3)].license).type;
+-                currentModule->license->licensee = (yyvsp[(2) - (3)].license).licensee;
+-                currentModule->license->sig = (yyvsp[(2) - (3)].license).signature;
+-                currentModule->license->timestamp = (yyvsp[(2) - (3)].license).timestamp;
++                currentModule->license->type = (yyvsp[-1].license).type;
++                currentModule->license->licensee = (yyvsp[-1].license).licensee;
++                currentModule->license->sig = (yyvsp[-1].license).signature;
++                currentModule->license->timestamp = (yyvsp[-1].license).timestamp;
+             }
+         }
++#line 3853 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 153:
+-#line 1547 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1547 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             resetLexerState();
+ 
+@@ -4119,241 +3862,264 @@
+             (yyval.license).signature = NULL;
+             (yyval.license).timestamp = NULL;
+         }
++#line 3866 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 154:
+-#line 1555 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1555 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.license).type = (yyvsp[(1) - (1)].text);
++            (yyval.license).type = (yyvsp[0].text);
+             (yyval.license).licensee = NULL;
+             (yyval.license).signature = NULL;
+             (yyval.license).timestamp = NULL;
+         }
++#line 3877 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 155:
+-#line 1561 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1561 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.license) = (yyvsp[(2) - (3)].license);
++            (yyval.license) = (yyvsp[-1].license);
+         }
++#line 3885 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 157:
+-#line 1567 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1567 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.license) = (yyvsp[(1) - (3)].license);
++            (yyval.license) = (yyvsp[-2].license);
+ 
+-            switch ((yyvsp[(3) - (3)].license).token)
++            switch ((yyvsp[0].license).token)
+             {
+-            case TK_TYPE: (yyval.license).type = (yyvsp[(3) - (3)].license).type; break;
+-            case TK_LICENSEE: (yyval.license).licensee = (yyvsp[(3) - (3)].license).licensee; break;
+-            case TK_SIGNATURE: (yyval.license).signature = (yyvsp[(3) - (3)].license).signature; break;
+-            case TK_TIMESTAMP: (yyval.license).timestamp = (yyvsp[(3) - (3)].license).timestamp; break;
++            case TK_TYPE: (yyval.license).type = (yyvsp[0].license).type; break;
++            case TK_LICENSEE: (yyval.license).licensee = (yyvsp[0].license).licensee; break;
++            case TK_SIGNATURE: (yyval.license).signature = (yyvsp[0].license).signature; break;
++            case TK_TIMESTAMP: (yyval.license).timestamp = (yyvsp[0].license).timestamp; break;
+             }
+         }
++#line 3901 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 158:
+-#line 1580 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1580 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.license).token = TK_NAME;
+ 
+-            (yyval.license).type = (yyvsp[(3) - (3)].text);
++            (yyval.license).type = (yyvsp[0].text);
+             (yyval.license).licensee = NULL;
+             (yyval.license).signature = NULL;
+             (yyval.license).timestamp = NULL;
+         }
++#line 3914 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 159:
+-#line 1588 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1588 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.license).token = TK_LICENSEE;
+ 
+             (yyval.license).type = NULL;
+-            (yyval.license).licensee = (yyvsp[(3) - (3)].text);
++            (yyval.license).licensee = (yyvsp[0].text);
+             (yyval.license).signature = NULL;
+             (yyval.license).timestamp = NULL;
+         }
++#line 3927 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 160:
+-#line 1596 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1596 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.license).token = TK_SIGNATURE;
+ 
+             (yyval.license).type = NULL;
+             (yyval.license).licensee = NULL;
+-            (yyval.license).signature = (yyvsp[(3) - (3)].text);
++            (yyval.license).signature = (yyvsp[0].text);
+             (yyval.license).timestamp = NULL;
+         }
++#line 3940 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 161:
+-#line 1604 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1604 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.license).token = TK_TIMESTAMP;
+ 
+             (yyval.license).type = NULL;
+             (yyval.license).licensee = NULL;
+             (yyval.license).signature = NULL;
+-            (yyval.license).timestamp = (yyvsp[(3) - (3)].text);
++            (yyval.license).timestamp = (yyvsp[0].text);
+         }
++#line 3953 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 162:
+-#line 1614 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1614 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+                 if (currentModule->defmetatype != NULL)
+                     yyerror("%DefaultMetatype has already been defined for this module");
+ 
+-                currentModule->defmetatype = cacheName(currentSpec, (yyvsp[(2) - (2)].defmetatype).name);
++                currentModule->defmetatype = cacheName(currentSpec, (yyvsp[0].defmetatype).name);
+             }
+         }
++#line 3967 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 163:
+-#line 1625 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1625 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             resetLexerState();
+ 
+-            (yyval.defmetatype).name = (yyvsp[(1) - (1)].text);
++            (yyval.defmetatype).name = (yyvsp[0].text);
+         }
++#line 3977 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 164:
+-#line 1630 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1630 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.defmetatype) = (yyvsp[(2) - (3)].defmetatype);
++            (yyval.defmetatype) = (yyvsp[-1].defmetatype);
+         }
++#line 3985 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 166:
+-#line 1636 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1636 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.defmetatype) = (yyvsp[(1) - (3)].defmetatype);
++            (yyval.defmetatype) = (yyvsp[-2].defmetatype);
+ 
+-            switch ((yyvsp[(3) - (3)].defmetatype).token)
++            switch ((yyvsp[0].defmetatype).token)
+             {
+-            case TK_NAME: (yyval.defmetatype).name = (yyvsp[(3) - (3)].defmetatype).name; break;
++            case TK_NAME: (yyval.defmetatype).name = (yyvsp[0].defmetatype).name; break;
+             }
+         }
++#line 3998 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 167:
+-#line 1646 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1646 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.defmetatype).token = TK_NAME;
+ 
+-            (yyval.defmetatype).name = (yyvsp[(3) - (3)].text);
++            (yyval.defmetatype).name = (yyvsp[0].text);
+         }
++#line 4008 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 168:
+-#line 1653 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1653 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+                 if (currentModule->defsupertype != NULL)
+                     yyerror("%DefaultSupertype has already been defined for this module");
+ 
+-                currentModule->defsupertype = cacheName(currentSpec, (yyvsp[(2) - (2)].defsupertype).name);
++                currentModule->defsupertype = cacheName(currentSpec, (yyvsp[0].defsupertype).name);
+             }
+         }
++#line 4022 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 169:
+-#line 1664 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1664 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             resetLexerState();
+ 
+-            (yyval.defsupertype).name = (yyvsp[(1) - (1)].text);
++            (yyval.defsupertype).name = (yyvsp[0].text);
+         }
++#line 4032 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 170:
+-#line 1669 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1669 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.defsupertype) = (yyvsp[(2) - (3)].defsupertype);
++            (yyval.defsupertype) = (yyvsp[-1].defsupertype);
+         }
++#line 4040 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 172:
+-#line 1675 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1675 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.defsupertype) = (yyvsp[(1) - (3)].defsupertype);
++            (yyval.defsupertype) = (yyvsp[-2].defsupertype);
+ 
+-            switch ((yyvsp[(3) - (3)].defsupertype).token)
++            switch ((yyvsp[0].defsupertype).token)
+             {
+-            case TK_NAME: (yyval.defsupertype).name = (yyvsp[(3) - (3)].defsupertype).name; break;
++            case TK_NAME: (yyval.defsupertype).name = (yyvsp[0].defsupertype).name; break;
+             }
+         }
++#line 4053 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 173:
+-#line 1685 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1685 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.defsupertype).token = TK_NAME;
+ 
+-            (yyval.defsupertype).name = (yyvsp[(3) - (3)].text);
++            (yyval.defsupertype).name = (yyvsp[0].text);
+         }
++#line 4063 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 174:
+-#line 1692 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1692 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+                 classDef *ns;
+ 
+                 ns = newClass(currentSpec, namespace_iface, NULL,
+-                        fullyQualifiedName((yyvsp[(2) - (2)].hiddenns).name), NULL, NULL, NULL, NULL);
++                        fullyQualifiedName((yyvsp[0].hiddenns).name), NULL, NULL, NULL, NULL);
+                 setHiddenNamespace(ns);
+             }
+         }
++#line 4078 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 175:
+-#line 1704 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1704 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             resetLexerState();
+ 
+-            (yyval.hiddenns).name = (yyvsp[(1) - (1)].scpvalp);
++            (yyval.hiddenns).name = (yyvsp[0].scpvalp);
+         }
++#line 4088 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 176:
+-#line 1709 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1709 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.hiddenns) = (yyvsp[(2) - (3)].hiddenns);
++            (yyval.hiddenns) = (yyvsp[-1].hiddenns);
+         }
++#line 4096 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 178:
+-#line 1715 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1715 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.hiddenns) = (yyvsp[(1) - (3)].hiddenns);
++            (yyval.hiddenns) = (yyvsp[-2].hiddenns);
+ 
+-            switch ((yyvsp[(3) - (3)].hiddenns).token)
++            switch ((yyvsp[0].hiddenns).token)
+             {
+-            case TK_NAME: (yyval.hiddenns).name = (yyvsp[(3) - (3)].hiddenns).name; break;
++            case TK_NAME: (yyval.hiddenns).name = (yyvsp[0].hiddenns).name; break;
+             }
+         }
++#line 4109 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 179:
+-#line 1725 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1725 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.hiddenns).token = TK_NAME;
+ 
+-            (yyval.hiddenns).name = (yyvsp[(3) - (3)].scpvalp);
++            (yyval.hiddenns).name = (yyvsp[0].scpvalp);
+         }
++#line 4119 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 180:
+-#line 1732 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1732 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             deprecated("%ConsolidatedModule is deprecated and will not be supported by SIP v5");
+ 
+@@ -4366,99 +4132,109 @@
+                 if (currentModule->fullname != NULL)
+                     yyerror("%ConsolidatedModule must appear before any %Module or %CModule directive");
+ 
+-                setModuleName(currentSpec, currentModule, (yyvsp[(2) - (3)].consmodule).name);
+-                currentModule->docstring = (yyvsp[(3) - (3)].consmodule).docstring;
++                setModuleName(currentSpec, currentModule, (yyvsp[-1].consmodule).name);
++                currentModule->docstring = (yyvsp[0].consmodule).docstring;
+ 
+                 setIsConsolidated(currentModule);
+             }
+         }
++#line 4142 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 181:
+-#line 1752 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1752 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             resetLexerState();
+ 
+-            (yyval.consmodule).name = (yyvsp[(1) - (1)].text);
++            (yyval.consmodule).name = (yyvsp[0].text);
+         }
++#line 4152 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 182:
+-#line 1757 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1757 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.consmodule) = (yyvsp[(2) - (3)].consmodule);
++            (yyval.consmodule) = (yyvsp[-1].consmodule);
+         }
++#line 4160 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 184:
+-#line 1763 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1763 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.consmodule) = (yyvsp[(1) - (3)].consmodule);
++            (yyval.consmodule) = (yyvsp[-2].consmodule);
+ 
+-            switch ((yyvsp[(3) - (3)].consmodule).token)
++            switch ((yyvsp[0].consmodule).token)
+             {
+-            case TK_NAME: (yyval.consmodule).name = (yyvsp[(3) - (3)].consmodule).name; break;
++            case TK_NAME: (yyval.consmodule).name = (yyvsp[0].consmodule).name; break;
+             }
+         }
++#line 4173 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 185:
+-#line 1773 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1773 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.consmodule).token = TK_NAME;
+ 
+-            (yyval.consmodule).name = (yyvsp[(3) - (3)].text);
++            (yyval.consmodule).name = (yyvsp[0].text);
+         }
++#line 4183 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 186:
+-#line 1780 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1780 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.consmodule).token = 0;
+             (yyval.consmodule).docstring = NULL;
+         }
++#line 4192 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 187:
+-#line 1784 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1784 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.consmodule) = (yyvsp[(2) - (4)].consmodule);
++            (yyval.consmodule) = (yyvsp[-2].consmodule);
+         }
++#line 4200 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 189:
+-#line 1790 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1790 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.consmodule) = (yyvsp[(1) - (2)].consmodule);
++            (yyval.consmodule) = (yyvsp[-1].consmodule);
+ 
+-            switch ((yyvsp[(2) - (2)].consmodule).token)
++            switch ((yyvsp[0].consmodule).token)
+             {
+-            case TK_DOCSTRING: (yyval.consmodule).docstring = (yyvsp[(2) - (2)].consmodule).docstring; break;
++            case TK_DOCSTRING: (yyval.consmodule).docstring = (yyvsp[0].consmodule).docstring; break;
+             }
+         }
++#line 4213 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 190:
+-#line 1800 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1800 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.consmodule).token = TK_IF;
+         }
++#line 4221 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 191:
+-#line 1803 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1803 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.consmodule).token = TK_END;
+         }
++#line 4229 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 192:
+-#line 1806 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1806 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+                 (yyval.consmodule).token = TK_DOCSTRING;
+-                (yyval.consmodule).docstring = (yyvsp[(1) - (1)].docstr);
++                (yyval.consmodule).docstring = (yyvsp[0].docstr);
+             }
+             else
+             {
+@@ -4466,10 +4242,11 @@
+                 (yyval.consmodule).docstring = NULL;
+             }
+         }
++#line 4246 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 193:
+-#line 1820 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1820 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+@@ -4480,99 +4257,109 @@
+                 if (currentModule->fullname != NULL)
+                     yyerror("%CompositeModule must appear before any %Module directive");
+ 
+-                setModuleName(currentSpec, currentModule, (yyvsp[(2) - (3)].compmodule).name);
+-                currentModule->docstring = (yyvsp[(3) - (3)].compmodule).docstring;
++                setModuleName(currentSpec, currentModule, (yyvsp[-1].compmodule).name);
++                currentModule->docstring = (yyvsp[0].compmodule).docstring;
+ 
+                 setIsComposite(currentModule);
+             }
+         }
++#line 4267 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 194:
+-#line 1838 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1838 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             resetLexerState();
+ 
+-            (yyval.compmodule).name = (yyvsp[(1) - (1)].text);
++            (yyval.compmodule).name = (yyvsp[0].text);
+         }
++#line 4277 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 195:
+-#line 1843 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1843 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.compmodule) = (yyvsp[(2) - (3)].compmodule);
++            (yyval.compmodule) = (yyvsp[-1].compmodule);
+         }
++#line 4285 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 197:
+-#line 1849 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1849 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.compmodule) = (yyvsp[(1) - (3)].compmodule);
++            (yyval.compmodule) = (yyvsp[-2].compmodule);
+ 
+-            switch ((yyvsp[(3) - (3)].compmodule).token)
++            switch ((yyvsp[0].compmodule).token)
+             {
+-            case TK_NAME: (yyval.compmodule).name = (yyvsp[(3) - (3)].compmodule).name; break;
++            case TK_NAME: (yyval.compmodule).name = (yyvsp[0].compmodule).name; break;
+             }
+         }
++#line 4298 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 198:
+-#line 1859 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1859 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.compmodule).token = TK_NAME;
+ 
+-            (yyval.compmodule).name = (yyvsp[(3) - (3)].text);
++            (yyval.compmodule).name = (yyvsp[0].text);
+         }
++#line 4308 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 199:
+-#line 1866 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1866 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.compmodule).token = 0;
+             (yyval.compmodule).docstring = NULL;
+         }
++#line 4317 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 200:
+-#line 1870 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1870 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.compmodule) = (yyvsp[(2) - (4)].compmodule);
++            (yyval.compmodule) = (yyvsp[-2].compmodule);
+         }
++#line 4325 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 202:
+-#line 1876 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1876 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.compmodule) = (yyvsp[(1) - (2)].compmodule);
++            (yyval.compmodule) = (yyvsp[-1].compmodule);
+ 
+-            switch ((yyvsp[(2) - (2)].compmodule).token)
++            switch ((yyvsp[0].compmodule).token)
+             {
+-            case TK_DOCSTRING: (yyval.compmodule).docstring = (yyvsp[(2) - (2)].compmodule).docstring; break;
++            case TK_DOCSTRING: (yyval.compmodule).docstring = (yyvsp[0].compmodule).docstring; break;
+             }
+         }
++#line 4338 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 203:
+-#line 1886 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1886 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.compmodule).token = TK_IF;
+         }
++#line 4346 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 204:
+-#line 1889 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1889 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.compmodule).token = TK_END;
+         }
++#line 4354 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 205:
+-#line 1892 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1892 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+                 (yyval.compmodule).token = TK_DOCSTRING;
+-                (yyval.compmodule).docstring = (yyvsp[(1) - (1)].docstr);
++                (yyval.compmodule).docstring = (yyvsp[0].docstr);
+             }
+             else
+             {
+@@ -4580,90 +4367,97 @@
+                 (yyval.compmodule).docstring = NULL;
+             }
+         }
++#line 4371 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 206:
+-#line 1906 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1906 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            if ((yyvsp[(2) - (3)].module).name == NULL)
++            if ((yyvsp[-1].module).name == NULL)
+                 yyerror("%Module must have a 'name' argument");
+ 
+             if (notSkipping())
+                 currentModule = configureModule(currentSpec, currentModule,
+-                        currentContext.filename, (yyvsp[(2) - (3)].module).name, (yyvsp[(2) - (3)].module).c_module,
+-                        (yyvsp[(2) - (3)].module).kwargs, (yyvsp[(2) - (3)].module).use_arg_names, (yyvsp[(2) - (3)].module).use_limited_api,
+-                        (yyvsp[(2) - (3)].module).call_super_init, (yyvsp[(2) - (3)].module).all_raise_py_exc,
+-                        (yyvsp[(2) - (3)].module).def_error_handler, (yyvsp[(3) - (3)].module).docstring);
++                        currentContext.filename, (yyvsp[-1].module).name, (yyvsp[-1].module).c_module,
++                        (yyvsp[-1].module).kwargs, (yyvsp[-1].module).use_arg_names, (yyvsp[-1].module).use_limited_api,
++                        (yyvsp[-1].module).call_super_init, (yyvsp[-1].module).all_raise_py_exc,
++                        (yyvsp[-1].module).def_error_handler, (yyvsp[0].module).docstring);
+         }
++#line 4387 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 207:
+-#line 1917 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1917 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             deprecated("%CModule is deprecated, use %Module and the 'language' argument instead");
+ 
+             if (notSkipping())
+                 currentModule = configureModule(currentSpec, currentModule,
+-                        currentContext.filename, (yyvsp[(2) - (3)].text), TRUE, defaultKwArgs,
++                        currentContext.filename, (yyvsp[-1].text), TRUE, defaultKwArgs,
+                         FALSE, FALSE, -1, FALSE, NULL, NULL);
+         }
++#line 4400 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 208:
+-#line 1927 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1927 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {resetLexerState();}
++#line 4406 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 209:
+-#line 1927 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1927 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            if ((yyvsp[(3) - (3)].number) >= 0)
++            if ((yyvsp[0].number) >= 0)
+                 deprecated("%Module version number should be specified using the 'version' argument");
+ 
+             (yyval.module).c_module = FALSE;
+             (yyval.module).kwargs = defaultKwArgs;
+-            (yyval.module).name = (yyvsp[(1) - (3)].text);
++            (yyval.module).name = (yyvsp[-2].text);
+             (yyval.module).use_arg_names = FALSE;
+             (yyval.module).use_limited_api = FALSE;
+             (yyval.module).all_raise_py_exc = FALSE;
+             (yyval.module).call_super_init = -1;
+             (yyval.module).def_error_handler = NULL;
+         }
++#line 4424 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 210:
+-#line 1940 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1940 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.module) = (yyvsp[(2) - (3)].module);
++            (yyval.module) = (yyvsp[-1].module);
+         }
++#line 4432 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 212:
+-#line 1946 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1946 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.module) = (yyvsp[(1) - (3)].module);
++            (yyval.module) = (yyvsp[-2].module);
+ 
+-            switch ((yyvsp[(3) - (3)].module).token)
++            switch ((yyvsp[0].module).token)
+             {
+-            case TK_KWARGS: (yyval.module).kwargs = (yyvsp[(3) - (3)].module).kwargs; break;
+-            case TK_LANGUAGE: (yyval.module).c_module = (yyvsp[(3) - (3)].module).c_module; break;
+-            case TK_NAME: (yyval.module).name = (yyvsp[(3) - (3)].module).name; break;
+-            case TK_USEARGNAMES: (yyval.module).use_arg_names = (yyvsp[(3) - (3)].module).use_arg_names; break;
+-            case TK_USELIMITEDAPI: (yyval.module).use_limited_api = (yyvsp[(3) - (3)].module).use_limited_api; break;
+-            case TK_ALLRAISEPYEXC: (yyval.module).all_raise_py_exc = (yyvsp[(3) - (3)].module).all_raise_py_exc; break;
+-            case TK_CALLSUPERINIT: (yyval.module).call_super_init = (yyvsp[(3) - (3)].module).call_super_init; break;
+-            case TK_DEFERRORHANDLER: (yyval.module).def_error_handler = (yyvsp[(3) - (3)].module).def_error_handler; break;
++            case TK_KWARGS: (yyval.module).kwargs = (yyvsp[0].module).kwargs; break;
++            case TK_LANGUAGE: (yyval.module).c_module = (yyvsp[0].module).c_module; break;
++            case TK_NAME: (yyval.module).name = (yyvsp[0].module).name; break;
++            case TK_USEARGNAMES: (yyval.module).use_arg_names = (yyvsp[0].module).use_arg_names; break;
++            case TK_USELIMITEDAPI: (yyval.module).use_limited_api = (yyvsp[0].module).use_limited_api; break;
++            case TK_ALLRAISEPYEXC: (yyval.module).all_raise_py_exc = (yyvsp[0].module).all_raise_py_exc; break;
++            case TK_CALLSUPERINIT: (yyval.module).call_super_init = (yyvsp[0].module).call_super_init; break;
++            case TK_DEFERRORHANDLER: (yyval.module).def_error_handler = (yyvsp[0].module).def_error_handler; break;
+             }
+         }
++#line 4452 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 213:
+-#line 1963 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1963 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.module).token = TK_KWARGS;
+ 
+             (yyval.module).c_module = FALSE;
+-            (yyval.module).kwargs = convertKwArgs((yyvsp[(3) - (3)].text));
++            (yyval.module).kwargs = convertKwArgs((yyvsp[0].text));
+             (yyval.module).name = NULL;
+             (yyval.module).use_arg_names = FALSE;
+             (yyval.module).use_limited_api = FALSE;
+@@ -4671,16 +4465,17 @@
+             (yyval.module).call_super_init = -1;
+             (yyval.module).def_error_handler = NULL;
+         }
++#line 4469 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 214:
+-#line 1975 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1975 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.module).token = TK_LANGUAGE;
+ 
+-            if (strcmp((yyvsp[(3) - (3)].text), "C++") == 0)
++            if (strcmp((yyvsp[0].text), "C++") == 0)
+                 (yyval.module).c_module = FALSE;
+-            else if (strcmp((yyvsp[(3) - (3)].text), "C") == 0)
++            else if (strcmp((yyvsp[0].text), "C") == 0)
+                 (yyval.module).c_module = TRUE;
+             else
+                 yyerror("%Module 'language' argument must be either \"C++\" or \"C\"");
+@@ -4693,42 +4488,45 @@
+             (yyval.module).call_super_init = -1;
+             (yyval.module).def_error_handler = NULL;
+         }
++#line 4492 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 215:
+-#line 1993 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 1993 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.module).token = TK_NAME;
+ 
+             (yyval.module).c_module = FALSE;
+             (yyval.module).kwargs = defaultKwArgs;
+-            (yyval.module).name = (yyvsp[(3) - (3)].text);
++            (yyval.module).name = (yyvsp[0].text);
+             (yyval.module).use_arg_names = FALSE;
+             (yyval.module).use_limited_api = FALSE;
+             (yyval.module).all_raise_py_exc = FALSE;
+             (yyval.module).call_super_init = -1;
+             (yyval.module).def_error_handler = NULL;
+         }
++#line 4509 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 216:
+-#line 2005 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2005 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.module).token = TK_USEARGNAMES;
+ 
+             (yyval.module).c_module = FALSE;
+             (yyval.module).kwargs = defaultKwArgs;
+             (yyval.module).name = NULL;
+-            (yyval.module).use_arg_names = (yyvsp[(3) - (3)].boolean);
++            (yyval.module).use_arg_names = (yyvsp[0].boolean);
+             (yyval.module).use_limited_api = FALSE;
+             (yyval.module).all_raise_py_exc = FALSE;
+             (yyval.module).call_super_init = -1;
+             (yyval.module).def_error_handler = NULL;
+         }
++#line 4526 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 217:
+-#line 2017 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2017 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.module).token = TK_USELIMITEDAPI;
+ 
+@@ -4736,15 +4534,16 @@
+             (yyval.module).kwargs = defaultKwArgs;
+             (yyval.module).name = NULL;
+             (yyval.module).use_arg_names = FALSE;
+-            (yyval.module).use_limited_api = (yyvsp[(3) - (3)].boolean);
++            (yyval.module).use_limited_api = (yyvsp[0].boolean);
+             (yyval.module).all_raise_py_exc = FALSE;
+             (yyval.module).call_super_init = -1;
+             (yyval.module).def_error_handler = NULL;
+         }
++#line 4543 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 218:
+-#line 2029 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2029 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.module).token = TK_ALLRAISEPYEXC;
+ 
+@@ -4753,14 +4552,15 @@
+             (yyval.module).name = NULL;
+             (yyval.module).use_arg_names = FALSE;
+             (yyval.module).use_limited_api = FALSE;
+-            (yyval.module).all_raise_py_exc = (yyvsp[(3) - (3)].boolean);
++            (yyval.module).all_raise_py_exc = (yyvsp[0].boolean);
+             (yyval.module).call_super_init = -1;
+             (yyval.module).def_error_handler = NULL;
+         }
++#line 4560 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 219:
+-#line 2041 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2041 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.module).token = TK_CALLSUPERINIT;
+ 
+@@ -4770,13 +4570,14 @@
+             (yyval.module).use_arg_names = FALSE;
+             (yyval.module).use_limited_api = FALSE;
+             (yyval.module).all_raise_py_exc = FALSE;
+-            (yyval.module).call_super_init = (yyvsp[(3) - (3)].boolean);
++            (yyval.module).call_super_init = (yyvsp[0].boolean);
+             (yyval.module).def_error_handler = NULL;
+         }
++#line 4577 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 220:
+-#line 2053 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2053 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.module).token = TK_DEFERRORHANDLER;
+ 
+@@ -4787,16 +4588,17 @@
+             (yyval.module).use_limited_api = FALSE;
+             (yyval.module).all_raise_py_exc = FALSE;
+             (yyval.module).call_super_init = -1;
+-            (yyval.module).def_error_handler = (yyvsp[(3) - (3)].text);
++            (yyval.module).def_error_handler = (yyvsp[0].text);
+         }
++#line 4594 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 221:
+-#line 2065 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2065 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             deprecated("%Module version numbers are deprecated and ignored");
+ 
+-            if ((yyvsp[(3) - (3)].number) < 0)
++            if ((yyvsp[0].number) < 0)
+                 yyerror("%Module 'version' argument cannot be negative");
+ 
+             (yyval.module).token = TK_VERSION;
+@@ -4810,63 +4612,70 @@
+             (yyval.module).call_super_init = -1;
+             (yyval.module).def_error_handler = NULL;
+         }
++#line 4616 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 222:
+-#line 2084 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2084 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.module).token = 0;
+             (yyval.module).docstring = NULL;
+         }
++#line 4625 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 223:
+-#line 2088 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2088 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.module) = (yyvsp[(2) - (4)].module);
++            (yyval.module) = (yyvsp[-2].module);
+         }
++#line 4633 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 225:
+-#line 2094 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2094 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.module) = (yyvsp[(1) - (2)].module);
++            (yyval.module) = (yyvsp[-1].module);
+ 
+-            switch ((yyvsp[(2) - (2)].module).token)
++            switch ((yyvsp[0].module).token)
+             {
+-            case TK_DOCSTRING: (yyval.module).docstring = (yyvsp[(2) - (2)].module).docstring; break;
++            case TK_DOCSTRING: (yyval.module).docstring = (yyvsp[0].module).docstring; break;
+             }
+         }
++#line 4646 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 226:
+-#line 2104 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2104 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.module).token = TK_IF;
+         }
++#line 4654 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 227:
+-#line 2107 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2107 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.module).token = TK_END;
+         }
++#line 4662 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 228:
+-#line 2110 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2110 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.module).token = TK_AUTOPYNAME;
+         }
++#line 4670 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 229:
+-#line 2113 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2113 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+                 (yyval.module).token = TK_DOCSTRING;
+-                (yyval.module).docstring = (yyvsp[(1) - (1)].docstr);
++                (yyval.module).docstring = (yyvsp[0].docstr);
+             }
+             else
+             {
+@@ -4874,10 +4683,11 @@
+                 (yyval.module).docstring = NULL;
+             }
+         }
++#line 4687 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 231:
+-#line 2128 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2128 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             /*
+              * The grammar design is a bit broken and this is the easiest way
+@@ -4886,435 +4696,487 @@
+ 
+             char *cp;
+ 
+-            for (cp = (yyvsp[(1) - (1)].text); *cp != '\0'; ++cp)
++            for (cp = (yyvsp[0].text); *cp != '\0'; ++cp)
+                 if (*cp != '.' && *cp != '_' && !isalnum(*cp))
+                     yyerror("Invalid character in name");
+ 
+-            (yyval.text) = (yyvsp[(1) - (1)].text);
++            (yyval.text) = (yyvsp[0].text);
+         }
++#line 4706 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 232:
+-#line 2144 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2144 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.number) = -1;
+         }
++#line 4714 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 234:
+-#line 2150 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2150 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            if ((yyvsp[(2) - (2)].include).name == NULL)
++            if ((yyvsp[0].include).name == NULL)
+                 yyerror("%Include must have a 'name' argument");
+ 
+             if (notSkipping())
+-                parseFile(NULL, (yyvsp[(2) - (2)].include).name, NULL, (yyvsp[(2) - (2)].include).optional);
++                parseFile(NULL, (yyvsp[0].include).name, NULL, (yyvsp[0].include).optional);
+         }
++#line 4726 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 235:
+-#line 2159 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2159 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             resetLexerState();
+ 
+-            (yyval.include).name = (yyvsp[(1) - (1)].text);
++            (yyval.include).name = (yyvsp[0].text);
+             (yyval.include).optional = FALSE;
+         }
++#line 4737 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 236:
+-#line 2165 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2165 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.include) = (yyvsp[(2) - (3)].include);
++            (yyval.include) = (yyvsp[-1].include);
+         }
++#line 4745 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 238:
+-#line 2171 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2171 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.include) = (yyvsp[(1) - (3)].include);
++            (yyval.include) = (yyvsp[-2].include);
+ 
+-            switch ((yyvsp[(3) - (3)].include).token)
++            switch ((yyvsp[0].include).token)
+             {
+-            case TK_NAME: (yyval.include).name = (yyvsp[(3) - (3)].include).name; break;
+-            case TK_OPTIONAL: (yyval.include).optional = (yyvsp[(3) - (3)].include).optional; break;
++            case TK_NAME: (yyval.include).name = (yyvsp[0].include).name; break;
++            case TK_OPTIONAL: (yyval.include).optional = (yyvsp[0].include).optional; break;
+             }
+         }
++#line 4759 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 239:
+-#line 2182 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2182 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.include).token = TK_NAME;
+ 
+-            (yyval.include).name = (yyvsp[(3) - (3)].text);
++            (yyval.include).name = (yyvsp[0].text);
+             (yyval.include).optional = FALSE;
+         }
++#line 4770 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 240:
+-#line 2188 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2188 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.include).token = TK_OPTIONAL;
+ 
+             (yyval.include).name = NULL;
+-            (yyval.include).optional = (yyvsp[(3) - (3)].boolean);
++            (yyval.include).optional = (yyvsp[0].boolean);
+         }
++#line 4781 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 241:
+-#line 2196 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2196 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             deprecated("%OptionalInclude is deprecated, use %Include and the 'optional' argument instead");
+ 
+             if (notSkipping())
+-                parseFile(NULL, (yyvsp[(2) - (2)].text), NULL, TRUE);
++                parseFile(NULL, (yyvsp[0].text), NULL, TRUE);
+         }
++#line 4792 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 242:
+-#line 2204 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2204 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+-                newImport((yyvsp[(2) - (2)].import).name);
++                newImport((yyvsp[0].import).name);
+         }
++#line 4801 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 243:
+-#line 2210 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2210 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             resetLexerState();
+ 
+-            (yyval.import).name = (yyvsp[(1) - (1)].text);
++            (yyval.import).name = (yyvsp[0].text);
+         }
++#line 4811 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 244:
+-#line 2215 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2215 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.import) = (yyvsp[(2) - (3)].import);
++            (yyval.import) = (yyvsp[-1].import);
+         }
++#line 4819 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 246:
+-#line 2221 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2221 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.import) = (yyvsp[(1) - (3)].import);
++            (yyval.import) = (yyvsp[-2].import);
+ 
+-            switch ((yyvsp[(3) - (3)].import).token)
++            switch ((yyvsp[0].import).token)
+             {
+-            case TK_NAME: (yyval.import).name = (yyvsp[(3) - (3)].import).name; break;
++            case TK_NAME: (yyval.import).name = (yyvsp[0].import).name; break;
+             }
+         }
++#line 4832 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 247:
+-#line 2231 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2231 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.import).token = TK_NAME;
+ 
+-            (yyval.import).name = (yyvsp[(3) - (3)].text);
++            (yyval.import).name = (yyvsp[0].text);
+         }
++#line 4842 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 248:
+-#line 2238 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2238 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.codeb) = NULL;
+         }
++#line 4850 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 249:
+-#line 2241 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2241 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.codeb) = (yyvsp[(2) - (2)].codeb);
++            (yyval.codeb) = (yyvsp[0].codeb);
+         }
++#line 4858 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 250:
+-#line 2246 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2246 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.codeb) = NULL;
+         }
++#line 4866 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 251:
+-#line 2249 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2249 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.codeb) = (yyvsp[(2) - (2)].codeb);
++            (yyval.codeb) = (yyvsp[0].codeb);
+         }
++#line 4874 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 252:
+-#line 2254 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2254 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.codeb) = NULL;
+         }
++#line 4882 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 253:
+-#line 2257 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2257 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.codeb) = (yyvsp[(2) - (2)].codeb);
++            (yyval.codeb) = (yyvsp[0].codeb);
+         }
++#line 4890 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 254:
+-#line 2262 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2262 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+-                appendCodeBlock(&currentModule->copying, (yyvsp[(2) - (2)].codeb));
++                appendCodeBlock(&currentModule->copying, (yyvsp[0].codeb));
+         }
++#line 4899 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 255:
+-#line 2268 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2268 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+-                appendCodeBlock(&currentSpec->exphdrcode, (yyvsp[(2) - (2)].codeb));
++                appendCodeBlock(&currentSpec->exphdrcode, (yyvsp[0].codeb));
+         }
++#line 4908 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 256:
+-#line 2274 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2274 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+-                appendCodeBlock(&currentModule->hdrcode, (yyvsp[(2) - (2)].codeb));
++                appendCodeBlock(&currentModule->hdrcode, (yyvsp[0].codeb));
+         }
++#line 4917 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 257:
+-#line 2280 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2280 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.codeb) = (yyvsp[(2) - (2)].codeb);
++            (yyval.codeb) = (yyvsp[0].codeb);
+         }
++#line 4925 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 258:
+-#line 2285 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2285 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.codeb) = (yyvsp[(2) - (2)].codeb);
++            (yyval.codeb) = (yyvsp[0].codeb);
+         }
++#line 4933 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 259:
+-#line 2290 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2290 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.codeb) = (yyvsp[(2) - (2)].codeb);
++            (yyval.codeb) = (yyvsp[0].codeb);
+         }
++#line 4941 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 260:
+-#line 2295 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2295 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.codeb) = (yyvsp[(2) - (2)].codeb);
++            (yyval.codeb) = (yyvsp[0].codeb);
+         }
++#line 4949 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 261:
+-#line 2300 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2300 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.codeb) = (yyvsp[(2) - (2)].codeb);
++            (yyval.codeb) = (yyvsp[0].codeb);
+         }
++#line 4957 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 262:
+-#line 2305 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2305 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.codeb) = (yyvsp[(2) - (2)].codeb);
++            (yyval.codeb) = (yyvsp[0].codeb);
+         }
++#line 4965 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 263:
+-#line 2310 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2310 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.codeb) = (yyvsp[(2) - (2)].codeb);
++            (yyval.codeb) = (yyvsp[0].codeb);
+         }
++#line 4973 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 264:
+-#line 2315 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2315 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.codeb) = (yyvsp[(2) - (2)].codeb);
++            (yyval.codeb) = (yyvsp[0].codeb);
+         }
++#line 4981 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 265:
+-#line 2320 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2320 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.codeb) = (yyvsp[(2) - (2)].codeb);
++            (yyval.codeb) = (yyvsp[0].codeb);
+         }
++#line 4989 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 266:
+-#line 2325 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2325 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.codeb) = (yyvsp[(2) - (2)].codeb);
++            (yyval.codeb) = (yyvsp[0].codeb);
+         }
++#line 4997 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 267:
+-#line 2330 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2330 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.codeb) = (yyvsp[(2) - (2)].codeb);
++            (yyval.codeb) = (yyvsp[0].codeb);
+         }
++#line 5005 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 268:
+-#line 2335 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2335 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.codeb) = (yyvsp[(2) - (2)].codeb);
++            (yyval.codeb) = (yyvsp[0].codeb);
+         }
++#line 5013 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 269:
+-#line 2340 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2340 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+-                appendCodeBlock(&currentModule->cppcode, (yyvsp[(2) - (2)].codeb));
++                appendCodeBlock(&currentModule->cppcode, (yyvsp[0].codeb));
+         }
++#line 5022 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 270:
+-#line 2346 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2346 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.codeb) = (yyvsp[(2) - (2)].codeb);
++            (yyval.codeb) = (yyvsp[0].codeb);
+         }
++#line 5030 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 271:
+-#line 2351 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2351 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+-                appendCodeBlock(&currentModule->preinitcode, (yyvsp[(2) - (2)].codeb));
++                appendCodeBlock(&currentModule->preinitcode, (yyvsp[0].codeb));
+         }
++#line 5039 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 272:
+-#line 2357 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2357 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+-                appendCodeBlock(&currentModule->initcode, (yyvsp[(2) - (2)].codeb));
++                appendCodeBlock(&currentModule->initcode, (yyvsp[0].codeb));
+         }
++#line 5048 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 273:
+-#line 2363 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2363 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+-                appendCodeBlock(&currentModule->postinitcode, (yyvsp[(2) - (2)].codeb));
++                appendCodeBlock(&currentModule->postinitcode, (yyvsp[0].codeb));
+         }
++#line 5057 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 274:
+-#line 2369 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2369 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+-                appendCodeBlock(&currentModule->unitcode, (yyvsp[(2) - (2)].codeb));
++                appendCodeBlock(&currentModule->unitcode, (yyvsp[0].codeb));
+         }
++#line 5066 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 275:
+-#line 2375 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2375 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+-                appendCodeBlock(&currentModule->unitpostinccode, (yyvsp[(2) - (2)].codeb));
++                appendCodeBlock(&currentModule->unitpostinccode, (yyvsp[0].codeb));
+         }
++#line 5075 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 276:
+-#line 2381 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2381 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             /* Deprecated. */
+         }
++#line 5083 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 277:
+-#line 2386 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2386 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping() && !inMainModule())
+-                appendCodeBlock(&currentSpec->exptypehintcode, (yyvsp[(2) - (2)].codeb));
++                appendCodeBlock(&currentSpec->exptypehintcode, (yyvsp[0].codeb));
+         }
++#line 5092 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 278:
+-#line 2392 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2392 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+-                appendCodeBlock(&currentModule->typehintcode, (yyvsp[(2) - (2)].codeb));
++                appendCodeBlock(&currentModule->typehintcode, (yyvsp[0].codeb));
+         }
++#line 5101 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 279:
+-#line 2398 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2398 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.codeb) = (yyvsp[(2) - (2)].codeb);
++            (yyval.codeb) = (yyvsp[0].codeb);
+         }
++#line 5109 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 280:
+-#line 2403 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2403 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping() && inMainModule())
+-                appendCodeBlock(&currentSpec->docs, (yyvsp[(2) - (2)].codeb));
++                appendCodeBlock(&currentSpec->docs, (yyvsp[0].codeb));
+         }
++#line 5118 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 281:
+-#line 2409 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2409 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+-                appendCodeBlock(&currentSpec->docs, (yyvsp[(2) - (2)].codeb));
++                appendCodeBlock(&currentSpec->docs, (yyvsp[0].codeb));
+         }
++#line 5127 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 282:
+-#line 2415 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2415 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+-                addAutoPyName(currentModule, (yyvsp[(2) - (2)].autopyname).remove_leading);
++                addAutoPyName(currentModule, (yyvsp[0].autopyname).remove_leading);
+         }
++#line 5136 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 283:
+-#line 2421 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2421 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.autopyname) = (yyvsp[(2) - (3)].autopyname);
++            (yyval.autopyname) = (yyvsp[-1].autopyname);
+         }
++#line 5144 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 285:
+-#line 2427 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2427 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.autopyname) = (yyvsp[(1) - (3)].autopyname);
++            (yyval.autopyname) = (yyvsp[-2].autopyname);
+ 
+-            switch ((yyvsp[(3) - (3)].autopyname).token)
++            switch ((yyvsp[0].autopyname).token)
+             {
+-            case TK_REMOVELEADING: (yyval.autopyname).remove_leading = (yyvsp[(3) - (3)].autopyname).remove_leading; break;
++            case TK_REMOVELEADING: (yyval.autopyname).remove_leading = (yyvsp[0].autopyname).remove_leading; break;
+             }
+         }
++#line 5157 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 286:
+-#line 2437 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2437 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.autopyname).token = TK_REMOVELEADING;
+ 
+-            (yyval.autopyname).remove_leading = (yyvsp[(3) - (3)].text);
++            (yyval.autopyname).remove_leading = (yyvsp[0].text);
+         }
++#line 5167 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 287:
+-#line 2444 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2444 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.docstr) = sipMalloc(sizeof(docstringDef));
+ 
+-            (yyval.docstr)->signature = (yyvsp[(2) - (3)].docstring).signature;
+-            (yyval.docstr)->text = (yyvsp[(3) - (3)].codeb)->frag;
+-            free((yyvsp[(3) - (3)].codeb));
++            (yyval.docstr)->signature = (yyvsp[-1].docstring).signature;
++            (yyval.docstr)->text = (yyvsp[0].codeb)->frag;
++            free((yyvsp[0].codeb));
+ 
+             /* Format the docstring. */
+-            if ((yyvsp[(2) - (3)].docstring).format == deindented)
++            if ((yyvsp[-1].docstring).format == deindented)
+             {
+                 const char *cp;
+                 char *dp;
+@@ -5388,158 +5250,174 @@
+                 *dp = '\0';
+             }
+         }
++#line 5254 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 288:
+-#line 2528 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2528 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.docstring).format = currentModule->defdocstringfmt;
+             (yyval.docstring).signature = currentModule->defdocstringsig;
+         }
++#line 5263 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 289:
+-#line 2532 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2532 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             resetLexerState();
+ 
+-            (yyval.docstring).format = convertFormat((yyvsp[(1) - (1)].text));
++            (yyval.docstring).format = convertFormat((yyvsp[0].text));
+             (yyval.docstring).signature = currentModule->defdocstringsig;
+         }
++#line 5274 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 290:
+-#line 2538 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2538 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.docstring) = (yyvsp[(2) - (3)].docstring);
++            (yyval.docstring) = (yyvsp[-1].docstring);
+         }
++#line 5282 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 292:
+-#line 2544 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2544 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.docstring) = (yyvsp[(1) - (3)].docstring);
++            (yyval.docstring) = (yyvsp[-2].docstring);
+ 
+-            switch ((yyvsp[(3) - (3)].docstring).token)
++            switch ((yyvsp[0].docstring).token)
+             {
+-            case TK_FORMAT: (yyval.docstring).format = (yyvsp[(3) - (3)].docstring).format; break;
+-            case TK_SIGNATURE: (yyval.docstring).signature = (yyvsp[(3) - (3)].docstring).signature; break;
++            case TK_FORMAT: (yyval.docstring).format = (yyvsp[0].docstring).format; break;
++            case TK_SIGNATURE: (yyval.docstring).signature = (yyvsp[0].docstring).signature; break;
+             }
+         }
++#line 5296 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 293:
+-#line 2555 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2555 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.docstring).token = TK_FORMAT;
+ 
+-            (yyval.docstring).format = convertFormat((yyvsp[(3) - (3)].text));
++            (yyval.docstring).format = convertFormat((yyvsp[0].text));
+             (yyval.docstring).signature = currentModule->defdocstringsig;
+         }
++#line 5307 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 294:
+-#line 2561 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2561 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.docstring).token = TK_SIGNATURE;
+ 
+             (yyval.docstring).format = currentModule->defdocstringfmt;
+-            (yyval.docstring).signature = convertSignature((yyvsp[(3) - (3)].text));
++            (yyval.docstring).signature = convertSignature((yyvsp[0].text));
+         }
++#line 5318 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 295:
+-#line 2569 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2569 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.docstr) = NULL;
+         }
++#line 5326 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 297:
+-#line 2575 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2575 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            if ((yyvsp[(2) - (3)].extract).id == NULL)
++            if ((yyvsp[-1].extract).id == NULL)
+                 yyerror("%Extract must have an 'id' argument");
+ 
+             if (notSkipping())
+-                addExtractPart(currentSpec, (yyvsp[(2) - (3)].extract).id, (yyvsp[(2) - (3)].extract).order, (yyvsp[(3) - (3)].codeb));
++                addExtractPart(currentSpec, (yyvsp[-1].extract).id, (yyvsp[-1].extract).order, (yyvsp[0].codeb));
+         }
++#line 5338 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 298:
+-#line 2584 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2584 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             resetLexerState();
+ 
+-            (yyval.extract).id = (yyvsp[(1) - (1)].text);
++            (yyval.extract).id = (yyvsp[0].text);
+             (yyval.extract).order = -1;
+         }
++#line 5349 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 299:
+-#line 2590 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2590 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.extract) = (yyvsp[(2) - (3)].extract);
++            (yyval.extract) = (yyvsp[-1].extract);
+         }
++#line 5357 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 301:
+-#line 2596 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2596 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.extract) = (yyvsp[(1) - (3)].extract);
++            (yyval.extract) = (yyvsp[-2].extract);
+ 
+-            switch ((yyvsp[(3) - (3)].extract).token)
++            switch ((yyvsp[0].extract).token)
+             {
+-            case TK_ID: (yyval.extract).id = (yyvsp[(3) - (3)].extract).id; break;
+-            case TK_ORDER: (yyval.extract).order = (yyvsp[(3) - (3)].extract).order; break;
++            case TK_ID: (yyval.extract).id = (yyvsp[0].extract).id; break;
++            case TK_ORDER: (yyval.extract).order = (yyvsp[0].extract).order; break;
+             }
+         }
++#line 5371 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 302:
+-#line 2607 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2607 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.extract).token = TK_ID;
+ 
+-            (yyval.extract).id = (yyvsp[(3) - (3)].text);
++            (yyval.extract).id = (yyvsp[0].text);
+             (yyval.extract).order = -1;
+         }
++#line 5382 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 303:
+-#line 2613 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2613 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.extract).token = TK_ORDER;
+ 
+-            if ((yyvsp[(3) - (3)].number) < 0)
++            if ((yyvsp[0].number) < 0)
+                 yyerror("The 'order' of an %Extract directive must not be negative");
+ 
+             (yyval.extract).id = NULL;
+-            (yyval.extract).order = (yyvsp[(3) - (3)].number);
++            (yyval.extract).order = (yyvsp[0].number);
+         }
++#line 5396 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 304:
+-#line 2624 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2624 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             /* Deprecated. */
+         }
++#line 5404 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 307:
+-#line 2633 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2633 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.codeb) = (yyvsp[(1) - (2)].codeb);
++            (yyval.codeb) = (yyvsp[-1].codeb);
+ 
+-            append(&(yyval.codeb)->frag, (yyvsp[(2) - (2)].codeb)->frag);
++            append(&(yyval.codeb)->frag, (yyvsp[0].codeb)->frag);
+ 
+-            free((yyvsp[(2) - (2)].codeb)->frag);
+-            free((yyvsp[(2) - (2)].codeb));
++            free((yyvsp[0].codeb)->frag);
++            free((yyvsp[0].codeb));
+         }
++#line 5417 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 308:
+-#line 2643 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2643 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+@@ -5550,71 +5428,79 @@
+                     NULL
+                 };
+ 
+-                checkAnnos(&(yyvsp[(4) - (4)].optflags), annos);
++                checkAnnos(&(yyvsp[0].optflags), annos);
+ 
+                 if (sectionFlags != 0 && (sectionFlags & ~(SECT_IS_PUBLIC | SECT_IS_PROT)) != 0)
+                     yyerror("Class enums must be in the public or protected sections");
+ 
+-                if (currentSpec->genc && (yyvsp[(2) - (4)].boolean))
++                if (currentSpec->genc && (yyvsp[-2].boolean))
+                     yyerror("Scoped enums not allowed in a C module");
+ 
+                 currentEnum = newEnum(currentSpec, currentModule,
+-                        currentMappedType, (yyvsp[(3) - (4)].text), &(yyvsp[(4) - (4)].optflags), sectionFlags, (yyvsp[(2) - (4)].boolean));
++                        currentMappedType, (yyvsp[-1].text), &(yyvsp[0].optflags), sectionFlags, (yyvsp[-2].boolean));
+             }
+         }
++#line 5444 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 310:
+-#line 2667 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2667 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.boolean) = FALSE;
+         }
++#line 5452 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 311:
+-#line 2670 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2670 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.boolean) = TRUE;
+         }
++#line 5460 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 312:
+-#line 2673 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2673 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.boolean) = TRUE;
+         }
++#line 5468 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 313:
+-#line 2678 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2678 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.text) = NULL;
+         }
++#line 5476 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 314:
+-#line 2681 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2681 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.text) = (yyvsp[(1) - (1)].text);
++            (yyval.text) = (yyvsp[0].text);
+         }
++#line 5484 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 315:
+-#line 2686 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2686 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.text) = NULL;
+         }
++#line 5492 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 316:
+-#line 2689 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2689 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.text) = (yyvsp[(1) - (1)].text);
++            (yyval.text) = (yyvsp[0].text);
+         }
++#line 5500 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 323:
+-#line 2704 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2704 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+@@ -5626,15 +5512,15 @@
+ 
+                 enumMemberDef *emd, **tail;
+ 
+-                checkAnnos(&(yyvsp[(3) - (4)].optflags), annos);
++                checkAnnos(&(yyvsp[-1].optflags), annos);
+ 
+                 /* Note that we don't use the assigned value. */
+                 emd = sipMalloc(sizeof (enumMemberDef));
+ 
+                 emd->pyname = cacheName(currentSpec,
+-                        getPythonName(currentModule, &(yyvsp[(3) - (4)].optflags), (yyvsp[(1) - (4)].text)));
+-                emd->cname = (yyvsp[(1) - (4)].text);
+-                emd->no_typehint = getNoTypeHint(&(yyvsp[(3) - (4)].optflags));
++                        getPythonName(currentModule, &(yyvsp[-1].optflags), (yyvsp[-3].text)));
++                emd->cname = (yyvsp[-3].text);
++                emd->no_typehint = getNoTypeHint(&(yyvsp[-1].optflags));
+                 emd->ed = currentEnum;
+                 emd->platforms = currentPlatforms;
+                 emd->next = NULL;
+@@ -5652,207 +5538,232 @@
+                     setIsUsedName(emd->pyname);
+             }
+         }
++#line 5542 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 328:
+-#line 2751 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2751 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.valp) = NULL;
+         }
++#line 5550 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 329:
+-#line 2754 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2754 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.valp) = (yyvsp[(2) - (2)].valp);
++            (yyval.valp) = (yyvsp[0].valp);
+         }
++#line 5558 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 331:
+-#line 2760 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2760 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             valueDef *vd;
+  
+-            if ((yyvsp[(1) - (3)].valp) -> vtype == string_value || (yyvsp[(3) - (3)].valp) -> vtype == string_value)
++            if ((yyvsp[-2].valp) -> vtype == string_value || (yyvsp[0].valp) -> vtype == string_value)
+                 yyerror("Invalid binary operator for string");
+  
+             /* Find the last value in the existing expression. */
+  
+-            for (vd = (yyvsp[(1) - (3)].valp); vd -> next != NULL; vd = vd -> next)
++            for (vd = (yyvsp[-2].valp); vd -> next != NULL; vd = vd -> next)
+                 ;
+  
+-            vd -> vbinop = (yyvsp[(2) - (3)].qchar);
+-            vd -> next = (yyvsp[(3) - (3)].valp);
++            vd -> vbinop = (yyvsp[-1].qchar);
++            vd -> next = (yyvsp[0].valp);
+ 
+-            (yyval.valp) = (yyvsp[(1) - (3)].valp);
++            (yyval.valp) = (yyvsp[-2].valp);
+         }
++#line 5579 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 332:
+-#line 2778 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2778 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.qchar) = '-';
+         }
++#line 5587 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 333:
+-#line 2781 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2781 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.qchar) = '+';
+         }
++#line 5595 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 334:
+-#line 2784 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2784 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.qchar) = '*';
+         }
++#line 5603 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 335:
+-#line 2787 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2787 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.qchar) = '/';
+         }
++#line 5611 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 336:
+-#line 2790 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2790 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.qchar) = '&';
+         }
++#line 5619 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 337:
+-#line 2793 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2793 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.qchar) = '|';
+         }
++#line 5627 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 338:
+-#line 2798 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2798 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.qchar) = '\0';
+         }
++#line 5635 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 339:
+-#line 2801 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2801 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.qchar) = '!';
+         }
++#line 5643 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 340:
+-#line 2804 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2804 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.qchar) = '~';
+         }
++#line 5651 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 341:
+-#line 2807 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2807 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.qchar) = '-';
+         }
++#line 5659 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 342:
+-#line 2810 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2810 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.qchar) = '+';
+         }
++#line 5667 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 343:
+-#line 2813 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2813 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.qchar) = '*';
+         }
++#line 5675 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 344:
+-#line 2816 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2816 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.qchar) = '&';
+         }
++#line 5683 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 345:
+-#line 2821 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2821 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            if ((yyvsp[(2) - (3)].qchar) != '\0' && (yyvsp[(3) - (3)].value).vtype == string_value)
++            if ((yyvsp[-1].qchar) != '\0' && (yyvsp[0].value).vtype == string_value)
+                 yyerror("Invalid unary operator for string");
+  
+             /* Convert the value to a simple expression on the heap. */
+             (yyval.valp) = sipMalloc(sizeof (valueDef));
+  
+-            *(yyval.valp) = (yyvsp[(3) - (3)].value);
+-            (yyval.valp)->vunop = (yyvsp[(2) - (3)].qchar);
++            *(yyval.valp) = (yyvsp[0].value);
++            (yyval.valp)->vunop = (yyvsp[-1].qchar);
+             (yyval.valp)->vbinop = '\0';
+-            (yyval.valp)->cast = (yyvsp[(1) - (3)].scpvalp);
++            (yyval.valp)->cast = (yyvsp[-2].scpvalp);
+             (yyval.valp)->next = NULL;
+         }
++#line 5701 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 346:
+-#line 2836 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2836 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.scpvalp) = NULL;
+         }
++#line 5709 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 347:
+-#line 2839 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2839 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.scpvalp) = (yyvsp[(2) - (3)].scpvalp);
++            (yyval.scpvalp) = (yyvsp[-1].scpvalp);
+         }
++#line 5717 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 348:
+-#line 2844 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2844 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (currentSpec->genc)
+                 yyerror("Scoped names are not allowed in a C module");
+ 
+-            (yyval.scpvalp) = scopeScopedName(NULL, (yyvsp[(2) - (2)].scpvalp));
++            (yyval.scpvalp) = scopeScopedName(NULL, (yyvsp[0].scpvalp));
+         }
++#line 5728 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 351:
+-#line 2854 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2854 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (currentSpec->genc)
+                 yyerror("Scoped names are not allowed in a C module");
+ 
+-            appendScopedName(&(yyvsp[(1) - (3)].scpvalp), (yyvsp[(3) - (3)].scpvalp));
++            appendScopedName(&(yyvsp[-2].scpvalp), (yyvsp[0].scpvalp));
+         }
++#line 5739 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 352:
+-#line 2862 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2862 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.scpvalp) = text2scopePart((yyvsp[(1) - (1)].text));
++            (yyval.scpvalp) = text2scopePart((yyvsp[0].text));
+         }
++#line 5747 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 353:
+-#line 2867 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2867 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.boolean) = TRUE;
+         }
++#line 5755 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 354:
+-#line 2870 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2870 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.boolean) = FALSE;
+         }
++#line 5763 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 355:
+-#line 2875 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2875 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             /*
+              * We let the C++ compiler decide if the value is a valid one - no
+@@ -5860,93 +5771,103 @@
+              */
+ 
+             (yyval.value).vtype = scoped_value;
+-            (yyval.value).u.vscp = (yyvsp[(1) - (1)].scpvalp);
++            (yyval.value).u.vscp = (yyvsp[0].scpvalp);
+         }
++#line 5777 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 356:
+-#line 2884 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2884 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             fcallDef *fcd;
+ 
+             fcd = sipMalloc(sizeof (fcallDef));
+-            *fcd = (yyvsp[(3) - (4)].fcall);
+-            fcd -> type = (yyvsp[(1) - (4)].memArg);
++            *fcd = (yyvsp[-1].fcall);
++            fcd -> type = (yyvsp[-3].memArg);
+ 
+             (yyval.value).vtype = fcall_value;
+             (yyval.value).u.fcd = fcd;
+         }
++#line 5792 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 357:
+-#line 2894 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2894 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.value).vtype = real_value;
+-            (yyval.value).u.vreal = (yyvsp[(1) - (1)].real);
++            (yyval.value).u.vreal = (yyvsp[0].real);
+         }
++#line 5801 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 358:
+-#line 2898 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2898 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.value).vtype = numeric_value;
+-            (yyval.value).u.vnum = (yyvsp[(1) - (1)].number);
++            (yyval.value).u.vnum = (yyvsp[0].number);
+         }
++#line 5810 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 359:
+-#line 2902 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2902 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.value).vtype = numeric_value;
+-            (yyval.value).u.vnum = (yyvsp[(1) - (1)].boolean);
++            (yyval.value).u.vnum = (yyvsp[0].boolean);
+         }
++#line 5819 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 360:
+-#line 2906 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2906 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.value).vtype = numeric_value;
+             (yyval.value).u.vnum = 0;
+         }
++#line 5828 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 361:
+-#line 2910 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2910 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.value).vtype = string_value;
+-            (yyval.value).u.vstr = (yyvsp[(1) - (1)].text);
++            (yyval.value).u.vstr = (yyvsp[0].text);
+         }
++#line 5837 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 362:
+-#line 2914 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2914 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.value).vtype = qchar_value;
+-            (yyval.value).u.vqchar = (yyvsp[(1) - (1)].qchar);
++            (yyval.value).u.vqchar = (yyvsp[0].qchar);
+         }
++#line 5846 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 363:
+-#line 2920 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2920 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             /* No values. */
+ 
+             (yyval.fcall).nrArgs = 0;
+         }
++#line 5856 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 364:
+-#line 2925 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2925 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             /* The single or first expression. */
+ 
+-            (yyval.fcall).args[0] = (yyvsp[(1) - (1)].valp);
++            (yyval.fcall).args[0] = (yyvsp[0].valp);
+             (yyval.fcall).nrArgs = 1;
+         }
++#line 5867 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 365:
+-#line 2931 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2931 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             /* Check that it wasn't ...(,expression...). */
+ 
+@@ -5955,18 +5876,19 @@
+ 
+             /* Check there is room. */
+ 
+-            if ((yyvsp[(1) - (3)].fcall).nrArgs == MAX_NR_ARGS)
++            if ((yyvsp[-2].fcall).nrArgs == MAX_NR_ARGS)
+                 yyerror("Internal error - increase the value of MAX_NR_ARGS");
+ 
+-            (yyval.fcall) = (yyvsp[(1) - (3)].fcall);
++            (yyval.fcall) = (yyvsp[-2].fcall);
+ 
+-            (yyval.fcall).args[(yyval.fcall).nrArgs] = (yyvsp[(3) - (3)].valp);
++            (yyval.fcall).args[(yyval.fcall).nrArgs] = (yyvsp[0].valp);
+             (yyval.fcall).nrArgs++;
+         }
++#line 5888 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 366:
+-#line 2949 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2949 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+@@ -5983,16 +5905,17 @@
+                     NULL
+                 };
+ 
+-                checkAnnos(&(yyvsp[(4) - (6)].optflags), annos);
++                checkAnnos(&(yyvsp[-2].optflags), annos);
+ 
+-                applyTypeFlags(currentModule, &(yyvsp[(2) - (6)].memArg), &(yyvsp[(4) - (6)].optflags));
+-                newTypedef(currentSpec, currentModule, (yyvsp[(3) - (6)].text), &(yyvsp[(2) - (6)].memArg), &(yyvsp[(4) - (6)].optflags), (yyvsp[(6) - (6)].docstr));
++                applyTypeFlags(currentModule, &(yyvsp[-4].memArg), &(yyvsp[-2].optflags));
++                newTypedef(currentSpec, currentModule, (yyvsp[-3].text), &(yyvsp[-4].memArg), &(yyvsp[-2].optflags), (yyvsp[0].docstr));
+             }
+         }
++#line 5915 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 367:
+-#line 2971 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 2971 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+@@ -6011,40 +5934,42 @@
+                 signatureDef *sig;
+                 argDef ftype;
+ 
+-                checkAnnos(&(yyvsp[(10) - (12)].optflags), annos);
++                checkAnnos(&(yyvsp[-2].optflags), annos);
+ 
+-                applyTypeFlags(currentModule, &(yyvsp[(2) - (12)].memArg), &(yyvsp[(10) - (12)].optflags));
++                applyTypeFlags(currentModule, &(yyvsp[-10].memArg), &(yyvsp[-2].optflags));
+ 
+                 memset(&ftype, 0, sizeof (argDef));
+ 
+                 /* Create the full signature on the heap. */
+                 sig = sipMalloc(sizeof (signatureDef));
+-                *sig = (yyvsp[(8) - (12)].signature);
+-                sig->result = (yyvsp[(2) - (12)].memArg);
++                *sig = (yyvsp[-4].signature);
++                sig->result = (yyvsp[-10].memArg);
+ 
+                 /* Create the full type. */
+                 ftype.atype = function_type;
+                 ftype.nrderefs = 1;
+                 ftype.u.sa = sig;
+ 
+-                newTypedef(currentSpec, currentModule, (yyvsp[(5) - (12)].text), &ftype, &(yyvsp[(10) - (12)].optflags), (yyvsp[(12) - (12)].docstr));
++                newTypedef(currentSpec, currentModule, (yyvsp[-7].text), &ftype, &(yyvsp[-2].optflags), (yyvsp[0].docstr));
+             }
+         }
++#line 5957 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 368:
+-#line 3010 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3010 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            if (currentSpec -> genc && (yyvsp[(2) - (2)].scpvalp)->next != NULL)
++            if (currentSpec -> genc && (yyvsp[0].scpvalp)->next != NULL)
+                 yyerror("Namespaces not allowed in a C module");
+ 
+             if (notSkipping())
+                 currentSupers = NULL;
+         }
++#line 5969 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 369:
+-#line 3016 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3016 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+@@ -6074,32 +5999,35 @@
+                     NULL
+                 };
+ 
+-                checkAnnos(&(yyvsp[(5) - (5)].optflags), annos);
++                checkAnnos(&(yyvsp[0].optflags), annos);
+ 
+                 if (currentSpec->genc && currentSupers != NULL)
+                     yyerror("Super-classes not allowed in a C module struct");
+ 
+-                defineClass((yyvsp[(2) - (5)].scpvalp), currentSupers, &(yyvsp[(5) - (5)].optflags));
++                defineClass((yyvsp[-3].scpvalp), currentSupers, &(yyvsp[0].optflags));
+                 sectionFlags = SECT_IS_PUBLIC;
+             }
+         }
++#line 6012 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 370:
+-#line 3053 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3053 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+-                completeClass((yyvsp[(2) - (8)].scpvalp), &(yyvsp[(5) - (8)].optflags), (yyvsp[(7) - (8)].boolean));
++                completeClass((yyvsp[-6].scpvalp), &(yyvsp[-3].optflags), (yyvsp[-1].boolean));
+         }
++#line 6021 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 371:
+-#line 3059 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3059 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {currentIsTemplate = TRUE;}
++#line 6027 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 372:
+-#line 3059 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3059 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (currentSpec->genc)
+                 yyerror("Class templates not allowed in a C module");
+@@ -6111,12 +6039,12 @@
+                 /*
+                  * Make sure there is room for the extra class name argument.
+                  */
+-                if ((yyvsp[(1) - (3)].signature).nrArgs == MAX_NR_ARGS)
++                if ((yyvsp[-2].signature).nrArgs == MAX_NR_ARGS)
+                     yyerror("Internal error - increase the value of MAX_NR_ARGS");
+ 
+                 tcd = sipMalloc(sizeof (classTmplDef));
+-                tcd->sig = (yyvsp[(1) - (3)].signature);
+-                tcd->cd = (yyvsp[(3) - (3)].klass);
++                tcd->sig = (yyvsp[-2].signature);
++                tcd->cd = (yyvsp[0].klass);
+                 tcd->next = currentSpec->classtemplates;
+ 
+                 currentSpec->classtemplates = tcd;
+@@ -6124,17 +6052,19 @@
+ 
+             currentIsTemplate = FALSE;
+         }
++#line 6056 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 373:
+-#line 3085 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3085 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.signature) = (yyvsp[(3) - (4)].signature);
++            (yyval.signature) = (yyvsp[-1].signature);
+         }
++#line 6064 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 374:
+-#line 3090 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3090 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (currentSpec->genc)
+                 yyerror("Class definition not allowed in a C module");
+@@ -6142,10 +6072,11 @@
+             if (notSkipping())
+                 currentSupers = NULL;
+         }
++#line 6076 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 375:
+-#line 3096 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3096 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+@@ -6174,30 +6105,32 @@
+                     NULL
+                 };
+ 
+-                checkAnnos(&(yyvsp[(5) - (5)].optflags), annos);
++                checkAnnos(&(yyvsp[0].optflags), annos);
+ 
+-                defineClass((yyvsp[(2) - (5)].scpvalp), currentSupers, &(yyvsp[(5) - (5)].optflags));
++                defineClass((yyvsp[-3].scpvalp), currentSupers, &(yyvsp[0].optflags));
+                 sectionFlags = SECT_IS_PRIVATE;
+             }
+         }
++#line 6115 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 376:
+-#line 3129 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3129 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+-                (yyval.klass) = completeClass((yyvsp[(2) - (8)].scpvalp), &(yyvsp[(5) - (8)].optflags), (yyvsp[(7) - (8)].boolean));
++                (yyval.klass) = completeClass((yyvsp[-6].scpvalp), &(yyvsp[-3].optflags), (yyvsp[-1].boolean));
+         }
++#line 6124 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 381:
+-#line 3143 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3143 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            if (notSkipping() && (yyvsp[(1) - (2)].token) == TK_PUBLIC)
++            if (notSkipping() && (yyvsp[-1].token) == TK_PUBLIC)
+             {
+                 argDef ad;
+                 classDef *super;
+-                scopedNameDef *snd = (yyvsp[(2) - (2)].scpvalp);
++                scopedNameDef *snd = (yyvsp[0].scpvalp);
+ 
+                 /*
+                  * This is a hack to allow typedef'ed classes to be used before
+@@ -6242,52 +6175,59 @@
+                 appendToClassList(&currentSupers, super);
+             }
+         }
++#line 6179 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 382:
+-#line 3195 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3195 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+         (yyval.token) = TK_PUBLIC;
+         }
++#line 6187 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 383:
+-#line 3198 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3198 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+         (yyval.token) = TK_PUBLIC;
+         }
++#line 6195 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 384:
+-#line 3201 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3201 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+         (yyval.token) = TK_PROTECTED;
+         }
++#line 6203 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 385:
+-#line 3204 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3204 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+         (yyval.token) = TK_PRIVATE;
+         }
++#line 6211 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 386:
+-#line 3209 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3209 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.boolean) = FALSE;
+         }
++#line 6219 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 387:
+-#line 3212 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3212 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.boolean) = TRUE;
+         }
++#line 6227 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 401:
+-#line 3232 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3232 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+@@ -6296,29 +6236,32 @@
+                 if (scope->docstring != NULL)
+                     yyerror("%Docstring already given for class");
+ 
+-                scope->docstring = (yyvsp[(1) - (1)].docstr);
++                scope->docstring = (yyvsp[0].docstr);
+             }
+         }
++#line 6243 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 402:
+-#line 3243 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3243 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+-                appendCodeBlock(&currentScope()->cppcode, (yyvsp[(1) - (1)].codeb));
++                appendCodeBlock(&currentScope()->cppcode, (yyvsp[0].codeb));
+         }
++#line 6252 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 403:
+-#line 3247 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3247 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+-                appendCodeBlock(&currentScope()->iff->hdrcode, (yyvsp[(1) - (1)].codeb));
++                appendCodeBlock(&currentScope()->iff->hdrcode, (yyvsp[0].codeb));
+         }
++#line 6261 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 404:
+-#line 3251 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3251 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+@@ -6327,13 +6270,14 @@
+                 if (scope->travcode != NULL)
+                     yyerror("%GCTraverseCode already given for class");
+ 
+-                appendCodeBlock(&scope->travcode, (yyvsp[(1) - (1)].codeb));
++                appendCodeBlock(&scope->travcode, (yyvsp[0].codeb));
+             }
+         }
++#line 6277 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 405:
+-#line 3262 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3262 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+@@ -6342,13 +6286,14 @@
+                 if (scope->clearcode != NULL)
+                     yyerror("%GCClearCode already given for class");
+ 
+-                appendCodeBlock(&scope->clearcode, (yyvsp[(1) - (1)].codeb));
++                appendCodeBlock(&scope->clearcode, (yyvsp[0].codeb));
+             }
+         }
++#line 6293 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 406:
+-#line 3273 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3273 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+@@ -6357,13 +6302,14 @@
+                 if (scope->getbufcode != NULL)
+                     yyerror("%BIGetBufferCode already given for class");
+ 
+-                appendCodeBlock(&scope->getbufcode, (yyvsp[(1) - (1)].codeb));
++                appendCodeBlock(&scope->getbufcode, (yyvsp[0].codeb));
+             }
+         }
++#line 6309 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 407:
+-#line 3284 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3284 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+@@ -6372,13 +6318,14 @@
+                 if (scope->releasebufcode != NULL)
+                     yyerror("%BIReleaseBufferCode already given for class");
+ 
+-                appendCodeBlock(&scope->releasebufcode, (yyvsp[(1) - (1)].codeb));
++                appendCodeBlock(&scope->releasebufcode, (yyvsp[0].codeb));
+             }
+         }
++#line 6325 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 408:
+-#line 3295 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3295 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+@@ -6387,13 +6334,14 @@
+                 if (scope->readbufcode != NULL)
+                     yyerror("%BIGetReadBufferCode already given for class");
+ 
+-                appendCodeBlock(&scope->readbufcode, (yyvsp[(1) - (1)].codeb));
++                appendCodeBlock(&scope->readbufcode, (yyvsp[0].codeb));
+             }
+         }
++#line 6341 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 409:
+-#line 3306 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3306 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+@@ -6402,13 +6350,14 @@
+                 if (scope->writebufcode != NULL)
+                     yyerror("%BIGetWriteBufferCode already given for class");
+ 
+-                appendCodeBlock(&scope->writebufcode, (yyvsp[(1) - (1)].codeb));
++                appendCodeBlock(&scope->writebufcode, (yyvsp[0].codeb));
+             }
+         }
++#line 6357 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 410:
+-#line 3317 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3317 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+@@ -6417,13 +6366,14 @@
+                 if (scope->segcountcode != NULL)
+                     yyerror("%BIGetSegCountCode already given for class");
+ 
+-                appendCodeBlock(&scope->segcountcode, (yyvsp[(1) - (1)].codeb));
++                appendCodeBlock(&scope->segcountcode, (yyvsp[0].codeb));
+             }
+         }
++#line 6373 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 411:
+-#line 3328 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3328 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+@@ -6432,13 +6382,14 @@
+                 if (scope->charbufcode != NULL)
+                     yyerror("%BIGetCharBufferCode already given for class");
+ 
+-                appendCodeBlock(&scope->charbufcode, (yyvsp[(1) - (1)].codeb));
++                appendCodeBlock(&scope->charbufcode, (yyvsp[0].codeb));
+             }
+         }
++#line 6389 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 412:
+-#line 3339 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3339 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+@@ -6447,13 +6398,14 @@
+                 if (scope->instancecode != NULL)
+                     yyerror("%InstanceCode already given for class");
+ 
+-                appendCodeBlock(&scope->instancecode, (yyvsp[(1) - (1)].codeb));
++                appendCodeBlock(&scope->instancecode, (yyvsp[0].codeb));
+             }
+         }
++#line 6405 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 413:
+-#line 3350 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3350 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+@@ -6462,13 +6414,14 @@
+                 if (scope->picklecode != NULL)
+                     yyerror("%PickleCode already given for class");
+ 
+-                appendCodeBlock(&scope->picklecode, (yyvsp[(1) - (1)].codeb));
++                appendCodeBlock(&scope->picklecode, (yyvsp[0].codeb));
+             }
+         }
++#line 6421 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 414:
+-#line 3361 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3361 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+@@ -6477,13 +6430,14 @@
+                 if (scope->finalcode != NULL)
+                     yyerror("%FinalisationCode already given for class");
+ 
+-                appendCodeBlock(&scope->finalcode, (yyvsp[(1) - (1)].codeb));
++                appendCodeBlock(&scope->finalcode, (yyvsp[0].codeb));
+             }
+         }
++#line 6437 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 415:
+-#line 3372 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3372 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+@@ -6492,13 +6446,14 @@
+                 if (scope->typehintcode != NULL)
+                     yyerror("%TypeHintCode already given for class");
+ 
+-                appendCodeBlock(&scope->typehintcode, (yyvsp[(1) - (1)].codeb));
++                appendCodeBlock(&scope->typehintcode, (yyvsp[0].codeb));
+             }
+         }
++#line 6453 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 419:
+-#line 3386 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3386 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+@@ -6507,13 +6462,14 @@
+                 if (scope->convtosubcode != NULL)
+                     yyerror("Class has more than one %ConvertToSubClassCode directive");
+ 
+-                appendCodeBlock(&scope->convtosubcode, (yyvsp[(2) - (2)].codeb));
++                appendCodeBlock(&scope->convtosubcode, (yyvsp[0].codeb));
+             }
+         }
++#line 6469 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 420:
+-#line 3397 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3397 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+@@ -6522,13 +6478,14 @@
+                 if (scope->convtocode != NULL)
+                     yyerror("Class has more than one %ConvertToTypeCode directive");
+ 
+-                appendCodeBlock(&scope->convtocode, (yyvsp[(2) - (2)].codeb));
++                appendCodeBlock(&scope->convtocode, (yyvsp[0].codeb));
+             }
+         }
++#line 6485 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 421:
+-#line 3408 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3408 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+@@ -6537,46 +6494,50 @@
+                 if (scope->convfromcode != NULL)
+                     yyerror("Class has more than one %ConvertFromTypeCode directive");
+ 
+-                appendCodeBlock(&scope->convfromcode, (yyvsp[(2) - (2)].codeb));
++                appendCodeBlock(&scope->convfromcode, (yyvsp[0].codeb));
+             }
+         }
++#line 6501 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 422:
+-#line 3419 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3419 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (currentSpec -> genc)
+                 yyerror("public section not allowed in a C module");
+ 
+             if (notSkipping())
+-                sectionFlags = SECT_IS_PUBLIC | (yyvsp[(2) - (3)].number);
++                sectionFlags = SECT_IS_PUBLIC | (yyvsp[-1].number);
+         }
++#line 6513 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 423:
+-#line 3426 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3426 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (currentSpec -> genc)
+                 yyerror("protected section not allowed in a C module");
+ 
+             if (notSkipping())
+-                sectionFlags = SECT_IS_PROT | (yyvsp[(2) - (3)].number);
++                sectionFlags = SECT_IS_PROT | (yyvsp[-1].number);
+         }
++#line 6525 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 424:
+-#line 3433 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3433 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (currentSpec -> genc)
+                 yyerror("private section not allowed in a C module");
+ 
+             if (notSkipping())
+-                sectionFlags = SECT_IS_PRIVATE | (yyvsp[(2) - (3)].number);
++                sectionFlags = SECT_IS_PRIVATE | (yyvsp[-1].number);
+         }
++#line 6537 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 425:
+-#line 3440 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3440 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (currentSpec -> genc)
+                 yyerror("signals section not allowed in a C module");
+@@ -6584,125 +6545,137 @@
+             if (notSkipping())
+                 sectionFlags = SECT_IS_SIGNAL;
+         }
++#line 6549 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 426:
+-#line 3449 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3449 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            if ((yyvsp[(2) - (3)].property).name == NULL)
++            if ((yyvsp[-1].property).name == NULL)
+                 yyerror("A %Property directive must have a 'name' argument");
+ 
+-            if ((yyvsp[(2) - (3)].property).get == NULL)
++            if ((yyvsp[-1].property).get == NULL)
+                 yyerror("A %Property directive must have a 'get' argument");
+ 
+             if (notSkipping())
+                 addProperty(currentSpec, currentModule, currentScope(),
+-                        (yyvsp[(2) - (3)].property).name, (yyvsp[(2) - (3)].property).get, (yyvsp[(2) - (3)].property).set, (yyvsp[(3) - (3)].property).docstring);
++                        (yyvsp[-1].property).name, (yyvsp[-1].property).get, (yyvsp[-1].property).set, (yyvsp[0].property).docstring);
+         }
++#line 6565 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 427:
+-#line 3462 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3462 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.property) = (yyvsp[(2) - (3)].property);
++            (yyval.property) = (yyvsp[-1].property);
+         }
++#line 6573 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 429:
+-#line 3468 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3468 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.property) = (yyvsp[(1) - (3)].property);
++            (yyval.property) = (yyvsp[-2].property);
+ 
+-            switch ((yyvsp[(3) - (3)].property).token)
++            switch ((yyvsp[0].property).token)
+             {
+-            case TK_GET: (yyval.property).get = (yyvsp[(3) - (3)].property).get; break;
+-            case TK_NAME: (yyval.property).name = (yyvsp[(3) - (3)].property).name; break;
+-            case TK_SET: (yyval.property).set = (yyvsp[(3) - (3)].property).set; break;
++            case TK_GET: (yyval.property).get = (yyvsp[0].property).get; break;
++            case TK_NAME: (yyval.property).name = (yyvsp[0].property).name; break;
++            case TK_SET: (yyval.property).set = (yyvsp[0].property).set; break;
+             }
+         }
++#line 6588 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 430:
+-#line 3480 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3480 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.property).token = TK_GET;
+ 
+-            (yyval.property).get = (yyvsp[(3) - (3)].text);
++            (yyval.property).get = (yyvsp[0].text);
+             (yyval.property).name = NULL;
+             (yyval.property).set = NULL;
+         }
++#line 6600 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 431:
+-#line 3487 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3487 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.property).token = TK_NAME;
+ 
+             (yyval.property).get = NULL;
+-            (yyval.property).name = (yyvsp[(3) - (3)].text);
++            (yyval.property).name = (yyvsp[0].text);
+             (yyval.property).set = NULL;
+         }
++#line 6612 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 432:
+-#line 3494 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3494 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.property).token = TK_SET;
+ 
+             (yyval.property).get = NULL;
+             (yyval.property).name = NULL;
+-            (yyval.property).set = (yyvsp[(3) - (3)].text);
++            (yyval.property).set = (yyvsp[0].text);
+         }
++#line 6624 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 433:
+-#line 3503 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3503 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.property).token = 0;
+             (yyval.property).docstring = NULL;
+         }
++#line 6633 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 434:
+-#line 3507 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3507 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.property) = (yyvsp[(2) - (4)].property);
++            (yyval.property) = (yyvsp[-2].property);
+         }
++#line 6641 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 436:
+-#line 3513 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3513 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.property) = (yyvsp[(1) - (2)].property);
++            (yyval.property) = (yyvsp[-1].property);
+ 
+-            switch ((yyvsp[(2) - (2)].property).token)
++            switch ((yyvsp[0].property).token)
+             {
+-            case TK_DOCSTRING: (yyval.property).docstring = (yyvsp[(2) - (2)].property).docstring; break;
++            case TK_DOCSTRING: (yyval.property).docstring = (yyvsp[0].property).docstring; break;
+             }
+         }
++#line 6654 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 437:
+-#line 3523 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3523 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.property).token = TK_IF;
+         }
++#line 6662 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 438:
+-#line 3526 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3526 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.property).token = TK_END;
+         }
++#line 6670 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 439:
+-#line 3529 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3529 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+                 (yyval.property).token = TK_DOCSTRING;
+-                (yyval.property).docstring = (yyvsp[(1) - (1)].docstr);
++                (yyval.property).docstring = (yyvsp[0].docstr);
+             }
+             else
+             {
+@@ -6710,24 +6683,27 @@
+                 (yyval.property).docstring = NULL;
+             }
+         }
++#line 6687 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 442:
+-#line 3547 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3547 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.number) = 0;
+         }
++#line 6695 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 443:
+-#line 3550 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3550 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.number) = SECT_IS_SLOT;
+         }
++#line 6703 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 444:
+-#line 3555 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3555 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             /* Note that we allow non-virtual dtors in C modules. */
+ 
+@@ -6741,22 +6717,22 @@
+ 
+                 classDef *cd = currentScope();
+ 
+-                checkAnnos(&(yyvsp[(8) - (12)].optflags), annos);
++                checkAnnos(&(yyvsp[-4].optflags), annos);
+ 
+-                if (strcmp(classBaseName(cd),(yyvsp[(3) - (12)].text)) != 0)
++                if (strcmp(classBaseName(cd),(yyvsp[-9].text)) != 0)
+                     yyerror("Destructor doesn't have the same name as its class");
+ 
+                 if (isDtor(cd))
+                     yyerror("Destructor has already been defined");
+ 
+-                if (currentSpec -> genc && (yyvsp[(10) - (12)].codeb) == NULL)
++                if (currentSpec -> genc && (yyvsp[-2].codeb) == NULL)
+                     yyerror("Destructor in C modules must include %MethodCode");
+ 
+ 
+-                appendCodeBlock(&cd->dealloccode, (yyvsp[(10) - (12)].codeb)); /* premethodcode */
+-                appendCodeBlock(&cd->dealloccode, (yyvsp[(11) - (12)].codeb)); /* methodcode */
+-                appendCodeBlock(&cd->dtorcode, (yyvsp[(12) - (12)].codeb));
+-                cd -> dtorexceptions = (yyvsp[(6) - (12)].throwlist);
++                appendCodeBlock(&cd->dealloccode, (yyvsp[-2].codeb)); /* premethodcode */
++                appendCodeBlock(&cd->dealloccode, (yyvsp[-1].codeb)); /* methodcode */
++                appendCodeBlock(&cd->dtorcode, (yyvsp[0].codeb));
++                cd -> dtorexceptions = (yyvsp[-6].throwlist);
+ 
+                 /*
+                  * Note that we don't apply the protected/public hack to dtors
+@@ -6764,9 +6740,9 @@
+                  */
+                 cd->classflags |= sectionFlags;
+ 
+-                if ((yyvsp[(7) - (12)].number))
++                if ((yyvsp[-5].number))
+                 {
+-                    if (!(yyvsp[(1) - (12)].number))
++                    if (!(yyvsp[-11].number))
+                         yyerror("Abstract destructor must be virtual");
+ 
+                     setIsAbstractClass(cd);
+@@ -6776,7 +6752,7 @@
+                  * The class has a shadow if we have a virtual dtor or some
+                  * dtor code.
+                  */
+-                if ((yyvsp[(1) - (12)].number) || (yyvsp[(11) - (12)].codeb) != NULL)
++                if ((yyvsp[-11].number) || (yyvsp[-1].codeb) != NULL)
+                 {
+                     if (currentSpec -> genc)
+                         yyerror("Virtual destructor or %VirtualCatcherCode not allowed in a C module");
+@@ -6784,21 +6760,23 @@
+                     setNeedsShadow(cd);
+                 }
+ 
+-                if (getReleaseGIL(&(yyvsp[(8) - (12)].optflags)))
++                if (getReleaseGIL(&(yyvsp[-4].optflags)))
+                     setIsReleaseGILDtor(cd);
+-                else if (getHoldGIL(&(yyvsp[(8) - (12)].optflags)))
++                else if (getHoldGIL(&(yyvsp[-4].optflags)))
+                     setIsHoldGILDtor(cd);
+             }
+         }
++#line 6770 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 445:
+-#line 3619 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3619 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {currentCtorIsExplicit = TRUE;}
++#line 6776 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 448:
+-#line 3623 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3623 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             /* Note that we allow ctors in C modules. */
+ 
+@@ -6821,11 +6799,11 @@
+                     NULL
+                 };
+ 
+-                checkAnnos(&(yyvsp[(6) - (11)].optflags), annos);
++                checkAnnos(&(yyvsp[-5].optflags), annos);
+ 
+                 if (currentSpec -> genc)
+                 {
+-                    if ((yyvsp[(10) - (11)].codeb) == NULL && (yyvsp[(3) - (11)].signature).nrArgs != 0)
++                    if ((yyvsp[-1].codeb) == NULL && (yyvsp[-8].signature).nrArgs != 0)
+                         yyerror("Constructors with arguments in C modules must include %MethodCode");
+ 
+                     if (currentCtorIsExplicit)
+@@ -6835,94 +6813,103 @@
+                 if ((sectionFlags & (SECT_IS_PUBLIC | SECT_IS_PROT | SECT_IS_PRIVATE)) == 0)
+                     yyerror("Constructor must be in the public, private or protected sections");
+ 
+-                newCtor(currentModule, (yyvsp[(1) - (11)].text), sectionFlags, &(yyvsp[(3) - (11)].signature), &(yyvsp[(6) - (11)].optflags), (yyvsp[(11) - (11)].codeb), (yyvsp[(5) - (11)].throwlist), (yyvsp[(7) - (11)].optsignature),
+-                        currentCtorIsExplicit, (yyvsp[(9) - (11)].docstr), (yyvsp[(10) - (11)].codeb));
++                newCtor(currentModule, (yyvsp[-10].text), sectionFlags, &(yyvsp[-8].signature), &(yyvsp[-5].optflags), (yyvsp[0].codeb), (yyvsp[-6].throwlist), (yyvsp[-4].optsignature),
++                        currentCtorIsExplicit, (yyvsp[-2].docstr), (yyvsp[-1].codeb));
+             }
+ 
+-            free((yyvsp[(1) - (11)].text));
++            free((yyvsp[-10].text));
+ 
+             currentCtorIsExplicit = FALSE;
+         }
++#line 6825 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 449:
+-#line 3669 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3669 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.optsignature) = NULL;
+         }
++#line 6833 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 450:
+-#line 3672 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3672 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             parsingCSignature = TRUE;
+         }
++#line 6841 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 451:
+-#line 3674 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3674 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.optsignature) = sipMalloc(sizeof (signatureDef));
+ 
+-            *(yyval.optsignature) = (yyvsp[(4) - (6)].signature);
++            *(yyval.optsignature) = (yyvsp[-2].signature);
+ 
+             parsingCSignature = FALSE;
+         }
++#line 6853 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 452:
+-#line 3683 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3683 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.optsignature) = NULL;
+         }
++#line 6861 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 453:
+-#line 3686 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3686 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             parsingCSignature = TRUE;
+         }
++#line 6869 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 454:
+-#line 3688 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3688 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.optsignature) = sipMalloc(sizeof (signatureDef));
+ 
+-            *(yyval.optsignature) = (yyvsp[(5) - (7)].signature);
+-            (yyval.optsignature)->result = (yyvsp[(3) - (7)].memArg);
++            *(yyval.optsignature) = (yyvsp[-2].signature);
++            (yyval.optsignature)->result = (yyvsp[-4].memArg);
+ 
+             parsingCSignature = FALSE;
+         }
++#line 6882 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 455:
+-#line 3698 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3698 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.number) = FALSE;
+         }
++#line 6890 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 456:
+-#line 3701 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3701 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.number) = TRUE;
+         }
++#line 6898 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 457:
+-#line 3706 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3706 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+-                applyTypeFlags(currentModule, &(yyvsp[(1) - (17)].memArg), &(yyvsp[(10) - (17)].optflags));
++                applyTypeFlags(currentModule, &(yyvsp[-16].memArg), &(yyvsp[-7].optflags));
+ 
+-                (yyvsp[(4) - (17)].signature).result = (yyvsp[(1) - (17)].memArg);
++                (yyvsp[-13].signature).result = (yyvsp[-16].memArg);
+ 
+                 newFunction(currentSpec, currentModule, currentScope(), NULL,
+                         NULL, sectionFlags, currentIsStatic, currentIsSignal,
+-                        currentIsSlot, currentOverIsVirt, (yyvsp[(2) - (17)].text), &(yyvsp[(4) - (17)].signature), (yyvsp[(6) - (17)].number), (yyvsp[(9) - (17)].number),
+-                        &(yyvsp[(10) - (17)].optflags), (yyvsp[(15) - (17)].codeb), (yyvsp[(16) - (17)].codeb), (yyvsp[(17) - (17)].codeb), (yyvsp[(8) - (17)].throwlist), (yyvsp[(11) - (17)].optsignature), (yyvsp[(13) - (17)].docstr), (yyvsp[(7) - (17)].number), (yyvsp[(14) - (17)].codeb));
++                        currentIsSlot, currentOverIsVirt, (yyvsp[-15].text), &(yyvsp[-13].signature), (yyvsp[-11].number), (yyvsp[-8].number),
++                        &(yyvsp[-7].optflags), (yyvsp[-2].codeb), (yyvsp[-1].codeb), (yyvsp[0].codeb), (yyvsp[-9].throwlist), (yyvsp[-6].optsignature), (yyvsp[-4].docstr), (yyvsp[-10].number), (yyvsp[-3].codeb));
+             }
+ 
+             currentIsStatic = FALSE;
+@@ -6930,10 +6917,11 @@
+             currentIsSlot = FALSE;
+             currentOverIsVirt = FALSE;
+         }
++#line 6921 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 458:
+-#line 3724 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3724 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             /*
+              * It looks like an assignment operator (though we don't bother to
+@@ -6954,10 +6942,11 @@
+             currentIsSlot = FALSE;
+             currentOverIsVirt = FALSE;
+         }
++#line 6946 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 459:
+-#line 3744 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3744 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+@@ -6978,23 +6967,23 @@
+                     ns_scope = NULL;
+                 }
+ 
+-                applyTypeFlags(currentModule, &(yyvsp[(1) - (17)].memArg), &(yyvsp[(11) - (17)].optflags));
++                applyTypeFlags(currentModule, &(yyvsp[-16].memArg), &(yyvsp[-6].optflags));
+ 
+                 /* Handle the unary '+' and '-' operators. */
+-                if ((cd != NULL && (yyvsp[(5) - (17)].signature).nrArgs == 0) || (cd == NULL && (yyvsp[(5) - (17)].signature).nrArgs == 1))
++                if ((cd != NULL && (yyvsp[-12].signature).nrArgs == 0) || (cd == NULL && (yyvsp[-12].signature).nrArgs == 1))
+                 {
+-                    if (strcmp((yyvsp[(3) - (17)].text), "__add__") == 0)
+-                        (yyvsp[(3) - (17)].text) = "__pos__";
+-                    else if (strcmp((yyvsp[(3) - (17)].text), "__sub__") == 0)
+-                        (yyvsp[(3) - (17)].text) = "__neg__";
++                    if (strcmp((yyvsp[-14].text), "__add__") == 0)
++                        (yyvsp[-14].text) = "__pos__";
++                    else if (strcmp((yyvsp[-14].text), "__sub__") == 0)
++                        (yyvsp[-14].text) = "__neg__";
+                 }
+ 
+-                (yyvsp[(5) - (17)].signature).result = (yyvsp[(1) - (17)].memArg);
++                (yyvsp[-12].signature).result = (yyvsp[-16].memArg);
+ 
+                 newFunction(currentSpec, currentModule, cd, ns_scope, NULL,
+                         sectionFlags, currentIsStatic, currentIsSignal,
+-                        currentIsSlot, currentOverIsVirt, (yyvsp[(3) - (17)].text), &(yyvsp[(5) - (17)].signature), (yyvsp[(7) - (17)].number), (yyvsp[(10) - (17)].number),
+-                        &(yyvsp[(11) - (17)].optflags), (yyvsp[(15) - (17)].codeb), (yyvsp[(16) - (17)].codeb), (yyvsp[(17) - (17)].codeb), (yyvsp[(9) - (17)].throwlist), (yyvsp[(12) - (17)].optsignature), NULL, (yyvsp[(8) - (17)].number), (yyvsp[(14) - (17)].codeb));
++                        currentIsSlot, currentOverIsVirt, (yyvsp[-14].text), &(yyvsp[-12].signature), (yyvsp[-10].number), (yyvsp[-7].number),
++                        &(yyvsp[-6].optflags), (yyvsp[-2].codeb), (yyvsp[-1].codeb), (yyvsp[0].codeb), (yyvsp[-8].throwlist), (yyvsp[-5].optsignature), NULL, (yyvsp[-9].number), (yyvsp[-3].codeb));
+             }
+ 
+             currentIsStatic = FALSE;
+@@ -7002,22 +6991,23 @@
+             currentIsSlot = FALSE;
+             currentOverIsVirt = FALSE;
+         }
++#line 6995 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 460:
+-#line 3788 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3788 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+                 char *sname;
+                 classDef *scope = currentScope();
+ 
+-                if (scope == NULL || (yyvsp[(4) - (16)].signature).nrArgs != 0)
++                if (scope == NULL || (yyvsp[-12].signature).nrArgs != 0)
+                     yyerror("Operator casts must be specified in a class and have no arguments");
+ 
+-                applyTypeFlags(currentModule, &(yyvsp[(2) - (16)].memArg), &(yyvsp[(10) - (16)].optflags));
++                applyTypeFlags(currentModule, &(yyvsp[-14].memArg), &(yyvsp[-6].optflags));
+ 
+-                switch ((yyvsp[(2) - (16)].memArg).atype)
++                switch ((yyvsp[-14].memArg).atype)
+                 {
+                 case defined_type:
+                     sname = NULL;
+@@ -7056,12 +7046,12 @@
+ 
+                 if (sname != NULL)
+                 {
+-                    (yyvsp[(4) - (16)].signature).result = (yyvsp[(2) - (16)].memArg);
++                    (yyvsp[-12].signature).result = (yyvsp[-14].memArg);
+ 
+                     newFunction(currentSpec, currentModule, scope, NULL, NULL,
+                             sectionFlags, currentIsStatic, currentIsSignal,
+-                            currentIsSlot, currentOverIsVirt, sname, &(yyvsp[(4) - (16)].signature), (yyvsp[(6) - (16)].number),
+-                            (yyvsp[(9) - (16)].number), &(yyvsp[(10) - (16)].optflags), (yyvsp[(14) - (16)].codeb), (yyvsp[(15) - (16)].codeb), (yyvsp[(16) - (16)].codeb), (yyvsp[(8) - (16)].throwlist), (yyvsp[(11) - (16)].optsignature), NULL, (yyvsp[(7) - (16)].number), (yyvsp[(13) - (16)].codeb));
++                            currentIsSlot, currentOverIsVirt, sname, &(yyvsp[-12].signature), (yyvsp[-10].number),
++                            (yyvsp[-7].number), &(yyvsp[-6].optflags), (yyvsp[-2].codeb), (yyvsp[-1].codeb), (yyvsp[0].codeb), (yyvsp[-8].throwlist), (yyvsp[-5].optsignature), NULL, (yyvsp[-9].number), (yyvsp[-3].codeb));
+                 }
+                 else
+                 {
+@@ -7069,11 +7059,11 @@
+ 
+                     /* Check it doesn't already exist. */
+                     for (al = scope->casts; al != NULL; al = al->next)
+-                        if (compareScopedNames((yyvsp[(2) - (16)].memArg).u.snd, al->arg.u.snd) == 0)
++                        if (compareScopedNames((yyvsp[-14].memArg).u.snd, al->arg.u.snd) == 0)
+                             yyerror("This operator cast has already been specified in this class");
+ 
+                     al = sipMalloc(sizeof (argList));
+-                    al->arg = (yyvsp[(2) - (16)].memArg);
++                    al->arg = (yyvsp[-14].memArg);
+                     al->next = scope->casts;
+ 
+                     scope->casts = al;
+@@ -7085,260 +7075,303 @@
+             currentIsSlot = FALSE;
+             currentOverIsVirt = FALSE;
+         }
++#line 7079 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 461:
+-#line 3869 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3869 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {(yyval.text) = "__add__";}
++#line 7085 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 462:
+-#line 3870 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3870 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {(yyval.text) = "__sub__";}
++#line 7091 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 463:
+-#line 3871 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3871 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {(yyval.text) = "__mul__";}
++#line 7097 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 464:
+-#line 3872 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3872 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {(yyval.text) = "__div__";}
++#line 7103 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 465:
+-#line 3873 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3873 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {(yyval.text) = "__mod__";}
++#line 7109 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 466:
+-#line 3874 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3874 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {(yyval.text) = "__and__";}
++#line 7115 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 467:
+-#line 3875 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3875 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {(yyval.text) = "__or__";}
++#line 7121 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 468:
+-#line 3876 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3876 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {(yyval.text) = "__xor__";}
++#line 7127 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 469:
+-#line 3877 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3877 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {(yyval.text) = "__lshift__";}
++#line 7133 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 470:
+-#line 3878 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3878 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {(yyval.text) = "__rshift__";}
++#line 7139 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 471:
+-#line 3879 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3879 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {(yyval.text) = "__iadd__";}
++#line 7145 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 472:
+-#line 3880 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3880 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {(yyval.text) = "__isub__";}
++#line 7151 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 473:
+-#line 3881 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3881 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {(yyval.text) = "__imul__";}
++#line 7157 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 474:
+-#line 3882 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3882 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {(yyval.text) = "__idiv__";}
++#line 7163 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 475:
+-#line 3883 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3883 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {(yyval.text) = "__imod__";}
++#line 7169 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 476:
+-#line 3884 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3884 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {(yyval.text) = "__iand__";}
++#line 7175 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 477:
+-#line 3885 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3885 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {(yyval.text) = "__ior__";}
++#line 7181 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 478:
+-#line 3886 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3886 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {(yyval.text) = "__ixor__";}
++#line 7187 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 479:
+-#line 3887 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3887 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {(yyval.text) = "__ilshift__";}
++#line 7193 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 480:
+-#line 3888 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3888 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {(yyval.text) = "__irshift__";}
++#line 7199 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 481:
+-#line 3889 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3889 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {(yyval.text) = "__invert__";}
++#line 7205 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 482:
+-#line 3890 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3890 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {(yyval.text) = "__call__";}
++#line 7211 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 483:
+-#line 3891 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3891 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {(yyval.text) = "__getitem__";}
++#line 7217 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 484:
+-#line 3892 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3892 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {(yyval.text) = "__lt__";}
++#line 7223 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 485:
+-#line 3893 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3893 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {(yyval.text) = "__le__";}
++#line 7229 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 486:
+-#line 3894 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3894 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {(yyval.text) = "__eq__";}
++#line 7235 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 487:
+-#line 3895 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3895 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {(yyval.text) = "__ne__";}
++#line 7241 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 488:
+-#line 3896 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3896 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {(yyval.text) = "__gt__";}
++#line 7247 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 489:
+-#line 3897 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3897 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {(yyval.text) = "__ge__";}
++#line 7253 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 490:
+-#line 3900 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3900 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.number) = FALSE;
+         }
++#line 7261 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 491:
+-#line 3903 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3903 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.number) = TRUE;
+         }
++#line 7269 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 492:
+-#line 3908 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3908 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.number) = FALSE;
+         }
++#line 7277 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 493:
+-#line 3911 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3911 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.number) = TRUE;
+         }
++#line 7285 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 494:
+-#line 3916 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3916 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.number) = 0;
+         }
++#line 7293 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 495:
+-#line 3919 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3919 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            if ((yyvsp[(2) - (2)].number) != 0)
++            if ((yyvsp[0].number) != 0)
+                 yyerror("Abstract virtual function '= 0' expected");
+ 
+             (yyval.number) = TRUE;
+         }
++#line 7304 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 496:
+-#line 3927 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3927 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.optflags).nrFlags = 0;
+         }
++#line 7312 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 497:
+-#line 3930 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3930 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.optflags) = (yyvsp[(2) - (3)].optflags);
++            (yyval.optflags) = (yyvsp[-1].optflags);
+         }
++#line 7320 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 498:
+-#line 3936 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3936 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.optflags).flags[0] = (yyvsp[(1) - (1)].flag);
++            (yyval.optflags).flags[0] = (yyvsp[0].flag);
+             (yyval.optflags).nrFlags = 1;
+         }
++#line 7329 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 499:
+-#line 3940 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3940 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             /* Check there is room. */
+ 
+-            if ((yyvsp[(1) - (3)].optflags).nrFlags == MAX_NR_FLAGS)
++            if ((yyvsp[-2].optflags).nrFlags == MAX_NR_FLAGS)
+                 yyerror("Too many optional flags");
+ 
+-            (yyval.optflags) = (yyvsp[(1) - (3)].optflags);
++            (yyval.optflags) = (yyvsp[-2].optflags);
+ 
+-            (yyval.optflags).flags[(yyval.optflags).nrFlags++] = (yyvsp[(3) - (3)].flag);
++            (yyval.optflags).flags[(yyval.optflags).nrFlags++] = (yyvsp[0].flag);
+         }
++#line 7344 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 500:
+-#line 3952 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3952 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.flag).ftype = bool_flag;
+-            (yyval.flag).fname = (yyvsp[(1) - (1)].text);
++            (yyval.flag).fname = (yyvsp[0].text);
+         }
++#line 7353 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 501:
+-#line 3956 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3956 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.flag) = (yyvsp[(3) - (3)].flag);
+-            (yyval.flag).fname = (yyvsp[(1) - (3)].text);
++            (yyval.flag) = (yyvsp[0].flag);
++            (yyval.flag).fname = (yyvsp[-2].text);
+         }
++#line 7362 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 502:
+-#line 3962 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3962 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.flag).ftype = (strchr((yyvsp[(1) - (1)].text), '.') != NULL) ? dotted_name_flag : name_flag;
+-            (yyval.flag).fvalue.sval = (yyvsp[(1) - (1)].text);
++            (yyval.flag).ftype = (strchr((yyvsp[0].text), '.') != NULL) ? dotted_name_flag : name_flag;
++            (yyval.flag).fvalue.sval = (yyvsp[0].text);
+         }
++#line 7371 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 503:
+-#line 3966 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3966 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             apiVersionRangeDef *avd;
+             int from, to;
+@@ -7346,106 +7379,117 @@
+             (yyval.flag).ftype = api_range_flag;
+ 
+             /* Check that the API is known. */
+-            if ((avd = findAPI(currentSpec, (yyvsp[(1) - (5)].text))) == NULL)
++            if ((avd = findAPI(currentSpec, (yyvsp[-4].text))) == NULL)
+                 yyerror("unknown API name in API annotation");
+ 
+             if (inMainModule())
+                 setIsUsedName(avd->api_name);
+ 
+             /* Unbounded values are represented by 0. */
+-            if ((from = (yyvsp[(3) - (5)].number)) < 0)
++            if ((from = (yyvsp[-2].number)) < 0)
+                 from = 0;
+ 
+-            if ((to = (yyvsp[(5) - (5)].number)) < 0)
++            if ((to = (yyvsp[0].number)) < 0)
+                 to = 0;
+ 
+             (yyval.flag).fvalue.aval = convertAPIRange(currentModule, avd->api_name,
+                     from, to);
+         }
++#line 7399 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 504:
+-#line 3989 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3989 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.flag).ftype = string_flag;
+-            (yyval.flag).fvalue.sval = convertFeaturedString((yyvsp[(1) - (1)].text));
++            (yyval.flag).fvalue.sval = convertFeaturedString((yyvsp[0].text));
+         }
++#line 7408 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 505:
+-#line 3993 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3993 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.flag).ftype = integer_flag;
+-            (yyval.flag).fvalue.ival = (yyvsp[(1) - (1)].number);
++            (yyval.flag).fvalue.ival = (yyvsp[0].number);
+         }
++#line 7417 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 506:
+-#line 3999 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 3999 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.codeb) = NULL;
+         }
++#line 7425 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 507:
+-#line 4002 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4002 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.codeb) = (yyvsp[(2) - (2)].codeb);
++            (yyval.codeb) = (yyvsp[0].codeb);
+         }
++#line 7433 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 508:
+-#line 4007 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4007 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.codeb) = NULL;
+         }
++#line 7441 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 509:
+-#line 4010 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4010 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.codeb) = (yyvsp[(2) - (2)].codeb);
++            (yyval.codeb) = (yyvsp[0].codeb);
+         }
++#line 7449 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 510:
+-#line 4015 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4015 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.codeb) = NULL;
+         }
++#line 7457 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 511:
+-#line 4018 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4018 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.codeb) = (yyvsp[(2) - (2)].codeb);
++            (yyval.codeb) = (yyvsp[0].codeb);
+         }
++#line 7465 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 512:
+-#line 4023 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4023 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.codeb) = NULL;
+         }
++#line 7473 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 513:
+-#line 4026 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4026 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.codeb) = (yyvsp[(2) - (2)].codeb);
++            (yyval.codeb) = (yyvsp[0].codeb);
+         }
++#line 7481 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 514:
+-#line 4031 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4031 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             int a, nrrxcon, nrrxdis, nrslotcon, nrslotdis, nrarray, nrarraysize;
+ 
+             nrrxcon = nrrxdis = nrslotcon = nrslotdis = nrarray = nrarraysize = 0;
+ 
+-            for (a = 0; a < (yyvsp[(1) - (1)].signature).nrArgs; ++a)
++            for (a = 0; a < (yyvsp[0].signature).nrArgs; ++a)
+             {
+-                argDef *ad = &(yyvsp[(1) - (1)].signature).args[a];
++                argDef *ad = &(yyvsp[0].signature).args[a];
+ 
+                 switch (ad -> atype)
+                 {
+@@ -7486,104 +7530,111 @@
+             if (nrarray != nrarraysize || nrarray > 1)
+                 yyerror("/Array/ and /ArraySize/ must both be given and at most once");
+ 
+-            (yyval.signature) = (yyvsp[(1) - (1)].signature);
++            (yyval.signature) = (yyvsp[0].signature);
+         }
++#line 7536 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 515:
+-#line 4083 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4083 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             /* No arguments. */
+ 
+             (yyval.signature).nrArgs = 0;
+         }
++#line 7546 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 516:
+-#line 4088 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4088 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             /* The single or first argument. */
+ 
+-            (yyval.signature).args[0] = (yyvsp[(1) - (1)].memArg);
++            (yyval.signature).args[0] = (yyvsp[0].memArg);
+             (yyval.signature).nrArgs = 1;
+         }
++#line 7557 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 517:
+-#line 4094 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4094 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             /* Check that it wasn't ...(,arg...). */
+-            if ((yyvsp[(1) - (3)].signature).nrArgs == 0)
++            if ((yyvsp[-2].signature).nrArgs == 0)
+                 yyerror("First argument of the list is missing");
+ 
+             /*
+              * If this argument has no default value, then the
+              * previous one mustn't either.
+              */
+-            if ((yyvsp[(3) - (3)].memArg).defval == NULL && (yyvsp[(1) - (3)].signature).args[(yyvsp[(1) - (3)].signature).nrArgs - 1].defval != NULL)
++            if ((yyvsp[0].memArg).defval == NULL && (yyvsp[-2].signature).args[(yyvsp[-2].signature).nrArgs - 1].defval != NULL)
+                 yyerror("Compulsory argument given after optional argument");
+ 
+             /* Check there is room. */
+-            if ((yyvsp[(1) - (3)].signature).nrArgs == MAX_NR_ARGS)
++            if ((yyvsp[-2].signature).nrArgs == MAX_NR_ARGS)
+                 yyerror("Internal error - increase the value of MAX_NR_ARGS");
+ 
+-            (yyval.signature) = (yyvsp[(1) - (3)].signature);
++            (yyval.signature) = (yyvsp[-2].signature);
+ 
+-            (yyval.signature).args[(yyval.signature).nrArgs] = (yyvsp[(3) - (3)].memArg);
++            (yyval.signature).args[(yyval.signature).nrArgs] = (yyvsp[0].memArg);
+             (yyval.signature).nrArgs++;
+         }
++#line 7583 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 518:
+-#line 4117 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4117 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             deprecated("SIP_SIGNAL is deprecated\n");
+-            checkNoAnnos(&(yyvsp[(3) - (4)].optflags), "SIP_SIGNAL has no annotations");
++            checkNoAnnos(&(yyvsp[-1].optflags), "SIP_SIGNAL has no annotations");
+ 
+             (yyval.memArg).atype = signal_type;
+             (yyval.memArg).argflags = ARG_IS_CONST;
+             (yyval.memArg).nrderefs = 0;
+-            (yyval.memArg).name = cacheName(currentSpec, (yyvsp[(2) - (4)].text));
+-            (yyval.memArg).defval = (yyvsp[(4) - (4)].valp);
++            (yyval.memArg).name = cacheName(currentSpec, (yyvsp[-2].text));
++            (yyval.memArg).defval = (yyvsp[0].valp);
+ 
+             currentSpec -> sigslots = TRUE;
+         }
++#line 7600 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 519:
+-#line 4129 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4129 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             deprecated("SIP_SLOT is deprecated\n");
+-            checkNoAnnos(&(yyvsp[(3) - (4)].optflags), "SIP_SLOT has no annotations");
++            checkNoAnnos(&(yyvsp[-1].optflags), "SIP_SLOT has no annotations");
+ 
+             (yyval.memArg).atype = slot_type;
+             (yyval.memArg).argflags = ARG_IS_CONST;
+             (yyval.memArg).nrderefs = 0;
+-            (yyval.memArg).name = cacheName(currentSpec, (yyvsp[(2) - (4)].text));
+-            (yyval.memArg).defval = (yyvsp[(4) - (4)].valp);
++            (yyval.memArg).name = cacheName(currentSpec, (yyvsp[-2].text));
++            (yyval.memArg).defval = (yyvsp[0].valp);
+ 
+             currentSpec -> sigslots = TRUE;
+         }
++#line 7617 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 520:
+-#line 4141 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4141 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             deprecated("SIP_ANYSLOT is deprecated\n");
+-            checkNoAnnos(&(yyvsp[(3) - (4)].optflags), "SIP_ANYSLOT has no annotations");
++            checkNoAnnos(&(yyvsp[-1].optflags), "SIP_ANYSLOT has no annotations");
+ 
+             (yyval.memArg).atype = anyslot_type;
+             (yyval.memArg).argflags = ARG_IS_CONST;
+             (yyval.memArg).nrderefs = 0;
+-            (yyval.memArg).name = cacheName(currentSpec, (yyvsp[(2) - (4)].text));
+-            (yyval.memArg).defval = (yyvsp[(4) - (4)].valp);
++            (yyval.memArg).name = cacheName(currentSpec, (yyvsp[-2].text));
++            (yyval.memArg).defval = (yyvsp[0].valp);
+ 
+             currentSpec -> sigslots = TRUE;
+         }
++#line 7634 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 521:
+-#line 4153 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4153 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             const char *annos[] = {
+                 "SingleShot",
+@@ -7591,120 +7642,130 @@
+             };
+ 
+             deprecated("SIP_RXOBJ_CON is deprecated\n");
+-            checkAnnos(&(yyvsp[(3) - (3)].optflags), annos);
++            checkAnnos(&(yyvsp[0].optflags), annos);
+ 
+             (yyval.memArg).atype = rxcon_type;
+             (yyval.memArg).argflags = 0;
+             (yyval.memArg).nrderefs = 0;
+-            (yyval.memArg).name = cacheName(currentSpec, (yyvsp[(2) - (3)].text));
++            (yyval.memArg).name = cacheName(currentSpec, (yyvsp[-1].text));
+ 
+-            if (getOptFlag(&(yyvsp[(3) - (3)].optflags), "SingleShot", bool_flag) != NULL)
++            if (getOptFlag(&(yyvsp[0].optflags), "SingleShot", bool_flag) != NULL)
+                 (yyval.memArg).argflags |= ARG_SINGLE_SHOT;
+ 
+             currentSpec -> sigslots = TRUE;
+         }
++#line 7658 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 522:
+-#line 4172 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4172 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             deprecated("SIP_RXOBJ_DIS is deprecated\n");
+-            checkNoAnnos(&(yyvsp[(3) - (3)].optflags), "SIP_RXOBJ_DIS has no annotations");
++            checkNoAnnos(&(yyvsp[0].optflags), "SIP_RXOBJ_DIS has no annotations");
+ 
+             (yyval.memArg).atype = rxdis_type;
+             (yyval.memArg).argflags = 0;
+             (yyval.memArg).nrderefs = 0;
+-            (yyval.memArg).name = cacheName(currentSpec, (yyvsp[(2) - (3)].text));
++            (yyval.memArg).name = cacheName(currentSpec, (yyvsp[-1].text));
+ 
+             currentSpec -> sigslots = TRUE;
+         }
++#line 7674 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 523:
+-#line 4183 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4183 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             deprecated("SIP_SLOT_CON is deprecated\n");
+-            checkNoAnnos(&(yyvsp[(6) - (6)].optflags), "SIP_SLOT_CON has no annotations");
++            checkNoAnnos(&(yyvsp[0].optflags), "SIP_SLOT_CON has no annotations");
+ 
+             (yyval.memArg).atype = slotcon_type;
+             (yyval.memArg).argflags = ARG_IS_CONST;
+             (yyval.memArg).nrderefs = 0;
+-            (yyval.memArg).name = cacheName(currentSpec, (yyvsp[(5) - (6)].text));
++            (yyval.memArg).name = cacheName(currentSpec, (yyvsp[-1].text));
+ 
+-            memset(&(yyvsp[(3) - (6)].signature).result, 0, sizeof (argDef));
+-            (yyvsp[(3) - (6)].signature).result.atype = void_type;
++            memset(&(yyvsp[-3].signature).result, 0, sizeof (argDef));
++            (yyvsp[-3].signature).result.atype = void_type;
+ 
+             (yyval.memArg).u.sa = sipMalloc(sizeof (signatureDef));
+-            *(yyval.memArg).u.sa = (yyvsp[(3) - (6)].signature);
++            *(yyval.memArg).u.sa = (yyvsp[-3].signature);
+ 
+             currentSpec -> sigslots = TRUE;
+         }
++#line 7696 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 524:
+-#line 4200 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4200 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             deprecated("SIP_SLOT_DIS is deprecated\n");
+-            checkNoAnnos(&(yyvsp[(6) - (6)].optflags), "SIP_SLOT_DIS has no annotations");
++            checkNoAnnos(&(yyvsp[0].optflags), "SIP_SLOT_DIS has no annotations");
+ 
+             (yyval.memArg).atype = slotdis_type;
+             (yyval.memArg).argflags = ARG_IS_CONST;
+             (yyval.memArg).nrderefs = 0;
+-            (yyval.memArg).name = cacheName(currentSpec, (yyvsp[(5) - (6)].text));
++            (yyval.memArg).name = cacheName(currentSpec, (yyvsp[-1].text));
+ 
+-            memset(&(yyvsp[(3) - (6)].signature).result, 0, sizeof (argDef));
+-            (yyvsp[(3) - (6)].signature).result.atype = void_type;
++            memset(&(yyvsp[-3].signature).result, 0, sizeof (argDef));
++            (yyvsp[-3].signature).result.atype = void_type;
+ 
+             (yyval.memArg).u.sa = sipMalloc(sizeof (signatureDef));
+-            *(yyval.memArg).u.sa = (yyvsp[(3) - (6)].signature);
++            *(yyval.memArg).u.sa = (yyvsp[-3].signature);
+ 
+             currentSpec -> sigslots = TRUE;
+         }
++#line 7718 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 525:
+-#line 4217 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4217 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             deprecated("SIP_QOBJECT is deprecated\n");
+-            checkNoAnnos(&(yyvsp[(3) - (3)].optflags), "SIP_QOBJECT has no annotations");
++            checkNoAnnos(&(yyvsp[0].optflags), "SIP_QOBJECT has no annotations");
+ 
+             (yyval.memArg).atype = qobject_type;
+             (yyval.memArg).argflags = 0;
+             (yyval.memArg).nrderefs = 0;
+-            (yyval.memArg).name = cacheName(currentSpec, (yyvsp[(2) - (3)].text));
++            (yyval.memArg).name = cacheName(currentSpec, (yyvsp[-1].text));
+         }
++#line 7732 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 526:
+-#line 4226 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4226 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.memArg) = (yyvsp[(1) - (2)].memArg);
+-            (yyval.memArg).defval = (yyvsp[(2) - (2)].valp);
++            (yyval.memArg) = (yyvsp[-1].memArg);
++            (yyval.memArg).defval = (yyvsp[0].valp);
+         }
++#line 7741 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 527:
+-#line 4233 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4233 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {currentIsSignal = TRUE;}
++#line 7747 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 529:
+-#line 4234 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4234 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {currentIsSlot = TRUE;}
++#line 7753 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 532:
+-#line 4239 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4239 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {currentIsStatic = TRUE;}
++#line 7759 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 537:
+-#line 4249 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4249 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {currentOverIsVirt = TRUE;}
++#line 7765 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 540:
+-#line 4253 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4253 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+@@ -7719,99 +7780,105 @@
+                     NULL
+                 };
+ 
+-                checkAnnos(&(yyvsp[(3) - (8)].optflags), annos);
++                checkAnnos(&(yyvsp[-5].optflags), annos);
+ 
+-                if ((yyvsp[(6) - (8)].codeb) != NULL)
++                if ((yyvsp[-2].codeb) != NULL)
+                 {
+-                    if ((yyvsp[(4) - (8)].variable).access_code != NULL)
++                    if ((yyvsp[-4].variable).access_code != NULL)
+                         yyerror("%AccessCode already defined");
+ 
+-                    (yyvsp[(4) - (8)].variable).access_code = (yyvsp[(6) - (8)].codeb);
++                    (yyvsp[-4].variable).access_code = (yyvsp[-2].codeb);
+ 
+                     deprecated("%AccessCode should be used as a sub-directive");
+                 }
+ 
+-                if ((yyvsp[(7) - (8)].codeb) != NULL)
++                if ((yyvsp[-1].codeb) != NULL)
+                 {
+-                    if ((yyvsp[(4) - (8)].variable).get_code != NULL)
++                    if ((yyvsp[-4].variable).get_code != NULL)
+                         yyerror("%GetCode already defined");
+ 
+-                    (yyvsp[(4) - (8)].variable).get_code = (yyvsp[(7) - (8)].codeb);
++                    (yyvsp[-4].variable).get_code = (yyvsp[-1].codeb);
+ 
+                     deprecated("%GetCode should be used as a sub-directive");
+                 }
+ 
+-                if ((yyvsp[(8) - (8)].codeb) != NULL)
++                if ((yyvsp[0].codeb) != NULL)
+                 {
+-                    if ((yyvsp[(4) - (8)].variable).set_code != NULL)
++                    if ((yyvsp[-4].variable).set_code != NULL)
+                         yyerror("%SetCode already defined");
+ 
+-                    (yyvsp[(4) - (8)].variable).set_code = (yyvsp[(8) - (8)].codeb);
++                    (yyvsp[-4].variable).set_code = (yyvsp[0].codeb);
+ 
+                     deprecated("%SetCode should be used as a sub-directive");
+                 }
+ 
+-                newVar(currentSpec, currentModule, (yyvsp[(2) - (8)].text), currentIsStatic, &(yyvsp[(1) - (8)].memArg),
+-                        &(yyvsp[(3) - (8)].optflags), (yyvsp[(4) - (8)].variable).access_code, (yyvsp[(4) - (8)].variable).get_code, (yyvsp[(4) - (8)].variable).set_code,
++                newVar(currentSpec, currentModule, (yyvsp[-6].text), currentIsStatic, &(yyvsp[-7].memArg),
++                        &(yyvsp[-5].optflags), (yyvsp[-4].variable).access_code, (yyvsp[-4].variable).get_code, (yyvsp[-4].variable).set_code,
+                         sectionFlags);
+             }
+ 
+             currentIsStatic = FALSE;
+         }
++#line 7823 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 541:
+-#line 4308 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4308 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.variable).token = 0;
+             (yyval.variable).access_code = NULL;
+             (yyval.variable).get_code = NULL;
+             (yyval.variable).set_code = NULL;
+         }
++#line 7834 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 542:
+-#line 4314 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4314 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.variable) = (yyvsp[(2) - (3)].variable);
++            (yyval.variable) = (yyvsp[-1].variable);
+         }
++#line 7842 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 544:
+-#line 4320 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4320 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.variable) = (yyvsp[(1) - (2)].variable);
++            (yyval.variable) = (yyvsp[-1].variable);
+ 
+-            switch ((yyvsp[(2) - (2)].variable).token)
++            switch ((yyvsp[0].variable).token)
+             {
+-            case TK_ACCESSCODE: (yyval.variable).access_code = (yyvsp[(2) - (2)].variable).access_code; break;
+-            case TK_GETCODE: (yyval.variable).get_code = (yyvsp[(2) - (2)].variable).get_code; break;
+-            case TK_SETCODE: (yyval.variable).set_code = (yyvsp[(2) - (2)].variable).set_code; break;
++            case TK_ACCESSCODE: (yyval.variable).access_code = (yyvsp[0].variable).access_code; break;
++            case TK_GETCODE: (yyval.variable).get_code = (yyvsp[0].variable).get_code; break;
++            case TK_SETCODE: (yyval.variable).set_code = (yyvsp[0].variable).set_code; break;
+             }
+         }
++#line 7857 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 545:
+-#line 4332 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4332 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.variable).token = TK_IF;
+         }
++#line 7865 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 546:
+-#line 4335 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4335 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.variable).token = TK_END;
+         }
++#line 7873 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 547:
+-#line 4338 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4338 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+                 (yyval.variable).token = TK_ACCESSCODE;
+-                (yyval.variable).access_code = (yyvsp[(2) - (2)].codeb);
++                (yyval.variable).access_code = (yyvsp[0].codeb);
+             }
+             else
+             {
+@@ -7822,15 +7889,16 @@
+             (yyval.variable).get_code = NULL;
+             (yyval.variable).set_code = NULL;
+         }
++#line 7893 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 548:
+-#line 4353 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4353 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+                 (yyval.variable).token = TK_GETCODE;
+-                (yyval.variable).get_code = (yyvsp[(2) - (2)].codeb);
++                (yyval.variable).get_code = (yyvsp[0].codeb);
+             }
+             else
+             {
+@@ -7841,15 +7909,16 @@
+             (yyval.variable).access_code = NULL;
+             (yyval.variable).set_code = NULL;
+         }
++#line 7913 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 549:
+-#line 4368 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4368 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (notSkipping())
+             {
+                 (yyval.variable).token = TK_SETCODE;
+-                (yyval.variable).set_code = (yyvsp[(2) - (2)].codeb);
++                (yyval.variable).set_code = (yyvsp[0].codeb);
+             }
+             else
+             {
+@@ -7860,35 +7929,38 @@
+             (yyval.variable).access_code = NULL;
+             (yyval.variable).get_code = NULL;
+         }
++#line 7933 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 550:
+-#line 4385 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4385 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.memArg) = (yyvsp[(2) - (4)].memArg);
+-            add_derefs(&(yyval.memArg), &(yyvsp[(3) - (4)].memArg));
+-            (yyval.memArg).argflags |= ARG_IS_CONST | (yyvsp[(4) - (4)].number);
++            (yyval.memArg) = (yyvsp[-2].memArg);
++            add_derefs(&(yyval.memArg), &(yyvsp[-1].memArg));
++            (yyval.memArg).argflags |= ARG_IS_CONST | (yyvsp[0].number);
+         }
++#line 7943 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 551:
+-#line 4390 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4390 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            (yyval.memArg) = (yyvsp[(1) - (3)].memArg);
+-            add_derefs(&(yyval.memArg), &(yyvsp[(2) - (3)].memArg));
+-            (yyval.memArg).argflags |= (yyvsp[(3) - (3)].number);
++            (yyval.memArg) = (yyvsp[-2].memArg);
++            add_derefs(&(yyval.memArg), &(yyvsp[-1].memArg));
++            (yyval.memArg).argflags |= (yyvsp[0].number);
+ 
+             /* PyObject * is a synonym for SIP_PYOBJECT. */
+-            if ((yyvsp[(1) - (3)].memArg).atype == defined_type && strcmp((yyvsp[(1) - (3)].memArg).u.snd->name, "PyObject") == 0 && (yyvsp[(1) - (3)].memArg).u.snd->next == NULL && (yyvsp[(2) - (3)].memArg).nrderefs == 1 && (yyvsp[(3) - (3)].number) == 0)
++            if ((yyvsp[-2].memArg).atype == defined_type && strcmp((yyvsp[-2].memArg).u.snd->name, "PyObject") == 0 && (yyvsp[-2].memArg).u.snd->next == NULL && (yyvsp[-1].memArg).nrderefs == 1 && (yyvsp[0].number) == 0)
+             {
+                 (yyval.memArg).atype = pyobject_type;
+                 (yyval.memArg).nrderefs = 0;
+             }
+         }
++#line 7960 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 552:
+-#line 4404 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4404 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             const char *annos[] = {
+                 "AllowNone",
+@@ -7919,54 +7991,54 @@
+ 
+             optFlag *of;
+ 
+-            checkAnnos(&(yyvsp[(3) - (3)].optflags), annos);
++            checkAnnos(&(yyvsp[0].optflags), annos);
+ 
+-            (yyval.memArg) = (yyvsp[(1) - (3)].memArg);
+-            (yyval.memArg).name = cacheName(currentSpec, (yyvsp[(2) - (3)].text));
++            (yyval.memArg) = (yyvsp[-2].memArg);
++            (yyval.memArg).name = cacheName(currentSpec, (yyvsp[-1].text));
+ 
+-            handleKeepReference(&(yyvsp[(3) - (3)].optflags), &(yyval.memArg), currentModule);
++            handleKeepReference(&(yyvsp[0].optflags), &(yyval.memArg), currentModule);
+ 
+-            if ((of = getOptFlag(&(yyvsp[(3) - (3)].optflags), "ScopesStripped", opt_integer_flag)) != NULL)
++            if ((of = getOptFlag(&(yyvsp[0].optflags), "ScopesStripped", opt_integer_flag)) != NULL)
+                 if (((yyval.memArg).scopes_stripped = of->fvalue.ival) <= 0)
+                     yyerror("/ScopesStripped/ must be greater than 0");
+ 
+-            if (getAllowNone(&(yyvsp[(3) - (3)].optflags)))
++            if (getAllowNone(&(yyvsp[0].optflags)))
+                 (yyval.memArg).argflags |= ARG_ALLOW_NONE;
+ 
+-            if (getDisallowNone(&(yyvsp[(3) - (3)].optflags)))
++            if (getDisallowNone(&(yyvsp[0].optflags)))
+                 (yyval.memArg).argflags |= ARG_DISALLOW_NONE;
+ 
+-            if (getOptFlag(&(yyvsp[(3) - (3)].optflags),"GetWrapper",bool_flag) != NULL)
++            if (getOptFlag(&(yyvsp[0].optflags),"GetWrapper",bool_flag) != NULL)
+                 (yyval.memArg).argflags |= ARG_GET_WRAPPER;
+ 
+-            if (getOptFlag(&(yyvsp[(3) - (3)].optflags),"Array",bool_flag) != NULL)
++            if (getOptFlag(&(yyvsp[0].optflags),"Array",bool_flag) != NULL)
+                 (yyval.memArg).argflags |= ARG_ARRAY;
+ 
+-            if (getOptFlag(&(yyvsp[(3) - (3)].optflags),"ArraySize",bool_flag) != NULL)
++            if (getOptFlag(&(yyvsp[0].optflags),"ArraySize",bool_flag) != NULL)
+                 (yyval.memArg).argflags |= ARG_ARRAY_SIZE;
+ 
+-            if (getTransfer(&(yyvsp[(3) - (3)].optflags)))
++            if (getTransfer(&(yyvsp[0].optflags)))
+                 (yyval.memArg).argflags |= ARG_XFERRED;
+ 
+-            if (getOptFlag(&(yyvsp[(3) - (3)].optflags),"TransferThis",bool_flag) != NULL)
++            if (getOptFlag(&(yyvsp[0].optflags),"TransferThis",bool_flag) != NULL)
+                 (yyval.memArg).argflags |= ARG_THIS_XFERRED;
+ 
+-            if (getOptFlag(&(yyvsp[(3) - (3)].optflags),"TransferBack",bool_flag) != NULL)
++            if (getOptFlag(&(yyvsp[0].optflags),"TransferBack",bool_flag) != NULL)
+                 (yyval.memArg).argflags |= ARG_XFERRED_BACK;
+ 
+-            if (getOptFlag(&(yyvsp[(3) - (3)].optflags),"In",bool_flag) != NULL)
++            if (getOptFlag(&(yyvsp[0].optflags),"In",bool_flag) != NULL)
+                 (yyval.memArg).argflags |= ARG_IN;
+ 
+-            if (getOptFlag(&(yyvsp[(3) - (3)].optflags),"Out",bool_flag) != NULL)
++            if (getOptFlag(&(yyvsp[0].optflags),"Out",bool_flag) != NULL)
+                 (yyval.memArg).argflags |= ARG_OUT;
+ 
+-            if (getOptFlag(&(yyvsp[(3) - (3)].optflags), "ResultSize", bool_flag) != NULL)
++            if (getOptFlag(&(yyvsp[0].optflags), "ResultSize", bool_flag) != NULL)
+                 (yyval.memArg).argflags |= ARG_RESULT_SIZE;
+ 
+-            if (getOptFlag(&(yyvsp[(3) - (3)].optflags), "NoCopy", bool_flag) != NULL)
++            if (getOptFlag(&(yyvsp[0].optflags), "NoCopy", bool_flag) != NULL)
+                 (yyval.memArg).argflags |= ARG_NO_COPY;
+ 
+-            if (getOptFlag(&(yyvsp[(3) - (3)].optflags),"Constrained",bool_flag) != NULL)
++            if (getOptFlag(&(yyvsp[0].optflags),"Constrained",bool_flag) != NULL)
+             {
+                 (yyval.memArg).argflags |= ARG_CONSTRAINED;
+ 
+@@ -7994,78 +8066,86 @@
+                 }
+             }
+ 
+-            applyTypeFlags(currentModule, &(yyval.memArg), &(yyvsp[(3) - (3)].optflags));
+-            (yyval.memArg).typehint_value = getTypeHintValue(&(yyvsp[(3) - (3)].optflags));
++            applyTypeFlags(currentModule, &(yyval.memArg), &(yyvsp[0].optflags));
++            (yyval.memArg).typehint_value = getTypeHintValue(&(yyvsp[0].optflags));
+         }
++#line 8073 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 553:
+-#line 4514 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4514 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.number) = 0;
+         }
++#line 8081 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 554:
+-#line 4517 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4517 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (currentSpec -> genc)
+                 yyerror("References not allowed in a C module");
+ 
+             (yyval.number) = ARG_IS_REF;
+         }
++#line 8092 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 555:
+-#line 4525 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4525 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.memArg).nrderefs = 0;
+         }
++#line 8100 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 556:
+-#line 4528 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4528 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            add_new_deref(&(yyval.memArg), &(yyvsp[(1) - (3)].memArg), TRUE);
++            add_new_deref(&(yyval.memArg), &(yyvsp[-2].memArg), TRUE);
+         }
++#line 8108 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 557:
+-#line 4531 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4531 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+-            add_new_deref(&(yyval.memArg), &(yyvsp[(1) - (2)].memArg), FALSE);
++            add_new_deref(&(yyval.memArg), &(yyvsp[-1].memArg), FALSE);
+         }
++#line 8116 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 558:
+-#line 4536 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4536 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             memset(&(yyval.memArg), 0, sizeof (argDef));
+             (yyval.memArg).atype = defined_type;
+-            (yyval.memArg).u.snd = (yyvsp[(1) - (1)].scpvalp);
++            (yyval.memArg).u.snd = (yyvsp[0].scpvalp);
+ 
+             /* Try and resolve typedefs as early as possible. */
+             resolveAnyTypedef(currentSpec, &(yyval.memArg));
+         }
++#line 8129 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 559:
+-#line 4544 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4544 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             templateDef *td;
+ 
+             td = sipMalloc(sizeof(templateDef));
+-            td->fqname = (yyvsp[(1) - (4)].scpvalp);
+-            td->types = (yyvsp[(3) - (4)].signature);
++            td->fqname = (yyvsp[-3].scpvalp);
++            td->types = (yyvsp[-1].signature);
+ 
+             memset(&(yyval.memArg), 0, sizeof (argDef));
+             (yyval.memArg).atype = template_type;
+             (yyval.memArg).u.td = td;
+         }
++#line 8145 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 560:
+-#line 4555 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4555 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             memset(&(yyval.memArg), 0, sizeof (argDef));
+ 
+@@ -8073,321 +8153,366 @@
+             if (currentSpec -> genc)
+             {
+                 (yyval.memArg).atype = defined_type;
+-                (yyval.memArg).u.snd = (yyvsp[(2) - (2)].scpvalp);
++                (yyval.memArg).u.snd = (yyvsp[0].scpvalp);
+             }
+             else
+             {
+                 (yyval.memArg).atype = struct_type;
+-                (yyval.memArg).u.sname = (yyvsp[(2) - (2)].scpvalp);
++                (yyval.memArg).u.sname = (yyvsp[0].scpvalp);
+             }
+         }
++#line 8165 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 561:
+-#line 4570 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4570 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             memset(&(yyval.memArg), 0, sizeof (argDef));
+             (yyval.memArg).atype = ushort_type;
+         }
++#line 8174 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 562:
+-#line 4574 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4574 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             memset(&(yyval.memArg), 0, sizeof (argDef));
+             (yyval.memArg).atype = short_type;
+         }
++#line 8183 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 563:
+-#line 4578 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4578 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             memset(&(yyval.memArg), 0, sizeof (argDef));
+             (yyval.memArg).atype = uint_type;
+         }
++#line 8192 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 564:
+-#line 4582 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4582 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             memset(&(yyval.memArg), 0, sizeof (argDef));
+             (yyval.memArg).atype = uint_type;
+         }
++#line 8201 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 565:
+-#line 4586 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4586 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             memset(&(yyval.memArg), 0, sizeof (argDef));
+             (yyval.memArg).atype = int_type;
+         }
++#line 8210 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 566:
+-#line 4590 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4590 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             memset(&(yyval.memArg), 0, sizeof (argDef));
+             (yyval.memArg).atype = long_type;
+         }
++#line 8219 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 567:
+-#line 4594 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4594 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             memset(&(yyval.memArg), 0, sizeof (argDef));
+             (yyval.memArg).atype = ulong_type;
+         }
++#line 8228 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 568:
+-#line 4598 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4598 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             memset(&(yyval.memArg), 0, sizeof (argDef));
+             (yyval.memArg).atype = longlong_type;
+         }
++#line 8237 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 569:
+-#line 4602 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4602 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             memset(&(yyval.memArg), 0, sizeof (argDef));
+             (yyval.memArg).atype = ulonglong_type;
+         }
++#line 8246 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 570:
+-#line 4606 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4606 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             memset(&(yyval.memArg), 0, sizeof (argDef));
+             (yyval.memArg).atype = float_type;
+         }
++#line 8255 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 571:
+-#line 4610 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4610 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             memset(&(yyval.memArg), 0, sizeof (argDef));
+             (yyval.memArg).atype = double_type;
+         }
++#line 8264 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 572:
+-#line 4614 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4614 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             memset(&(yyval.memArg), 0, sizeof (argDef));
+             (yyval.memArg).atype = bool_type;
+         }
++#line 8273 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 573:
+-#line 4618 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4618 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             memset(&(yyval.memArg), 0, sizeof (argDef));
+             (yyval.memArg).atype = sstring_type;
+         }
++#line 8282 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 574:
+-#line 4622 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4622 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             memset(&(yyval.memArg), 0, sizeof (argDef));
+             (yyval.memArg).atype = ustring_type;
+         }
++#line 8291 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 575:
+-#line 4626 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4626 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             memset(&(yyval.memArg), 0, sizeof (argDef));
+             (yyval.memArg).atype = string_type;
+         }
++#line 8300 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 576:
+-#line 4630 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4630 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             memset(&(yyval.memArg), 0, sizeof (argDef));
+             (yyval.memArg).atype = wstring_type;
+         }
++#line 8309 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 577:
+-#line 4634 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4634 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             memset(&(yyval.memArg), 0, sizeof (argDef));
+             (yyval.memArg).atype = void_type;
+         }
++#line 8318 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 578:
+-#line 4638 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4638 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             memset(&(yyval.memArg), 0, sizeof (argDef));
+             (yyval.memArg).atype = pyobject_type;
+         }
++#line 8327 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 579:
+-#line 4642 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4642 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             memset(&(yyval.memArg), 0, sizeof (argDef));
+             (yyval.memArg).atype = pytuple_type;
+         }
++#line 8336 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 580:
+-#line 4646 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4646 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             memset(&(yyval.memArg), 0, sizeof (argDef));
+             (yyval.memArg).atype = pylist_type;
+         }
++#line 8345 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 581:
+-#line 4650 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4650 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             memset(&(yyval.memArg), 0, sizeof (argDef));
+             (yyval.memArg).atype = pydict_type;
+         }
++#line 8354 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 582:
+-#line 4654 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4654 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             memset(&(yyval.memArg), 0, sizeof (argDef));
+             (yyval.memArg).atype = pycallable_type;
+         }
++#line 8363 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 583:
+-#line 4658 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4658 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             memset(&(yyval.memArg), 0, sizeof (argDef));
+             (yyval.memArg).atype = pyslice_type;
+         }
++#line 8372 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 584:
+-#line 4662 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4662 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             memset(&(yyval.memArg), 0, sizeof (argDef));
+             (yyval.memArg).atype = pytype_type;
+         }
++#line 8381 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 585:
+-#line 4666 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4666 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             memset(&(yyval.memArg), 0, sizeof (argDef));
+             (yyval.memArg).atype = pybuffer_type;
+         }
++#line 8390 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 586:
+-#line 4670 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4670 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             memset(&(yyval.memArg), 0, sizeof (argDef));
+             (yyval.memArg).atype = ssize_type;
+         }
++#line 8399 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 587:
+-#line 4674 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4674 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             memset(&(yyval.memArg), 0, sizeof (argDef));
+             (yyval.memArg).atype = ellipsis_type;
+         }
++#line 8408 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 588:
+-#line 4680 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4680 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             /* The single or first type. */
+ 
+-            (yyval.signature).args[0] = (yyvsp[(1) - (1)].memArg);
++            (yyval.signature).args[0] = (yyvsp[0].memArg);
+             (yyval.signature).nrArgs = 1;
+         }
++#line 8419 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 589:
+-#line 4686 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4686 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             /* Check there is nothing after an ellipsis. */
+-            if ((yyvsp[(1) - (3)].signature).args[(yyvsp[(1) - (3)].signature).nrArgs - 1].atype == ellipsis_type)
++            if ((yyvsp[-2].signature).args[(yyvsp[-2].signature).nrArgs - 1].atype == ellipsis_type)
+                 yyerror("An ellipsis must be at the end of the argument list");
+ 
+             /* Check there is room. */
+-            if ((yyvsp[(1) - (3)].signature).nrArgs == MAX_NR_ARGS)
++            if ((yyvsp[-2].signature).nrArgs == MAX_NR_ARGS)
+                 yyerror("Internal error - increase the value of MAX_NR_ARGS");
+ 
+-            (yyval.signature) = (yyvsp[(1) - (3)].signature);
++            (yyval.signature) = (yyvsp[-2].signature);
+ 
+-            (yyval.signature).args[(yyval.signature).nrArgs] = (yyvsp[(3) - (3)].memArg);
++            (yyval.signature).args[(yyval.signature).nrArgs] = (yyvsp[0].memArg);
+             (yyval.signature).nrArgs++;
+         }
++#line 8438 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 590:
+-#line 4702 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4702 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             (yyval.throwlist) = NULL;
+         }
++#line 8446 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 591:
+-#line 4705 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4705 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             if (currentSpec->genc)
+                 yyerror("Exceptions not allowed in a C module");
+ 
+-            (yyval.throwlist) = (yyvsp[(3) - (4)].throwlist);
++            (yyval.throwlist) = (yyvsp[-1].throwlist);
+         }
++#line 8457 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 592:
+-#line 4713 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4713 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             /* Empty list so use a blank. */
+ 
+             (yyval.throwlist) = sipMalloc(sizeof (throwArgs));
+             (yyval.throwlist) -> nrArgs = 0;
+         }
++#line 8468 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 593:
+-#line 4719 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4719 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             /* The only or first exception. */
+ 
+             (yyval.throwlist) = sipMalloc(sizeof (throwArgs));
+             (yyval.throwlist) -> nrArgs = 1;
+-            (yyval.throwlist) -> args[0] = findException(currentSpec, (yyvsp[(1) - (1)].scpvalp), FALSE);
++            (yyval.throwlist) -> args[0] = findException(currentSpec, (yyvsp[0].scpvalp), FALSE);
+         }
++#line 8480 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+   case 594:
+-#line 4726 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4726 "sipgen/metasrc/parser.y" /* yacc.c:1646  */
+     {
+             /* Check that it wasn't ...(,arg...). */
+ 
+-            if ((yyvsp[(1) - (3)].throwlist) -> nrArgs == 0)
++            if ((yyvsp[-2].throwlist) -> nrArgs == 0)
+                 yyerror("First exception of throw specifier is missing");
+ 
+             /* Check there is room. */
+ 
+-            if ((yyvsp[(1) - (3)].throwlist) -> nrArgs == MAX_NR_ARGS)
++            if ((yyvsp[-2].throwlist) -> nrArgs == MAX_NR_ARGS)
+                 yyerror("Internal error - increase the value of MAX_NR_ARGS");
+ 
+-            (yyval.throwlist) = (yyvsp[(1) - (3)].throwlist);
+-            (yyval.throwlist) -> args[(yyval.throwlist) -> nrArgs++] = findException(currentSpec, (yyvsp[(3) - (3)].scpvalp), FALSE);
++            (yyval.throwlist) = (yyvsp[-2].throwlist);
++            (yyval.throwlist) -> args[(yyval.throwlist) -> nrArgs++] = findException(currentSpec, (yyvsp[0].scpvalp), FALSE);
+         }
++#line 8499 "sipgen/parser.c" /* yacc.c:1646  */
+     break;
+ 
+ 
+-/* Line 1267 of yacc.c.  */
+-#line 8389 "sip-4.19.12/sipgen/parser.c"
++#line 8503 "sipgen/parser.c" /* yacc.c:1646  */
+       default: break;
+     }
++  /* User semantic actions sometimes alter yychar, and that requires
++     that yytoken be updated with the new translation.  We take the
++     approach of translating immediately before every use of yytoken.
++     One alternative is translating here after every semantic action,
++     but that translation would be missed if the semantic action invokes
++     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
++     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
++     incorrect destructor might then be invoked immediately.  In the
++     case of YYERROR or YYBACKUP, subsequent parser actions might lead
++     to an incorrect destructor call or verbose syntax error message
++     before the lookahead is translated.  */
+   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+ 
+   YYPOPSTACK (yylen);
+@@ -8396,8 +8521,7 @@
+ 
+   *++yyvsp = yyval;
+ 
+-
+-  /* Now `shift' the result of the reduction.  Determine what state
++  /* Now 'shift' the result of the reduction.  Determine what state
+      that goes to, based on the state we popped back to and the rule
+      number reduced by.  */
+ 
+@@ -8412,10 +8536,14 @@
+   goto yynewstate;
+ 
+ 
+-/*------------------------------------.
+-| yyerrlab -- here on detecting error |
+-`------------------------------------*/
++/*--------------------------------------.
++| yyerrlab -- here on detecting error.  |
++`--------------------------------------*/
+ yyerrlab:
++  /* Make sure we have latest lookahead translation.  See comments at
++     user semantic actions for why this is necessary.  */
++  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
++
+   /* If not already recovering from an error, report this error.  */
+   if (!yyerrstatus)
+     {
+@@ -8423,37 +8551,36 @@
+ #if ! YYERROR_VERBOSE
+       yyerror (YY_("syntax error"));
+ #else
++# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
++                                        yyssp, yytoken)
+       {
+-	YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
+-	if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
+-	  {
+-	    YYSIZE_T yyalloc = 2 * yysize;
+-	    if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
+-	      yyalloc = YYSTACK_ALLOC_MAXIMUM;
+-	    if (yymsg != yymsgbuf)
+-	      YYSTACK_FREE (yymsg);
+-	    yymsg = (char *) YYSTACK_ALLOC (yyalloc);
+-	    if (yymsg)
+-	      yymsg_alloc = yyalloc;
+-	    else
+-	      {
+-		yymsg = yymsgbuf;
+-		yymsg_alloc = sizeof yymsgbuf;
+-	      }
+-	  }
+-
+-	if (0 < yysize && yysize <= yymsg_alloc)
+-	  {
+-	    (void) yysyntax_error (yymsg, yystate, yychar);
+-	    yyerror (yymsg);
+-	  }
+-	else
+-	  {
+-	    yyerror (YY_("syntax error"));
+-	    if (yysize != 0)
+-	      goto yyexhaustedlab;
+-	  }
++        char const *yymsgp = YY_("syntax error");
++        int yysyntax_error_status;
++        yysyntax_error_status = YYSYNTAX_ERROR;
++        if (yysyntax_error_status == 0)
++          yymsgp = yymsg;
++        else if (yysyntax_error_status == 1)
++          {
++            if (yymsg != yymsgbuf)
++              YYSTACK_FREE (yymsg);
++            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
++            if (!yymsg)
++              {
++                yymsg = yymsgbuf;
++                yymsg_alloc = sizeof yymsgbuf;
++                yysyntax_error_status = 2;
++              }
++            else
++              {
++                yysyntax_error_status = YYSYNTAX_ERROR;
++                yymsgp = yymsg;
++              }
++          }
++        yyerror (yymsgp);
++        if (yysyntax_error_status == 2)
++          goto yyexhaustedlab;
+       }
++# undef YYSYNTAX_ERROR
+ #endif
+     }
+ 
+@@ -8461,24 +8588,24 @@
+ 
+   if (yyerrstatus == 3)
+     {
+-      /* If just tried and failed to reuse look-ahead token after an
+-	 error, discard it.  */
++      /* If just tried and failed to reuse lookahead token after an
++         error, discard it.  */
+ 
+       if (yychar <= YYEOF)
+-	{
+-	  /* Return failure if at end of input.  */
+-	  if (yychar == YYEOF)
+-	    YYABORT;
+-	}
++        {
++          /* Return failure if at end of input.  */
++          if (yychar == YYEOF)
++            YYABORT;
++        }
+       else
+-	{
+-	  yydestruct ("Error: discarding",
+-		      yytoken, &yylval);
+-	  yychar = YYEMPTY;
+-	}
++        {
++          yydestruct ("Error: discarding",
++                      yytoken, &yylval);
++          yychar = YYEMPTY;
++        }
+     }
+ 
+-  /* Else will try to reuse look-ahead token after shifting the error
++  /* Else will try to reuse lookahead token after shifting the error
+      token.  */
+   goto yyerrlab1;
+ 
+@@ -8494,7 +8621,7 @@
+   if (/*CONSTCOND*/ 0)
+      goto yyerrorlab;
+ 
+-  /* Do not reclaim the symbols of the rule which action triggered
++  /* Do not reclaim the symbols of the rule whose action triggered
+      this YYERROR.  */
+   YYPOPSTACK (yylen);
+   yylen = 0;
+@@ -8507,38 +8634,37 @@
+ | yyerrlab1 -- common code for both syntax error and YYERROR.  |
+ `-------------------------------------------------------------*/
+ yyerrlab1:
+-  yyerrstatus = 3;	/* Each real token shifted decrements this.  */
++  yyerrstatus = 3;      /* Each real token shifted decrements this.  */
+ 
+   for (;;)
+     {
+       yyn = yypact[yystate];
+-      if (yyn != YYPACT_NINF)
+-	{
+-	  yyn += YYTERROR;
+-	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+-	    {
+-	      yyn = yytable[yyn];
+-	      if (0 < yyn)
+-		break;
+-	    }
+-	}
++      if (!yypact_value_is_default (yyn))
++        {
++          yyn += YYTERROR;
++          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
++            {
++              yyn = yytable[yyn];
++              if (0 < yyn)
++                break;
++            }
++        }
+ 
+       /* Pop the current state because it cannot handle the error token.  */
+       if (yyssp == yyss)
+-	YYABORT;
++        YYABORT;
+ 
+ 
+       yydestruct ("Error: popping",
+-		  yystos[yystate], yyvsp);
++                  yystos[yystate], yyvsp);
+       YYPOPSTACK (1);
+       yystate = *yyssp;
+       YY_STACK_PRINT (yyss, yyssp);
+     }
+ 
+-  if (yyn == YYFINAL)
+-    YYACCEPT;
+-
++  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+   *++yyvsp = yylval;
++  YY_IGNORE_MAYBE_UNINITIALIZED_END
+ 
+ 
+   /* Shift the error token.  */
+@@ -8562,7 +8688,7 @@
+   yyresult = 1;
+   goto yyreturn;
+ 
+-#ifndef yyoverflow
++#if !defined yyoverflow || YYERROR_VERBOSE
+ /*-------------------------------------------------.
+ | yyexhaustedlab -- memory exhaustion comes here.  |
+ `-------------------------------------------------*/
+@@ -8573,17 +8699,22 @@
+ #endif
+ 
+ yyreturn:
+-  if (yychar != YYEOF && yychar != YYEMPTY)
+-     yydestruct ("Cleanup: discarding lookahead",
+-		 yytoken, &yylval);
+-  /* Do not reclaim the symbols of the rule which action triggered
++  if (yychar != YYEMPTY)
++    {
++      /* Make sure we have latest lookahead translation.  See comments at
++         user semantic actions for why this is necessary.  */
++      yytoken = YYTRANSLATE (yychar);
++      yydestruct ("Cleanup: discarding lookahead",
++                  yytoken, &yylval);
++    }
++  /* Do not reclaim the symbols of the rule whose action triggered
+      this YYABORT or YYACCEPT.  */
+   YYPOPSTACK (yylen);
+   YY_STACK_PRINT (yyss, yyssp);
+   while (yyssp != yyss)
+     {
+       yydestruct ("Cleanup: popping",
+-		  yystos[*yyssp], yyvsp);
++                  yystos[*yyssp], yyvsp);
+       YYPOPSTACK (1);
+     }
+ #ifndef yyoverflow
+@@ -8594,12 +8725,9 @@
+   if (yymsg != yymsgbuf)
+     YYSTACK_FREE (yymsg);
+ #endif
+-  /* Make sure YYID is used.  */
+-  return YYID (yyresult);
++  return yyresult;
+ }
+-
+-
+-#line 4742 "sip-4.19.12/sipgen/metasrc/parser.y"
++#line 4742 "sipgen/metasrc/parser.y" /* yacc.c:1906  */
+ 
+ 
+ 
+@@ -13483,4 +13611,3 @@
+         if (sd->args[a].atype == ellipsis_type && a < sd->nrArgs - 1)
+             yyerror("An ellipsis must be at the end of the argument list if /NoArgParser/ is not specified");
+ }
+-
+diff -Nurd '--exclude=doc' '--exclude=.hg*' ./sip-4.19.12.orig/sipgen/parser.h sip/sipgen/parser.h
+--- ./sip-4.19.12.orig/sipgen/parser.h	2018-07-05 05:55:19.000000000 -0400
++++ sip/sipgen/parser.h	2018-09-18 18:12:23.642053256 -0400
+@@ -1,14 +1,13 @@
+-/* A Bison parser, made by GNU Bison 2.3.  */
++/* A Bison parser, made by GNU Bison 3.0.4.  */
+ 
+-/* Skeleton interface for Bison's Yacc-like parsers in C
++/* Bison interface for Yacc-like parsers in C
+ 
+-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+-   Free Software Foundation, Inc.
++   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
+ 
+-   This program is free software; you can redistribute it and/or modify
++   This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+-   the Free Software Foundation; either version 2, or (at your option)
+-   any later version.
++   the Free Software Foundation, either version 3 of the License, or
++   (at your option) any later version.
+ 
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+@@ -16,9 +15,7 @@
+    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, you may create a larger work that contains
+    part or all of the Bison parser skeleton and distribute that work
+@@ -33,162 +30,171 @@
+    This special exception was added by the Free Software Foundation in
+    version 2.2 of Bison.  */
+ 
+-/* Tokens.  */
++#ifndef YY_YY_SIPGEN_PARSER_H_INCLUDED
++# define YY_YY_SIPGEN_PARSER_H_INCLUDED
++/* Debug traces.  */
++#ifndef YYDEBUG
++# define YYDEBUG 0
++#endif
++#if YYDEBUG
++extern int yydebug;
++#endif
++
++/* Token type.  */
+ #ifndef YYTOKENTYPE
+ # define YYTOKENTYPE
+-   /* Put the tokens into the symbol table, so that GDB and other debuggers
+-      know about them.  */
+-   enum yytokentype {
+-     TK_API = 258,
+-     TK_AUTOPYNAME = 259,
+-     TK_DEFDOCSTRFMT = 260,
+-     TK_DEFDOCSTRSIG = 261,
+-     TK_DEFENCODING = 262,
+-     TK_PLUGIN = 263,
+-     TK_VIRTERRORHANDLER = 264,
+-     TK_EXPTYPEHINTCODE = 265,
+-     TK_TYPEHINTCODE = 266,
+-     TK_DOCSTRING = 267,
+-     TK_DOC = 268,
+-     TK_EXPORTEDDOC = 269,
+-     TK_EXTRACT = 270,
+-     TK_MAKEFILE = 271,
+-     TK_ACCESSCODE = 272,
+-     TK_GETCODE = 273,
+-     TK_SETCODE = 274,
+-     TK_PREINITCODE = 275,
+-     TK_INITCODE = 276,
+-     TK_POSTINITCODE = 277,
+-     TK_FINALCODE = 278,
+-     TK_UNITCODE = 279,
+-     TK_UNITPOSTINCLUDECODE = 280,
+-     TK_MODCODE = 281,
+-     TK_TYPECODE = 282,
+-     TK_PREPYCODE = 283,
+-     TK_COPYING = 284,
+-     TK_MAPPEDTYPE = 285,
+-     TK_CODELINE = 286,
+-     TK_IF = 287,
+-     TK_END = 288,
+-     TK_NAME_VALUE = 289,
+-     TK_PATH_VALUE = 290,
+-     TK_STRING_VALUE = 291,
+-     TK_VIRTUALCATCHERCODE = 292,
+-     TK_TRAVERSECODE = 293,
+-     TK_CLEARCODE = 294,
+-     TK_GETBUFFERCODE = 295,
+-     TK_RELEASEBUFFERCODE = 296,
+-     TK_READBUFFERCODE = 297,
+-     TK_WRITEBUFFERCODE = 298,
+-     TK_SEGCOUNTCODE = 299,
+-     TK_CHARBUFFERCODE = 300,
+-     TK_PICKLECODE = 301,
+-     TK_VIRTUALCALLCODE = 302,
+-     TK_METHODCODE = 303,
+-     TK_PREMETHODCODE = 304,
+-     TK_INSTANCECODE = 305,
+-     TK_FROMTYPE = 306,
+-     TK_TOTYPE = 307,
+-     TK_TOSUBCLASS = 308,
+-     TK_INCLUDE = 309,
+-     TK_OPTINCLUDE = 310,
+-     TK_IMPORT = 311,
+-     TK_EXPHEADERCODE = 312,
+-     TK_MODHEADERCODE = 313,
+-     TK_TYPEHEADERCODE = 314,
+-     TK_MODULE = 315,
+-     TK_CMODULE = 316,
+-     TK_CONSMODULE = 317,
+-     TK_COMPOMODULE = 318,
+-     TK_CLASS = 319,
+-     TK_STRUCT = 320,
+-     TK_PUBLIC = 321,
+-     TK_PROTECTED = 322,
+-     TK_PRIVATE = 323,
+-     TK_SIGNALS = 324,
+-     TK_SIGNAL_METHOD = 325,
+-     TK_SLOTS = 326,
+-     TK_SLOT_METHOD = 327,
+-     TK_BOOL = 328,
+-     TK_SHORT = 329,
+-     TK_INT = 330,
+-     TK_LONG = 331,
+-     TK_FLOAT = 332,
+-     TK_DOUBLE = 333,
+-     TK_CHAR = 334,
+-     TK_WCHAR_T = 335,
+-     TK_VOID = 336,
+-     TK_PYOBJECT = 337,
+-     TK_PYTUPLE = 338,
+-     TK_PYLIST = 339,
+-     TK_PYDICT = 340,
+-     TK_PYCALLABLE = 341,
+-     TK_PYSLICE = 342,
+-     TK_PYTYPE = 343,
+-     TK_PYBUFFER = 344,
+-     TK_VIRTUAL = 345,
+-     TK_ENUM = 346,
+-     TK_SIGNED = 347,
+-     TK_UNSIGNED = 348,
+-     TK_SCOPE = 349,
+-     TK_LOGICAL_OR = 350,
+-     TK_CONST = 351,
+-     TK_STATIC = 352,
+-     TK_SIPSIGNAL = 353,
+-     TK_SIPSLOT = 354,
+-     TK_SIPANYSLOT = 355,
+-     TK_SIPRXCON = 356,
+-     TK_SIPRXDIS = 357,
+-     TK_SIPSLOTCON = 358,
+-     TK_SIPSLOTDIS = 359,
+-     TK_SIPSSIZET = 360,
+-     TK_NUMBER_VALUE = 361,
+-     TK_REAL_VALUE = 362,
+-     TK_TYPEDEF = 363,
+-     TK_NAMESPACE = 364,
+-     TK_TIMELINE = 365,
+-     TK_PLATFORMS = 366,
+-     TK_FEATURE = 367,
+-     TK_LICENSE = 368,
+-     TK_QCHAR_VALUE = 369,
+-     TK_TRUE_VALUE = 370,
+-     TK_FALSE_VALUE = 371,
+-     TK_NULL_VALUE = 372,
+-     TK_OPERATOR = 373,
+-     TK_THROW = 374,
+-     TK_QOBJECT = 375,
+-     TK_EXCEPTION = 376,
+-     TK_RAISECODE = 377,
+-     TK_VIRTERRORCODE = 378,
+-     TK_EXPLICIT = 379,
+-     TK_TEMPLATE = 380,
+-     TK_FINAL = 381,
+-     TK_ELLIPSIS = 382,
+-     TK_DEFMETATYPE = 383,
+-     TK_DEFSUPERTYPE = 384,
+-     TK_PROPERTY = 385,
+-     TK_HIDE_NS = 386,
+-     TK_FORMAT = 387,
+-     TK_GET = 388,
+-     TK_ID = 389,
+-     TK_KWARGS = 390,
+-     TK_LANGUAGE = 391,
+-     TK_LICENSEE = 392,
+-     TK_NAME = 393,
+-     TK_OPTIONAL = 394,
+-     TK_ORDER = 395,
+-     TK_REMOVELEADING = 396,
+-     TK_SET = 397,
+-     TK_SIGNATURE = 398,
+-     TK_TIMESTAMP = 399,
+-     TK_TYPE = 400,
+-     TK_USEARGNAMES = 401,
+-     TK_USELIMITEDAPI = 402,
+-     TK_ALLRAISEPYEXC = 403,
+-     TK_CALLSUPERINIT = 404,
+-     TK_DEFERRORHANDLER = 405,
+-     TK_VERSION = 406
+-   };
++  enum yytokentype
++  {
++    TK_API = 258,
++    TK_AUTOPYNAME = 259,
++    TK_DEFDOCSTRFMT = 260,
++    TK_DEFDOCSTRSIG = 261,
++    TK_DEFENCODING = 262,
++    TK_PLUGIN = 263,
++    TK_VIRTERRORHANDLER = 264,
++    TK_EXPTYPEHINTCODE = 265,
++    TK_TYPEHINTCODE = 266,
++    TK_DOCSTRING = 267,
++    TK_DOC = 268,
++    TK_EXPORTEDDOC = 269,
++    TK_EXTRACT = 270,
++    TK_MAKEFILE = 271,
++    TK_ACCESSCODE = 272,
++    TK_GETCODE = 273,
++    TK_SETCODE = 274,
++    TK_PREINITCODE = 275,
++    TK_INITCODE = 276,
++    TK_POSTINITCODE = 277,
++    TK_FINALCODE = 278,
++    TK_UNITCODE = 279,
++    TK_UNITPOSTINCLUDECODE = 280,
++    TK_MODCODE = 281,
++    TK_TYPECODE = 282,
++    TK_PREPYCODE = 283,
++    TK_COPYING = 284,
++    TK_MAPPEDTYPE = 285,
++    TK_CODELINE = 286,
++    TK_IF = 287,
++    TK_END = 288,
++    TK_NAME_VALUE = 289,
++    TK_PATH_VALUE = 290,
++    TK_STRING_VALUE = 291,
++    TK_VIRTUALCATCHERCODE = 292,
++    TK_TRAVERSECODE = 293,
++    TK_CLEARCODE = 294,
++    TK_GETBUFFERCODE = 295,
++    TK_RELEASEBUFFERCODE = 296,
++    TK_READBUFFERCODE = 297,
++    TK_WRITEBUFFERCODE = 298,
++    TK_SEGCOUNTCODE = 299,
++    TK_CHARBUFFERCODE = 300,
++    TK_PICKLECODE = 301,
++    TK_VIRTUALCALLCODE = 302,
++    TK_METHODCODE = 303,
++    TK_PREMETHODCODE = 304,
++    TK_INSTANCECODE = 305,
++    TK_FROMTYPE = 306,
++    TK_TOTYPE = 307,
++    TK_TOSUBCLASS = 308,
++    TK_INCLUDE = 309,
++    TK_OPTINCLUDE = 310,
++    TK_IMPORT = 311,
++    TK_EXPHEADERCODE = 312,
++    TK_MODHEADERCODE = 313,
++    TK_TYPEHEADERCODE = 314,
++    TK_MODULE = 315,
++    TK_CMODULE = 316,
++    TK_CONSMODULE = 317,
++    TK_COMPOMODULE = 318,
++    TK_CLASS = 319,
++    TK_STRUCT = 320,
++    TK_PUBLIC = 321,
++    TK_PROTECTED = 322,
++    TK_PRIVATE = 323,
++    TK_SIGNALS = 324,
++    TK_SIGNAL_METHOD = 325,
++    TK_SLOTS = 326,
++    TK_SLOT_METHOD = 327,
++    TK_BOOL = 328,
++    TK_SHORT = 329,
++    TK_INT = 330,
++    TK_LONG = 331,
++    TK_FLOAT = 332,
++    TK_DOUBLE = 333,
++    TK_CHAR = 334,
++    TK_WCHAR_T = 335,
++    TK_VOID = 336,
++    TK_PYOBJECT = 337,
++    TK_PYTUPLE = 338,
++    TK_PYLIST = 339,
++    TK_PYDICT = 340,
++    TK_PYCALLABLE = 341,
++    TK_PYSLICE = 342,
++    TK_PYTYPE = 343,
++    TK_PYBUFFER = 344,
++    TK_VIRTUAL = 345,
++    TK_ENUM = 346,
++    TK_SIGNED = 347,
++    TK_UNSIGNED = 348,
++    TK_SCOPE = 349,
++    TK_LOGICAL_OR = 350,
++    TK_CONST = 351,
++    TK_STATIC = 352,
++    TK_SIPSIGNAL = 353,
++    TK_SIPSLOT = 354,
++    TK_SIPANYSLOT = 355,
++    TK_SIPRXCON = 356,
++    TK_SIPRXDIS = 357,
++    TK_SIPSLOTCON = 358,
++    TK_SIPSLOTDIS = 359,
++    TK_SIPSSIZET = 360,
++    TK_NUMBER_VALUE = 361,
++    TK_REAL_VALUE = 362,
++    TK_TYPEDEF = 363,
++    TK_NAMESPACE = 364,
++    TK_TIMELINE = 365,
++    TK_PLATFORMS = 366,
++    TK_FEATURE = 367,
++    TK_LICENSE = 368,
++    TK_QCHAR_VALUE = 369,
++    TK_TRUE_VALUE = 370,
++    TK_FALSE_VALUE = 371,
++    TK_NULL_VALUE = 372,
++    TK_OPERATOR = 373,
++    TK_THROW = 374,
++    TK_QOBJECT = 375,
++    TK_EXCEPTION = 376,
++    TK_RAISECODE = 377,
++    TK_VIRTERRORCODE = 378,
++    TK_EXPLICIT = 379,
++    TK_TEMPLATE = 380,
++    TK_FINAL = 381,
++    TK_ELLIPSIS = 382,
++    TK_DEFMETATYPE = 383,
++    TK_DEFSUPERTYPE = 384,
++    TK_PROPERTY = 385,
++    TK_HIDE_NS = 386,
++    TK_FORMAT = 387,
++    TK_GET = 388,
++    TK_ID = 389,
++    TK_KWARGS = 390,
++    TK_LANGUAGE = 391,
++    TK_LICENSEE = 392,
++    TK_NAME = 393,
++    TK_OPTIONAL = 394,
++    TK_ORDER = 395,
++    TK_REMOVELEADING = 396,
++    TK_SET = 397,
++    TK_SIGNATURE = 398,
++    TK_TIMESTAMP = 399,
++    TK_TYPE = 400,
++    TK_USEARGNAMES = 401,
++    TK_USELIMITEDAPI = 402,
++    TK_ALLRAISEPYEXC = 403,
++    TK_CALLSUPERINIT = 404,
++    TK_DEFERRORHANDLER = 405,
++    TK_VERSION = 406
++  };
+ #endif
+ /* Tokens.  */
+ #define TK_API 258
+@@ -341,13 +347,13 @@
+ #define TK_DEFERRORHANDLER 405
+ #define TK_VERSION 406
+ 
+-
+-
+-
++/* Value type.  */
+ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+-typedef union YYSTYPE
+-#line 203 "sip-4.19.12/sipgen/metasrc/parser.y"
++
++union YYSTYPE
+ {
++#line 203 "sipgen/metasrc/parser.y" /* yacc.c:1909  */
++
+     char            qchar;
+     char            *text;
+     long            number;
+@@ -390,14 +396,18 @@
+     variableCfg     variable;
+     vehCfg          veh;
+     int             token;
+-}
+-/* Line 1529 of yacc.c.  */
+-#line 396 "sip-4.19.12/sipgen/parser.h"
+-	YYSTYPE;
+-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+-# define YYSTYPE_IS_DECLARED 1
++
++#line 401 "sipgen/parser.h" /* yacc.c:1909  */
++};
++
++typedef union YYSTYPE YYSTYPE;
+ # define YYSTYPE_IS_TRIVIAL 1
++# define YYSTYPE_IS_DECLARED 1
+ #endif
+ 
++
+ extern YYSTYPE yylval;
+ 
++int yyparse (void);
++
++#endif /* !YY_YY_SIPGEN_PARSER_H_INCLUDED  */
+diff -Nurd '--exclude=doc' '--exclude=.hg*' ./sip-4.19.12.orig/sipgen/sip.h sip/sipgen/sip.h
+--- ./sip-4.19.12.orig/sipgen/sip.h	2018-07-05 05:55:19.000000000 -0400
++++ sip/sipgen/sip.h	2018-09-18 18:12:23.643053242 -0400
+@@ -27,8 +27,8 @@
+ /*
+  * Define the SIP version number.
+  */
+-#define SIP_VERSION         0x04130c
+-#define SIP_VERSION_STR     "4.19.12"
++#define SIP_VERSION         0x04ffff
++#define SIP_VERSION_STR     "4.255.255"
+ 
+ 
+ #ifdef TRUE
+diff -Nurd '--exclude=doc' '--exclude=.hg*' ./sip-4.19.12.orig/sipgen/sip.h.in sip/sipgen/sip.h.in
+--- ./sip-4.19.12.orig/sipgen/sip.h.in	1969-12-31 19:00:00.000000000 -0500
++++ sip/sipgen/sip.h.in	2018-09-24 13:12:20.674276069 -0400
+@@ -0,0 +1,1653 @@
++/*
++ * The main header file for SIP.
++ *
++ * Copyright (c) 2018 Riverbank Computing Limited <info at riverbankcomputing.com>
++ *
++ * This file is part of SIP.
++ *
++ * This copy of SIP is licensed for use under the terms of the SIP License
++ * Agreement.  See the file LICENSE for more details.
++ *
++ * This copy of SIP may also used under the terms of the GNU General Public
++ * License v2 or v3 as published by the Free Software Foundation which can be
++ * found in the files LICENSE-GPL2 and LICENSE-GPL3 included in this package.
++ *
++ * SIP is supplied WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
++ */
++
++
++#ifndef SIP_H
++#define SIP_H
++
++#include <stdio.h>
++#include <sys/types.h>
++
++
++/*
++ * Define the SIP version number.
++ */
++#define SIP_VERSION         0x at RM_HEXVERSION@
++#define SIP_VERSION_STR     "@RM_RELEASE@"
++
++
++#ifdef TRUE
++#undef TRUE
++#endif
++
++#ifdef FALSE
++#undef FALSE
++#endif
++
++#define TRUE    1
++#define FALSE   0
++
++
++/* Some convenient compiler extensions. */
++
++#if defined(__GNUC__)
++#define SIP_NORETURN    __attribute__((__noreturn__))
++#define SIP_UNUSED      __attribute__((__unused__))
++#elif defined(_MSC_VER)
++#define SIP_NORETURN    __declspec(noreturn)
++#endif
++
++#if !defined(SIP_NORETURN)
++#define SIP_NORETURN
++#endif
++#if !defined(SIP_UNUSED)
++#define SIP_UNUSED
++#endif
++
++
++#define DEFAULT_OFILE_EXT   ".o"    /* Default object file extension. */
++
++#define MAX_NR_ARGS         20      /* Max. nr. args. to a function or template. */
++#define MAX_NR_DEREFS       5       /* Max. nr. type derefences. */
++
++
++/* For convenience. */
++
++#define classBaseName(cd)   scopedNameTail((cd)->iff->fqcname)
++#define classFQCName(cd)    ((cd)->iff->fqcname)
++
++/* Return the Python scope corresponding to a C/C++ scope. */
++#define pyScope(c)          ((c) != NULL && isHiddenNamespace(c) ? NULL : (c))
++
++
++/* Handle module flags. */
++
++#define MOD_HAS_DELAYED_DTORS   0x0001  /* It has a class with a delayed dtor. */
++#define MOD_IS_CONSOLIDATED     0x0002  /* It is a consolidated module. */
++#define MOD_IS_COMPOSITE        0x0004  /* It is a composite module. */
++#define MOD_IS_TRANSFORMED      0x0008  /* It's types have been transformed. */
++#define MOD_USE_ARG_NAMES       0x0010  /* Use real argument names. */
++#define MOD_USE_LIMITED_API     0x0020  /* Use the limited API. */
++#define MOD_ALL_RAISE_PY_EXC    0x0040  /* All callable raise a Python exception. */
++#define MOD_SUPER_INIT_NO       0x0080  /* Don't call super().__init__(). */
++#define MOD_SUPER_INIT_YES      0x0100  /* Call super().__init__(). */
++#define MOD_SUPER_INIT_UNDEF    0x0000  /* Calling super().__init__() is undefined. */
++#define MOD_SUPER_INIT_MASK     0x0180  /* The mask for the above flags. */
++#define MOD_SETTING_IMPORTS     0x0200  /* Imports are being set. */
++
++#define hasDelayedDtors(m)  ((m)->modflags & MOD_HAS_DELAYED_DTORS)
++#define setHasDelayedDtors(m)   ((m)->modflags |= MOD_HAS_DELAYED_DTORS)
++#define isConsolidated(m)   ((m)->modflags & MOD_IS_CONSOLIDATED)
++#define setIsConsolidated(m)    ((m)->modflags |= MOD_IS_CONSOLIDATED)
++#define isComposite(m)      ((m)->modflags & MOD_IS_COMPOSITE)
++#define setIsComposite(m)   ((m)->modflags |= MOD_IS_COMPOSITE)
++#define isContainer(m)      ((m)->modflags & (MOD_IS_CONSOLIDATED | MOD_IS_COMPOSITE))
++#define setIsTransformed(m) ((m)->modflags |= MOD_IS_TRANSFORMED)
++#define isTransformed(m)    ((m)->modflags & MOD_IS_TRANSFORMED)
++#define setUseArgNames(m)   ((m)->modflags |= MOD_USE_ARG_NAMES)
++#define useArgNames(m)      ((m)->modflags & MOD_USE_ARG_NAMES)
++#define setUseLimitedAPI(m) ((m)->modflags |= MOD_USE_LIMITED_API)
++#define useLimitedAPI(m)    ((m)->modflags & MOD_USE_LIMITED_API)
++#define setAllRaisePyException(m)   ((m)->modflags |= MOD_ALL_RAISE_PY_EXC)
++#define allRaisePyException(m)  ((m)->modflags & MOD_ALL_RAISE_PY_EXC)
++#define setCallSuperInitNo(m)   ((m)->modflags = ((m)->modflags & ~MOD_SUPER_INIT_MASK) | MOD_SUPER_INIT_NO)
++#define setCallSuperInitYes(m)  ((m)->modflags = ((m)->modflags & ~MOD_SUPER_INIT_MASK) | MOD_SUPER_INIT_YES)
++#define isCallSuperInitYes(m)   (((m)->modflags & MOD_SUPER_INIT_MASK) == MOD_SUPER_INIT_YES)
++#define isCallSuperInitUndefined(m) (((m)->modflags & MOD_SUPER_INIT_MASK) == MOD_SUPER_INIT_UNDEF)
++#define settingImports(m)   ((m)->modflags & MOD_SETTING_IMPORTS)
++#define setSettingImports(m)    ((m)->modflags |= MOD_SETTING_IMPORTS)
++#define resetSettingImports(m)  ((m)->modflags &= ~MOD_SETTING_IMPORTS)
++
++
++/* Handle section flags. */
++
++#define SECT_IS_PUBLIC      0x01        /* It is public. */
++#define SECT_IS_PROT        0x02        /* It is protected. */
++#define SECT_IS_PRIVATE     0x04        /* It is private. */
++#define SECT_IS_SLOT        0x08        /* It is a slot. */
++#define SECT_IS_SIGNAL      0x10        /* It is a signal. */
++#define SECT_MASK           0x1f        /* The mask of all flags. */
++
++
++/* Handle class flags.  These are combined with the section flags. */
++
++#define CLASS_HAS_SIGSLOTS  0x00000200  /* It has signals or slots. */
++#define CLASS_IS_ABSTRACT   0x00000400  /* It is an abstract class. */
++#define CLASS_HAS_SHADOW    0x00000800  /* It is has a shadow class. */
++#define CLASS_IS_OPAQUE     0x00001000  /* It is opaque. */
++#define CLASS_HAS_VAR_HANDLERS  0x00002000  /* It has variable handlers. */
++#define CLASS_DTOR_RELEASE_GIL  0x00004000  /* The dtor releases the GIL. */
++#define CLASS_IS_PROTECTED  0x00008000  /* It is protected. */
++#define CLASS_IS_PROTECTED_SAV  0x00010000  /* It is protected (saved). */
++#define CLASS_IS_INCOMPLETE 0x00020000  /* The specification is incomplete. */
++#define CLASS_CAN_CREATE    0x00040000  /* It has usable ctors. */
++#define CLASS_IS_EXTERNAL   0x00080000  /* It is external. */
++#define CLASS_IS_DELAYED_DTOR   0x00100000  /* The dtor is delayed. */
++#define CLASS_NO_DEFAULT_CTORS  0x00200000  /* Don't create default ctors. */
++#define CLASS_QOBJECT_SUB   0x00400000  /* It is derived from QObject. */
++#define CLASS_DTOR_HOLD_GIL 0x00800000  /* The dtor holds the GIL. */
++#define CLASS_ASSIGN_HELPER 0x01000000  /* Generate an assignment helper. */
++#define CLASS_NO_QMETAOBJECT    0x02000000  /* It has no QMetaObject. */
++#define CLASS_IS_TEMPLATE   0x04000000  /* It is a template class. */
++#define CLASS_IS_DEPRECATED 0x08000000  /* It is deprecated. */
++#define CLASS_CANNOT_COPY   0x10000000  /* It cannot be copied. */
++#define CLASS_CANNOT_ASSIGN 0x20000000  /* It cannot be assigned. */
++#define CLASS_ALLOW_NONE    0x40000000  /* The class will handle None. */
++#define CLASS_HAS_NONLAZY   0x80000000  /* The class has non-lazy methods. */
++
++#define hasSigSlots(cd)     ((cd)->classflags & CLASS_HAS_SIGSLOTS)
++#define setHasSigSlots(cd)  ((cd)->classflags |= CLASS_HAS_SIGSLOTS)
++#define isAbstractClass(cd) ((cd)->classflags & CLASS_IS_ABSTRACT)
++#define setIsAbstractClass(cd)  ((cd)->classflags |= CLASS_IS_ABSTRACT)
++#define hasShadow(cd)       ((cd)->classflags & CLASS_HAS_SHADOW)
++#define setHasShadow(cd)    ((cd)->classflags |= CLASS_HAS_SHADOW)
++#define resetHasShadow(cd)  ((cd)->classflags &= ~CLASS_HAS_SHADOW)
++#define isOpaque(cd)        ((cd)->classflags & CLASS_IS_OPAQUE)
++#define setIsOpaque(cd)     ((cd)->classflags |= CLASS_IS_OPAQUE)
++#define hasVarHandlers(cd)  ((cd)->classflags & CLASS_HAS_VAR_HANDLERS)
++#define setHasVarHandlers(cd)   ((cd)->classflags |= CLASS_HAS_VAR_HANDLERS)
++#define isProtectedClass(cd)    ((cd)->classflags & CLASS_IS_PROTECTED)
++#define setIsProtectedClass(cd) ((cd)->classflags |= CLASS_IS_PROTECTED)
++#define resetIsProtectedClass(cd)   ((cd)->classflags &= ~CLASS_IS_PROTECTED)
++#define wasProtectedClass(cd)   ((cd)->classflags & CLASS_IS_PROTECTED_SAV)
++#define setWasProtectedClass(cd)    ((cd)->classflags |= CLASS_IS_PROTECTED_SAV)
++#define resetWasProtectedClass(cd)  ((cd)->classflags &= ~CLASS_IS_PROTECTED_SAV)
++#define isReleaseGILDtor(cd)    ((cd)->classflags & CLASS_DTOR_RELEASE_GIL)
++#define setIsReleaseGILDtor(cd) ((cd)->classflags |= CLASS_DTOR_RELEASE_GIL)
++#define isIncomplete(cd)    ((cd)->classflags & CLASS_IS_INCOMPLETE)
++#define setIsIncomplete(cd) ((cd)->classflags |= CLASS_IS_INCOMPLETE)
++#define canCreate(cd)       ((cd)->classflags & CLASS_CAN_CREATE)
++#define setCanCreate(cd)    ((cd)->classflags |= CLASS_CAN_CREATE)
++#define resetCanCreate(cd)  ((cd)->classflags &= ~CLASS_CAN_CREATE)
++#define isExternal(cd)      ((cd)->classflags & CLASS_IS_EXTERNAL)
++#define setIsExternal(cd)   ((cd)->classflags |= CLASS_IS_EXTERNAL)
++#define isDelayedDtor(cd)   ((cd)->classflags & CLASS_IS_DELAYED_DTOR)
++#define setIsDelayedDtor(cd)    ((cd)->classflags |= CLASS_IS_DELAYED_DTOR)
++#define noDefaultCtors(cd)  ((cd)->classflags & CLASS_NO_DEFAULT_CTORS)
++#define setNoDefaultCtors(cd)   ((cd)->classflags |= CLASS_NO_DEFAULT_CTORS)
++#define isQObjectSubClass(cd)   ((cd)->classflags & CLASS_QOBJECT_SUB)
++#define setIsQObjectSubClass(cd)    ((cd)->classflags |= CLASS_QOBJECT_SUB)
++#define isHoldGILDtor(cd)   ((cd)->classflags & CLASS_DTOR_HOLD_GIL)
++#define setIsHoldGILDtor(cd) ((cd)->classflags |= CLASS_DTOR_HOLD_GIL)
++#define assignmentHelper(cd) ((cd)->classflags & CLASS_ASSIGN_HELPER)
++#define setAssignmentHelper(cd) ((cd)->classflags |= CLASS_ASSIGN_HELPER)
++#define noPyQtQMetaObject(cd)   ((cd)->classflags & CLASS_NO_QMETAOBJECT)
++#define setPyQtNoQMetaObject(cd)    ((cd)->classflags |= CLASS_NO_QMETAOBJECT)
++#define isTemplateClass(cd) ((cd)->classflags & CLASS_IS_TEMPLATE)
++#define setIsTemplateClass(cd)  ((cd)->classflags |= CLASS_IS_TEMPLATE)
++#define resetIsTemplateClass(cd)    ((cd)->classflags &= ~CLASS_IS_TEMPLATE)
++#define isDeprecatedClass(cd)   ((cd)->classflags & CLASS_IS_DEPRECATED)
++#define setIsDeprecatedClass(cd)    ((cd)->classflags |= CLASS_IS_DEPRECATED)
++#define cannotCopy(cd)      ((cd)->classflags & CLASS_CANNOT_COPY)
++#define setCannotCopy(cd)   ((cd)->classflags |= CLASS_CANNOT_COPY)
++#define cannotAssign(cd)    ((cd)->classflags & CLASS_CANNOT_ASSIGN)
++#define setCannotAssign(cd) ((cd)->classflags |= CLASS_CANNOT_ASSIGN)
++#define classHandlesNone(cd)    ((cd)->classflags & CLASS_ALLOW_NONE)
++#define setClassHandlesNone(cd) ((cd)->classflags |= CLASS_ALLOW_NONE)
++#define hasNonlazyMethod(cd)    ((cd)->classflags & CLASS_HAS_NONLAZY)
++#define setHasNonlazyMethod(cd) ((cd)->classflags |= CLASS_HAS_NONLAZY)
++
++#define isPublicDtor(cd)    ((cd)->classflags & SECT_IS_PUBLIC)
++#define setIsPublicDtor(cd) ((cd)->classflags |= SECT_IS_PUBLIC)
++#define isProtectedDtor(cd) ((cd)->classflags & SECT_IS_PROT)
++#define isPrivateDtor(cd)   ((cd)->classflags & SECT_IS_PRIVATE)
++
++#define isDtor(cd)          ((cd)->classflags & (SECT_IS_PUBLIC | SECT_IS_PROT | SECT_IS_PRIVATE))
++
++
++/* Handle the second group of class flags. */
++
++#define CLASS2_TMPL_ARG     0x01        /* The class is a template argument. */
++#define CLASS2_MIXIN        0x02        /* The class is a mixin. */
++#define CLASS2_EXPORT_DERIVED   0x04    /* Export the derived class declaration. */
++#define CLASS2_HIDDEN_NS    0x08        /* The namespace is hidden. */
++#define CLASS2_USE_TMPL_NAME    0x10    /* Use the template name. */
++#define CLASS2_NEEDS_SHADOW 0x20        /* The class needs a shadow class. */
++
++#define isTemplateArg(cd)   ((cd)->classflags2 & CLASS2_TMPL_ARG)
++#define setTemplateArg(cd)  ((cd)->classflags2 |= CLASS2_TMPL_ARG)
++#define resetTemplateArg(cd)    ((cd)->classflags2 &= ~CLASS2_TMPL_ARG)
++#define isMixin(cd)         ((cd)->classflags2 & CLASS2_MIXIN)
++#define setMixin(cd)        ((cd)->classflags2 |= CLASS2_MIXIN)
++#define isExportDerived(cd) ((cd)->classflags2 & CLASS2_EXPORT_DERIVED)
++#define setExportDerived(cd)    ((cd)->classflags2 |= CLASS2_EXPORT_DERIVED)
++#define isHiddenNamespace(cd)   ((cd)->classflags2 & CLASS2_HIDDEN_NS)
++#define setHiddenNamespace(cd)  ((cd)->classflags2 |= CLASS2_HIDDEN_NS)
++#define useTemplateName(cd) ((cd)->classflags2 & CLASS2_USE_TMPL_NAME)
++#define setUseTemplateName(cd)  ((cd)->classflags2 |= CLASS2_USE_TMPL_NAME)
++#define needsShadow(cd)      ((cd)->classflags & CLASS2_NEEDS_SHADOW)
++#define setNeedsShadow(cd)   ((cd)->classflags |= CLASS2_NEEDS_SHADOW)
++
++
++/* Handle ctor flags.  These are combined with the section flags. */
++
++#define CTOR_RELEASE_GIL    0x00000100  /* The ctor releases the GIL. */
++#define CTOR_EXPLICIT       0x00000200  /* The ctor is explicit. */
++#define CTOR_CAST           0x00000400  /* The ctor is a cast. */
++#define CTOR_HOLD_GIL       0x00000800  /* The ctor holds the GIL. */
++#define CTOR_XFERRED        0x00001000  /* Ownership is transferred. */
++#define CTOR_IS_DEPRECATED  0x00002000  /* The ctor is deprecated. */
++#define CTOR_RAISES_PY_EXC  0x00004000  /* It raises a Python exception. */
++
++#define isPublicCtor(c)     ((c)->ctorflags & SECT_IS_PUBLIC)
++#define setIsPublicCtor(c)  ((c)->ctorflags |= SECT_IS_PUBLIC)
++#define isProtectedCtor(c)  ((c)->ctorflags & SECT_IS_PROT)
++#define setIsProtectedCtor(c)   ((c)->ctorflags |= SECT_IS_PROT)
++#define isPrivateCtor(c)    ((c)->ctorflags & SECT_IS_PRIVATE)
++#define setIsPrivateCtor(c) ((c)->ctorflags |= SECT_IS_PRIVATE)
++
++#define isReleaseGILCtor(c) ((c)->ctorflags & CTOR_RELEASE_GIL)
++#define setIsReleaseGILCtor(c)  ((c)->ctorflags |= CTOR_RELEASE_GIL)
++#define isExplicitCtor(c)   ((c)->ctorflags & CTOR_EXPLICIT)
++#define setIsExplicitCtor(c)    ((c)->ctorflags |= CTOR_EXPLICIT)
++#define isCastCtor(c)       ((c)->ctorflags & CTOR_CAST)
++#define isHoldGILCtor(c)    ((c)->ctorflags & CTOR_HOLD_GIL)
++#define setIsHoldGILCtor(c) ((c)->ctorflags |= CTOR_HOLD_GIL)
++#define isResultTransferredCtor(c)  ((c)->ctorflags & CTOR_XFERRED)
++#define setIsResultTransferredCtor(c)   ((c)->ctorflags |= CTOR_XFERRED)
++#define isDeprecatedCtor(c) ((c)->ctorflags & CTOR_IS_DEPRECATED)
++#define setIsDeprecatedCtor(c)  ((c)->ctorflags |= CTOR_IS_DEPRECATED)
++#define raisesPyExceptionCtor(c)    ((c)->ctorflags & CTOR_RAISES_PY_EXC)
++#define setRaisesPyExceptionCtor(c) ((c)->ctorflags |= CTOR_RAISES_PY_EXC)
++
++
++/* Handle member flags. */
++
++#define MEMBR_NUMERIC       0x0001      /* It is a numeric slot. */
++#define MEMBR_SEQUENCE      0x0002      /* It is a sequnce slot. */
++#define MEMBR_NO_ARG_PARSER 0x0004      /* Don't generate an argument parser. */
++#define MEMBR_NOT_VERSIONED 0x0008      /* There is an unversioned overload. */
++#define MEMBR_KEYWORD_ARGS  0x0010      /* It allows keyword arguments. */
++#define MEMBR_HAS_PROTECTED 0x0011      /* It has a protected overload. */
++
++#define isNumeric(m)        ((m)->memberflags & MEMBR_NUMERIC)
++#define setIsNumeric(m)     ((m)->memberflags |= MEMBR_NUMERIC)
++#define isSequence(m)       ((m)->memberflags & MEMBR_SEQUENCE)
++#define setIsSequence(m)    ((m)->memberflags |= MEMBR_SEQUENCE)
++#define noArgParser(m)      ((m)->memberflags & MEMBR_NO_ARG_PARSER)
++#define setNoArgParser(m)   ((m)->memberflags |= MEMBR_NO_ARG_PARSER)
++#define notVersioned(m)     ((m)->memberflags & MEMBR_NOT_VERSIONED)
++#define setNotVersioned(m)  ((m)->memberflags |= MEMBR_NOT_VERSIONED)
++#define useKeywordArgs(m)   ((m)->memberflags & MEMBR_KEYWORD_ARGS)
++#define setUseKeywordArgs(m)    ((m)->memberflags |= MEMBR_KEYWORD_ARGS)
++#define hasProtected(m)     ((m)->memberflags & MEMBR_HAS_PROTECTED)
++#define setHasProtected(m)  ((m)->memberflags |= MEMBR_HAS_PROTECTED)
++
++
++/* Handle enum flags.  These are combined with the section flags. */
++
++#define ENUM_WAS_PROT       0x00000100  /* It was defined as protected. */
++#define ENUM_NO_SCOPE       0x00000200  /* Omit the member scopes. */
++#define ENUM_NEEDS_ENUM     0x00000400  /* The module needs it. */
++#define ENUM_SCOPED         0x00000800  /* A C++0x11 scoped enum. */
++
++#define isProtectedEnum(e)  ((e)->enumflags & SECT_IS_PROT)
++#define setIsProtectedEnum(e)   ((e)->enumflags |= SECT_IS_PROT)
++#define resetIsProtectedEnum(e) ((e)->enumflags &= ~SECT_IS_PROT)
++
++#define wasProtectedEnum(e) ((e)->enumflags & ENUM_WAS_PROT)
++#define setWasProtectedEnum(e)  ((e)->enumflags |= ENUM_WAS_PROT)
++#define resetWasProtectedEnum(e)    ((e)->enumflags &= ~ENUM_WAS_PROT)
++#define isNoScope(e)        ((e)->enumflags & ENUM_NO_SCOPE)
++#define setIsNoScope(e)     ((e)->enumflags |= ENUM_NO_SCOPE)
++#define needsEnum(e)        ((e)->enumflags & ENUM_NEEDS_ENUM)
++#define setNeedsEnum(e)     ((e)->enumflags |= ENUM_NEEDS_ENUM)
++#define isScopedEnum(e)     ((e)->enumflags & ENUM_SCOPED)
++#define setIsScopedEnum(e)  ((e)->enumflags |= ENUM_SCOPED)
++
++
++/* Handle hierarchy flags. */
++
++#define HIER_IS_DUPLICATE   0x0001      /* It is a super class duplicate. */
++#define HIER_HAS_DUPLICATE  0x0002      /* It has a super class duplicate. */
++#define HIER_BEING_SET      0x0004      /* The MRO is being set. */
++
++#define isDuplicateSuper(m) ((m)->mroflags & HIER_IS_DUPLICATE)
++#define setIsDuplicateSuper(m)  ((m)->mroflags |= HIER_IS_DUPLICATE)
++#define hasDuplicateSuper(m)    ((m)->mroflags & HIER_HAS_DUPLICATE)
++#define setHasDuplicateSuper(m) ((m)->mroflags |= HIER_HAS_DUPLICATE)
++#define hierBeingSet(m)     ((m)->mroflags & HIER_BEING_SET)
++#define setHierBeingSet(m)  ((m)->mroflags |= HIER_BEING_SET)
++#define resetHierBeingSet(m)    ((m)->mroflags &= ~HIER_BEING_SET)
++
++
++/* Handle overload flags.  These are combined with the section flags. */
++
++#define OVER_IS_VIRTUAL     0x00000100  /* It is virtual. */
++#define OVER_IS_ABSTRACT    0x00000200  /* It is abstract. */
++#define OVER_IS_CONST       0x00000400  /* It is a const function. */
++#define OVER_IS_STATIC      0x00000800  /* It is a static function. */
++#define OVER_IS_AUTOGEN     0x00001000  /* It is auto-generated. */
++#define OVER_IS_NEW_THREAD  0x00002000  /* It is in a new thread. */
++#define OVER_IS_FACTORY     0x00004000  /* It is a factory method. */
++#define OVER_XFERRED_BACK   0x00008000  /* Ownership is transferred back. */
++#define OVER_XFERRED        0x00010000  /* Ownership is transferred. */
++#define OVER_IS_VIRTUAL_REIMP   0x00020000  /* It is a re-implementation of a virtual. */
++#define OVER_DONT_DEREF_SELF    0x00040000  /* For comparison operators, don't dereference self. */
++#define OVER_HOLD_GIL       0x00080000  /* The function holds the GIL. */
++#define OVER_RELEASE_GIL    0x00100000  /* The function releases the GIL. */
++#define OVER_THIS_XFERRED   0x00200000  /* Ownership of this is transferred. */
++#define OVER_IS_GLOBAL      0x00400000  /* It is a global operator. */
++#define OVER_IS_COMPLEMENTARY   0x00800000  /* It is a complementary operator. */
++#define OVER_IS_DEPRECATED  0x01000000  /* It is deprecated. */
++#define OVER_REALLY_PROT    0x02000000  /* It really is protected. */
++#define OVER_IS_DELATTR     0x04000000  /* It is __delattr__. */
++#define OVER_RAISES_PY_EXC  0x08000000  /* It raises a Python exception. */
++#define OVER_NO_ERROR_HANDLER   0x10000000  /* It doesn't use a virtual error handler. */
++#define OVER_ABORT_ON_EXC   0x20000000  /* It aborts on an exception. */
++#define OVER_IS_FINAL       0x40000000  /* It is a final method. */
++
++#define isPublic(o)         ((o)->overflags & SECT_IS_PUBLIC)
++#define setIsPublic(o)      ((o)->overflags |= SECT_IS_PUBLIC)
++#define isProtected(o)      ((o)->overflags & SECT_IS_PROT)
++#define setIsProtected(o)   ((o)->overflags |= SECT_IS_PROT)
++#define isPrivate(o)        ((o)->overflags & SECT_IS_PRIVATE)
++#define setIsPrivate(o)     ((o)->overflags |= SECT_IS_PRIVATE)
++#define isSlot(o)           ((o)->overflags & SECT_IS_SLOT)
++#define setIsSlot(o)        ((o)->overflags |= SECT_IS_SLOT)
++#define resetIsSlot(o)      ((o)->overflags &= ~SECT_IS_SLOT)
++#define isSignal(o)         ((o)->overflags & SECT_IS_SIGNAL)
++#define setIsSignal(o)      ((o)->overflags |= SECT_IS_SIGNAL)
++#define resetIsSignal(o)    ((o)->overflags &= ~SECT_IS_SIGNAL)
++
++#define isVirtual(o)        ((o)->overflags & OVER_IS_VIRTUAL)
++#define setIsVirtual(o)     ((o)->overflags |= OVER_IS_VIRTUAL)
++#define resetIsVirtual(o)   ((o)->overflags &= ~OVER_IS_VIRTUAL)
++#define isAbstract(o)       ((o)->overflags & OVER_IS_ABSTRACT)
++#define setIsAbstract(o)    ((o)->overflags |= OVER_IS_ABSTRACT)
++#define isConst(o)          ((o)->overflags & OVER_IS_CONST)
++#define setIsConst(o)       ((o)->overflags |= OVER_IS_CONST)
++#define isStatic(o)         ((o)->overflags & OVER_IS_STATIC)
++#define setIsStatic(o)      ((o)->overflags |= OVER_IS_STATIC)
++#define isAutoGen(o)        ((o)->overflags & OVER_IS_AUTOGEN)
++#define setIsAutoGen(o)     ((o)->overflags |= OVER_IS_AUTOGEN)
++#define resetIsAutoGen(o)   ((o)->overflags &= ~OVER_IS_AUTOGEN)
++#define isNewThread(o)      ((o)->overflags & OVER_IS_NEW_THREAD)
++#define setIsNewThread(o)   ((o)->overflags |= OVER_IS_NEW_THREAD)
++#define isFactory(o)        ((o)->overflags & OVER_IS_FACTORY)
++#define setIsFactory(o)     ((o)->overflags |= OVER_IS_FACTORY)
++#define isResultTransferredBack(o)  ((o)->overflags & OVER_XFERRED_BACK)
++#define setIsResultTransferredBack(o)   ((o)->overflags |= OVER_XFERRED_BACK)
++#define isResultTransferred(o)  ((o)->overflags & OVER_XFERRED)
++#define setIsResultTransferred(o)   ((o)->overflags |= OVER_XFERRED)
++#define isVirtualReimp(o)   ((o)->overflags & OVER_IS_VIRTUAL_REIMP)
++#define setIsVirtualReimp(o)    ((o)->overflags |= OVER_IS_VIRTUAL_REIMP)
++#define dontDerefSelf(o)    ((o)->overflags & OVER_DONT_DEREF_SELF)
++#define setDontDerefSelf(o) ((o)->overflags |= OVER_DONT_DEREF_SELF)
++#define isHoldGIL(o)        ((o)->overflags & OVER_HOLD_GIL)
++#define setIsHoldGIL(o)     ((o)->overflags |= OVER_HOLD_GIL)
++#define isReleaseGIL(o)     ((o)->overflags & OVER_RELEASE_GIL)
++#define setIsReleaseGIL(o)  ((o)->overflags |= OVER_RELEASE_GIL)
++#define isThisTransferredMeth(o)    ((o)->overflags & OVER_THIS_XFERRED)
++#define setIsThisTransferredMeth(o) ((o)->overflags |= OVER_THIS_XFERRED)
++#define isGlobal(o)         ((o)->overflags & OVER_IS_GLOBAL)
++#define setIsGlobal(o)      ((o)->overflags |= OVER_IS_GLOBAL)
++#define isComplementary(o)  ((o)->overflags & OVER_IS_COMPLEMENTARY)
++#define setIsComplementary(o)   ((o)->overflags |= OVER_IS_COMPLEMENTARY)
++#define isDeprecated(o)     ((o)->overflags & OVER_IS_DEPRECATED)
++#define setIsDeprecated(o)  ((o)->overflags |= OVER_IS_DEPRECATED)
++#define isReallyProtected(o)    ((o)->overflags & OVER_REALLY_PROT)
++#define setIsReallyProtected(o) ((o)->overflags |= OVER_REALLY_PROT)
++#define isDelattr(o)        ((o)->overflags & OVER_IS_DELATTR)
++#define setIsDelattr(o)     ((o)->overflags |= OVER_IS_DELATTR)
++#define raisesPyException(o)    ((o)->overflags & OVER_RAISES_PY_EXC)
++#define setRaisesPyException(o) ((o)->overflags |= OVER_RAISES_PY_EXC)
++#define noErrorHandler(o)   ((o)->overflags & OVER_NO_ERROR_HANDLER)
++#define setNoErrorHandler(o)    ((o)->overflags |= OVER_NO_ERROR_HANDLER)
++#define abortOnException(o)     ((o)->overflags & OVER_ABORT_ON_EXC)
++#define setAbortOnException(o)  ((o)->overflags |= OVER_ABORT_ON_EXC)
++#define isFinal(o)          ((o)->overflags & OVER_IS_FINAL)
++#define setIsFinal(o)       ((o)->overflags |= OVER_IS_FINAL)
++
++
++/* Handle variable flags. */
++
++#define VAR_IS_STATIC       0x01    /* It is a static variable. */
++#define VAR_NEEDS_HANDLER   0x02    /* The variable needs a handler. */
++#define VAR_NO_SETTER       0x04    /* The variable has no setter. */
++
++#define isStaticVar(v)      ((v)->varflags & VAR_IS_STATIC)
++#define setIsStaticVar(v)   ((v)->varflags |= VAR_IS_STATIC)
++#define needsHandler(v)     ((v)->varflags & VAR_NEEDS_HANDLER)
++#define setNeedsHandler(v)  ((v)->varflags |= VAR_NEEDS_HANDLER)
++#define noSetter(v)         ((v)->varflags & VAR_NO_SETTER)
++#define setNoSetter(v)      ((v)->varflags |= VAR_NO_SETTER)
++
++
++/* Handle argument flags. */
++
++#define ARG_IS_REF          0x00000001  /* It is a reference. */
++#define ARG_IS_CONST        0x00000002  /* It is a const. */
++#define ARG_XFERRED         0x00000004  /* Ownership is transferred. */
++#define ARG_THIS_XFERRED    0x00000008  /* Ownership of this is transferred. */
++#define ARG_XFERRED_BACK    0x00000010  /* Ownership is transferred back. */
++#define ARG_ARRAY           0x00000020  /* Used as an array. */
++#define ARG_ARRAY_SIZE      0x00000040  /* Used as an array size. */
++#define ARG_ALLOW_NONE      0x00000080  /* Allow None as a value. */
++#define ARG_GET_WRAPPER     0x00000100  /* Get the wrapper object. */
++#define ARG_IN              0x00000200  /* It passes an argument. */
++#define ARG_OUT             0x00000400  /* It returns a result. */
++#define ARG_CONSTRAINED     0x00000800  /* Suppress type conversion. */
++#define ARG_SINGLE_SHOT     0x00001000  /* The slot is only ever fired once. */
++#define ARG_RESULT_SIZE     0x00002000  /* It defines the result size. */
++#define ARG_KEEP_REF        0x00004000  /* Keep a reference. */
++#define ARG_NO_COPY         0x00008000  /* Disable copying of const refs. */
++#define ARG_DISALLOW_NONE   0x00010000  /* Disallow None as a value. */
++
++#define isReference(a)      ((a)->argflags & ARG_IS_REF)
++#define setIsReference(a)   ((a)->argflags |= ARG_IS_REF)
++#define resetIsReference(a) ((a)->argflags &= ~ARG_IS_REF)
++#define isConstArg(a)       ((a)->argflags & ARG_IS_CONST)
++#define setIsConstArg(a)    ((a)->argflags |= ARG_IS_CONST)
++#define resetIsConstArg(a)  ((a)->argflags &= ~ARG_IS_CONST)
++#define isTransferred(a)    ((a)->argflags & ARG_XFERRED)
++#define setIsTransferred(a) ((a)->argflags |= ARG_XFERRED)
++#define isThisTransferred(a)    ((a)->argflags & ARG_THIS_XFERRED)
++#define setIsThisTransferred(a) ((a)->argflags |= ARG_THIS_XFERRED)
++#define isTransferredBack(a)    ((a)->argflags & ARG_XFERRED_BACK)
++#define setIsTransferredBack(a) ((a)->argflags |= ARG_XFERRED_BACK)
++#define isArray(a)          ((a)->argflags & ARG_ARRAY)
++#define setArray(a)         ((a)->argflags |= ARG_ARRAY)
++#define isArraySize(a)      ((a)->argflags & ARG_ARRAY_SIZE)
++#define setArraySize(a)     ((a)->argflags |= ARG_ARRAY_SIZE)
++#define isAllowNone(a)      ((a)->argflags & ARG_ALLOW_NONE)
++#define setAllowNone(a)     ((a)->argflags |= ARG_ALLOW_NONE)
++#define isGetWrapper(a)     ((a)->argflags & ARG_GET_WRAPPER)
++#define setGetWrapper(a)    ((a)->argflags |= ARG_GET_WRAPPER)
++#define isInArg(a)          ((a)->argflags & ARG_IN)
++#define setIsInArg(a)       ((a)->argflags |= ARG_IN)
++#define isOutArg(a)         ((a)->argflags & ARG_OUT)
++#define setIsOutArg(a)      ((a)->argflags |= ARG_OUT)
++#define isConstrained(a)    ((a)->argflags & ARG_CONSTRAINED)
++#define setIsConstrained(a) ((a)->argflags |= ARG_CONSTRAINED)
++#define resetIsConstrained(a)   ((a)->argflags &= ~ARG_CONSTRAINED)
++#define isSingleShot(a)     ((a)->argflags & ARG_SINGLE_SHOT)
++#define isResultSize(a)     ((a)->argflags & ARG_RESULT_SIZE)
++#define setResultSize(a)    ((a)->argflags |= ARG_RESULT_SIZE)
++#define keepReference(a)    ((a)->argflags & ARG_KEEP_REF)
++#define setKeepReference(a) ((a)->argflags |= ARG_KEEP_REF)
++#define noCopy(a)           ((a)->argflags & ARG_NO_COPY)
++#define setNoCopy(a)        ((a)->argflags |= ARG_NO_COPY)
++#define isDisallowNone(a)   ((a)->argflags & ARG_DISALLOW_NONE)
++#define setDisallowNone(a)  ((a)->argflags |= ARG_DISALLOW_NONE)
++
++
++/* Handle name flags. */
++
++#define NAME_IS_USED        0x01    /* It is used in the main module. */
++#define NAME_IS_SUBSTR      0x02    /* It is a substring of another. */
++
++#define isUsedName(n)       ((n)->nameflags & NAME_IS_USED)
++#define setIsUsedName(n)    ((n)->nameflags |= NAME_IS_USED)
++#define resetIsUsedName(n)  ((n)->nameflags &= ~NAME_IS_USED)
++#define isSubstring(n)      ((n)->nameflags & NAME_IS_SUBSTR)
++#define setIsSubstring(n)   ((n)->nameflags |= NAME_IS_SUBSTR)
++
++
++/* Handle virtual handler flags. */
++
++#define VH_TRANSFERS        0x01    /* It transfers ownership of the result. */
++#define VH_ABORT_ON_EXC     0x02    /* It aborts on an exception. */
++
++#define isTransferVH(vh)    ((vh)->vhflags & VH_TRANSFERS)
++#define setIsTransferVH(vh) ((vh)->vhflags |= VH_TRANSFERS)
++#define abortOnExceptionVH(vh)  ((vh)->vhflags & VH_ABORT_ON_EXC)
++#define setAbortOnExceptionVH(vh)   ((vh)->vhflags |= VH_ABORT_ON_EXC)
++
++
++/* Handle mapped type flags. */
++
++#define MT_NO_RELEASE       0x01    /* Do not generate a release function. */
++#define MT_ALLOW_NONE       0x02    /* The mapped type will handle None. */
++
++#define noRelease(mt)       ((mt)->mtflags & MT_NO_RELEASE)
++#define setNoRelease(mt)    ((mt)->mtflags |= MT_NO_RELEASE)
++#define handlesNone(mt)     ((mt)->mtflags & MT_ALLOW_NONE)
++#define setHandlesNone(mt)  ((mt)->mtflags |= MT_ALLOW_NONE)
++
++
++/* Handle typedef flags. */
++
++#define TD_NO_TYPE_NAME     0x01    /* Do not use the typedef name. */
++
++#define noTypeName(td)      ((td)->tdflags & TD_NO_TYPE_NAME)
++#define setNoTypeName(td)   ((td)->tdflags |= TD_NO_TYPE_NAME)
++
++
++/* Warning categories. */
++typedef enum {
++    ParserWarning,
++    DeprecationWarning
++} Warning;
++
++
++/* Docstring formatting. */
++typedef enum {
++    raw,
++    deindented
++} Format;
++
++
++/* Docstring signature positioning. */
++typedef enum {
++    discarded,
++    prepended,
++    appended
++} Signature;
++
++
++/* Levels of keyword argument support. */
++typedef enum {
++    NoKwArgs = 0,
++    AllKwArgs,
++    OptionalKwArgs
++} KwArgs;
++
++
++/* Slot types. */
++typedef enum {
++    str_slot,
++    int_slot,
++    long_slot,
++    float_slot,
++    len_slot,
++    contains_slot,
++    add_slot,
++    concat_slot,
++    sub_slot,
++    mul_slot,
++    repeat_slot,
++    div_slot,
++    mod_slot,
++    floordiv_slot,
++    truediv_slot,
++    and_slot,
++    or_slot,
++    xor_slot,
++    lshift_slot,
++    rshift_slot,
++    iadd_slot,
++    iconcat_slot,
++    isub_slot,
++    imul_slot,
++    irepeat_slot,
++    idiv_slot,
++    imod_slot,
++    ifloordiv_slot,
++    itruediv_slot,
++    iand_slot,
++    ior_slot,
++    ixor_slot,
++    ilshift_slot,
++    irshift_slot,
++    invert_slot,
++    call_slot,
++    getitem_slot,
++    setitem_slot,
++    delitem_slot,
++    lt_slot,
++    le_slot,
++    eq_slot,
++    ne_slot,
++    gt_slot,
++    ge_slot,
++    cmp_slot,
++    bool_slot,
++    neg_slot,
++    pos_slot,
++    abs_slot,
++    repr_slot,
++    hash_slot,
++    index_slot,
++    iter_slot,
++    next_slot,
++    setattr_slot,
++    delattr_slot,       /* This is local to the parser. */
++    matmul_slot,
++    imatmul_slot,
++    await_slot,
++    aiter_slot,
++    anext_slot,
++    no_slot
++} slotType;
++
++
++/*
++ * Argument types.  Always add new ones at the end because the numeric values
++ * can appear in generated code.
++ */
++typedef enum {
++    no_type,
++    defined_type,
++    class_type,
++    struct_type,
++    void_type,
++    enum_type,
++    template_type,
++    signal_type,
++    slot_type,
++    rxcon_type,
++    rxdis_type,
++    slotcon_type,
++    slotdis_type,
++    ustring_type,
++    string_type,
++    short_type,
++    ushort_type,
++    cint_type,
++    int_type,
++    uint_type,
++    long_type,
++    ulong_type,
++    float_type,
++    cfloat_type,
++    double_type,
++    cdouble_type,
++    bool_type,
++    mapped_type,
++    pyobject_type,
++    pytuple_type,
++    pylist_type,
++    pydict_type,
++    pycallable_type,
++    pyslice_type,
++    qobject_type,
++    function_type,
++    pytype_type,
++    ellipsis_type,
++    longlong_type,
++    ulonglong_type,
++    anyslot_type,
++    cbool_type,
++    sstring_type,
++    wstring_type,
++    fake_void_type,
++    ssize_type,
++    ascii_string_type,
++    latin1_string_type,
++    utf8_string_type,
++    byte_type,
++    sbyte_type,
++    ubyte_type,
++    capsule_type,
++    pybuffer_type
++} argType;
++
++
++/* Value types. */
++typedef enum {
++    qchar_value,
++    string_value,
++    numeric_value,
++    real_value,
++    scoped_value,
++    fcall_value
++} valueType;
++
++
++/* Version types. */
++typedef enum {
++    time_qualifier,
++    platform_qualifier,
++    feature_qualifier
++} qualType;
++
++
++/* Interface file types. */
++typedef enum {
++    exception_iface,
++    mappedtype_iface,
++    namespace_iface,
++    class_iface
++} ifaceFileType;
++
++
++/* Type hint parse status. */
++typedef enum {
++    needs_parsing,
++    being_parsed,
++    parsed
++} typeHintParseStatus;
++
++
++/* Type hint node type. */
++typedef enum {
++    typing_node,
++    class_node,
++    enum_node,
++    brackets_node,
++    other_node
++} typeHintNodeType;
++
++
++/* A location in a .sip source file. */
++typedef struct {
++    int linenr;                         /* The line number. */
++    const char *name;                   /* The filename. */
++} sourceLocation;
++
++
++/* A software license. */
++typedef struct {
++    const char *type;                   /* The license type. */
++    const char *licensee;               /* The licensee. */
++    const char *timestamp;              /* The timestamp. */
++    const char *sig;                    /* The signature. */
++} licenseDef;
++
++
++/* A version qualifier. */
++typedef struct _qualDef {
++    const char *name;                   /* The qualifier name. */
++    qualType qtype;                     /* The qualifier type. */
++    struct _moduleDef *module;          /* The defining module. */
++    int line;                           /* Timeline if it is a time. */
++    int order;                          /* Order if it is a time. */
++    int default_enabled;                /* Enabled by default. */
++    struct _qualDef *next;              /* Next in the list. */
++} qualDef;
++
++
++/* A platform. */
++typedef struct _platformDef {
++    struct _qualDef *qualifier;         /* The platform qualifier. */
++    struct _platformDef *next;          /* Next in the list. */
++} platformDef;
++
++
++/* A scoped name. */
++typedef struct _scopedNameDef {
++    char *name;                         /* The name. */
++    struct _scopedNameDef *next;        /* Next in the scope list. */
++} scopedNameDef;
++
++
++/* A name. */
++typedef struct _nameDef {
++    int nameflags;                      /* The name flags. */
++    const char *text;                   /* The text of the name. */
++    size_t len;                         /* The length of the name. */
++    size_t offset;                      /* The offset in the string pool. */
++    struct _nameDef *next;              /* Next in the list. */
++} nameDef;
++
++
++/* A literal code block. */
++typedef struct _codeBlock {
++    char *frag;                         /* The code itself. */
++    const char *filename;               /* The original file. */
++    int linenr;                         /* The line in the file. */
++} codeBlock;
++
++
++/* A list of literal code blocks. */
++typedef struct _codeBlockList {
++    codeBlock *block;                   /* The code block. */
++    struct _codeBlockList *next;        /* The next in the list. */
++} codeBlockList;
++
++
++/* The arguments to a throw specifier. */
++typedef struct _throwArgs {
++    int nrArgs;                         /* The number of arguments. */
++    struct _exceptionDef *args[MAX_NR_ARGS];    /* The arguments. */
++} throwArgs;
++
++
++/* An exception. */
++typedef struct _exceptionDef {
++    int exceptionnr;                    /* The exception number. */
++    int needed;                         /* The module needs it. */
++    struct _ifaceFileDef *iff;          /* The interface file. */
++    const char *pyname;                 /* The exception Python name. */
++    struct _classDef *cd;               /* The exception class. */
++    char *bibase;                       /* The builtin base exception. */
++    struct _exceptionDef *base;         /* The defined base exception. */
++    codeBlockList *raisecode;           /* Raise exception code. */
++    struct _exceptionDef *next;         /* The next in the list. */
++} exceptionDef;
++
++
++/* A value. */
++typedef struct _valueDef {
++    valueType vtype;                    /* The type. */
++    char vunop;                         /* Any unary operator. */
++    char vbinop;                        /* Any binary operator. */
++    scopedNameDef *cast;                /* Any cast. */
++    union {
++        char vqchar;                    /* Quoted character value. */
++        long vnum;                      /* Numeric value. */
++        double vreal;                   /* Real value. */
++        char *vstr;                     /* String value. */
++        scopedNameDef *vscp;            /* Scoped value. */
++        struct _fcallDef *fcd;          /* Function call. */
++    } u;
++    struct _valueDef *next;             /* Next in the expression. */
++} valueDef;
++
++
++/* A member function argument (or result). */
++typedef struct {
++    argType atype;                      /* The type. */
++    nameDef *name;                      /* The name. */
++    const char *doctype;                /* The documented type. */
++    struct _typeHintDef *typehint_in;   /* The PEP 484 input type hint. */
++    struct _typeHintDef *typehint_out;  /* The PEP 484 output type hint. */
++    const char *typehint_value;         /* The type hint value. */
++    int argflags;                       /* The argument flags. */
++    int nrderefs;                       /* Nr. of dereferences. */
++    int derefs[MAX_NR_DEREFS];          /* The const for each dereference. */
++    valueDef *defval;                   /* The default value. */
++    int scopes_stripped;                /* Nr. of scopes to be stripped. */
++    int key;                            /* The optional /KeepReference/ key. */
++    struct _typedefDef *original_type;  /* The original type if typedef'd. */
++    union {
++        struct _signatureDef *sa;       /* If it is a function. */
++        struct _templateDef *td;        /* If it is a template. */
++        struct _scopedNameDef *snd;     /* If it is a defined type. */
++        struct _classDef *cd;           /* If it is a class. */
++        struct _enumDef *ed;            /* If it is an enum. */
++        struct _scopedNameDef *sname;   /* If it is a struct. */
++        struct _mappedTypeDef *mtd;     /* If it is a mapped type. */
++        struct _scopedNameDef *cap;     /* If it is a capsule. */
++    } u;
++} argDef;
++
++
++/* An entry in a linked argument list. */
++typedef struct _argList {
++    argDef arg;                         /* The argument itself. */
++    struct _argList *next;              /* Next in the list. */
++} argList;
++
++
++/* A function call. */
++typedef struct _fcallDef {
++    argDef type;                        /* The type. */
++    int nrArgs;                         /* The number of arguments. */
++    struct _valueDef *args[MAX_NR_ARGS];    /* The arguments. */
++} fcallDef;
++
++
++/* An API version range definition. */
++typedef struct _apiVersionRangeDef {
++    nameDef *api_name;                  /* The API name. */
++    int from;                           /* The lower bound. */
++    int to;                             /* The upper bound. */
++    int index;                          /* The range index. */
++    struct _apiVersionRangeDef *next;   /* The next in the list. */
++} apiVersionRangeDef;
++
++
++/* A virtual error handler. */
++typedef struct _virtErrorHandler {
++    const char *name;                   /* The name of the handler. */
++    codeBlockList *code;                /* The handler code. */
++    struct _moduleDef *mod;             /* The defining module. */
++    int index;                          /* The index within the module. */
++    struct _virtErrorHandler *next;     /* The next in the list. */
++} virtErrorHandler;
++
++
++/* A parsed PEP 484 compliant type hint. */
++typedef struct _typeHintDef {
++    typeHintParseStatus status;         /* The state of the type hint parse. */
++    char *raw_hint;                     /* The raw hint. */
++    struct _typeHintNodeDef *root;      /* The root of parsed nodes. */
++} typeHintDef;
++
++
++/* A node of a parsed type hint. */
++typedef struct _typeHintNodeDef {
++    typeHintNodeType type;              /* The type of the node. */
++    union {
++        const char *name;               /* For typing objects and others. */
++        struct _classDef *cd;           /* For class nodes. */
++        struct _enumDef *ed;            /* For enum nodes. */
++    } u;
++    struct _typeHintNodeDef *children;  /* The list of children. */
++    struct _typeHintNodeDef *next;      /* The next sibling. */
++} typeHintNodeDef;
++
++
++/* An explicit docstring. */
++typedef struct _docstringDef {
++    Signature signature;                /* How the signature should be positioned. */
++    char *text;                         /* The text of the docstring. */
++} docstringDef;
++
++
++/* A module definition. */
++typedef struct _moduleDef {
++    nameDef *fullname;                  /* The full module name. */
++    const char *name;                   /* The module base name. */
++    docstringDef *docstring;            /* The docstring. */
++    apiVersionRangeDef *api_versions;   /* The defined APIs. */
++    apiVersionRangeDef *api_ranges;     /* The list of API version ranges. */
++    int modflags;                       /* The module flags. */
++    KwArgs kwargs;                      /* The style of keyword argument support. */
++    struct _memberDef *othfuncs;        /* List of other functions. */
++    struct _overDef *overs;             /* Global overloads. */
++    Format defdocstringfmt;             /* The default docstring format. */
++    Signature defdocstringsig;          /* The default docstring signature. */
++    argType encoding;                   /* The default string encoding. */
++    nameDef *defmetatype;               /* The optional default meta-type. */
++    nameDef *defsupertype;              /* The optional default super-type. */
++    struct _exceptionDef *defexception; /* The default exception. */
++    codeBlockList *hdrcode;             /* Header code. */
++    codeBlockList *cppcode;             /* Global C++ code. */
++    codeBlockList *copying;             /* Software license. */
++    codeBlockList *preinitcode;         /* Pre-initialisation code. */
++    codeBlockList *initcode;            /* Initialisation code. */
++    codeBlockList *postinitcode;        /* Post-initialisation code. */
++    codeBlockList *unitcode;            /* Compilation unit code. */
++    codeBlockList *unitpostinccode;     /* Compilation unit post-include code. */
++    codeBlockList *typehintcode;        /* Type hint code. */
++    const char *virt_error_handler;     /* The virtual error handler. */
++    int parts;                          /* The number of parts generated. */
++    const char *file;                   /* The filename. */
++    qualDef *qualifiers;                /* The list of qualifiers. */
++    argDef *needed_types;               /* The array of needed types. */
++    int nr_needed_types;                /* The number of needed types. */
++    int nrtimelines;                    /* The nr. of timelines. */
++    int nrexceptions;                   /* The nr. of exceptions. */
++    int nrtypedefs;                     /* The nr. of typedefs. */
++    int nrvirterrorhandlers;            /* The nr. of virtual error handlers. */
++    int next_key;                       /* The next key to allocate. */
++    licenseDef *license;                /* The software license. */
++    struct _classDef *proxies;          /* The list of proxy classes. */
++    struct _moduleDef *container;       /* The container module, if any. */
++    struct _ifaceFileList *used;        /* Interface files used. */
++    struct _moduleListDef *allimports;  /* The list of all imports. */
++    struct _moduleListDef *imports;     /* The list of direct imports. */
++    struct _autoPyNameDef *autopyname;  /* The Python naming rules. */
++    struct _moduleDef *next;            /* Next in the list. */
++} moduleDef;
++
++
++/* An entry in a linked module list. */
++typedef struct _moduleListDef {
++    moduleDef *module;                  /* The module itself. */
++    struct _moduleListDef *next;        /* The next in the list. */
++} moduleListDef;
++
++
++/* An interface file definition. */
++typedef struct _ifaceFileDef {
++    nameDef *name;                      /* The name. */
++    int needed;                         /* The main module needs it. */
++    apiVersionRangeDef *api_range;      /* The optional API version range. */
++    struct _ifaceFileDef *first_alt;    /* The first alternate API. */
++    struct _ifaceFileDef *next_alt;     /* The next alternate API. */
++    ifaceFileType type;                 /* Interface file type. */
++    int ifacenr;                        /* The index into the types table. */
++    scopedNameDef *fqcname;             /* The fully qualified C++ name. */
++    moduleDef *module;                  /* The owning module. */
++    codeBlockList *hdrcode;             /* Header code. */
++    const char *file_extension;         /* The optional file extension. */
++    struct _ifaceFileList *used;        /* Interface files used. */
++    platformDef *platforms;             /* The platforms. */
++    struct _ifaceFileDef *next;         /* Next in the list. */
++} ifaceFileDef;
++
++
++/* An entry in a linked interface file list. */
++
++typedef struct _ifaceFileList {
++    ifaceFileDef *iff;                  /* The interface file itself. */
++    struct _ifaceFileList *next;        /* Next in the list. */
++} ifaceFileList;
++
++
++/* A mapped type. */
++typedef struct _mappedTypeDef {
++    int mtflags;                        /* The mapped type flags. */
++    argDef type;                        /* The type being mapped. */
++    nameDef *pyname;                    /* The Python name. */
++    nameDef *cname;                     /* The C/C++ name. */
++    const char *doctype;                /* The documented type. */
++    typeHintDef *typehint_in;           /* The PEP 484 input type hint. */
++    typeHintDef *typehint_out;          /* The PEP 484 output type hint. */
++    const char *typehint_value;         /* The type hint value. */
++    ifaceFileDef *iff;                  /* The interface file. */
++    struct _memberDef *members;         /* The static member functions. */
++    struct _overDef *overs;             /* The static overloads. */
++    codeBlockList *instancecode;        /* Create instance code. */
++    codeBlockList *typecode;            /* Type code. */
++    codeBlockList *convfromcode;        /* Convert from C++ code. */
++    codeBlockList *convtocode;          /* Convert to C++ code. */
++    struct _mappedTypeDef *real;        /* The original definition. */
++    struct _mappedTypeDef *next;        /* Next in the list. */
++} mappedTypeDef;
++
++
++/* A function signature. */
++typedef struct _signatureDef {
++    argDef result;                      /* The result. */
++    int nrArgs;                         /* The number of arguments. */
++    argDef args[MAX_NR_ARGS];           /* The arguments. */
++} signatureDef;
++
++
++/* A list of function signatures. */
++typedef struct _signatureList {
++    struct _signatureDef *sd;           /* The signature. */
++    struct _signatureList *next;        /* Next in the list. */
++} signatureList;
++
++
++/* A template type. */
++typedef struct _templateDef {
++    scopedNameDef *fqname;              /* The name. */
++    signatureDef types;                 /* The types. */
++} templateDef;
++
++
++/* A list of virtual handlers. */
++typedef struct _virtHandlerDef {
++    int virthandlernr;                  /* The nr. of the virtual handler. */
++    int vhflags;                        /* The virtual handler flags. */
++    signatureDef *pysig;                /* The Python signature. */
++    signatureDef *cppsig;               /* The C++ signature. */
++    codeBlockList *virtcode;            /* Virtual handler code. */
++    virtErrorHandler *veh;              /* The virtual error handler. */
++    struct _virtHandlerDef *next;       /* Next in the list. */
++} virtHandlerDef;
++
++
++/* A typedef definition. */
++typedef struct _typedefDef {
++    int tdflags;                        /* The typedef flags. */
++    scopedNameDef *fqname;              /* The fully qualified name. */
++    struct _classDef *ecd;              /* The enclosing class. */
++    moduleDef *module;                  /* The owning module. */
++    argDef type;                        /* The actual type. */
++    platformDef *platforms;             /* The platforms. */
++    struct _typedefDef *next;           /* Next in the list. */
++} typedefDef;
++
++
++/* A variable definition. */
++typedef struct _varDef {
++    scopedNameDef *fqcname;             /* The fully qualified C/C++ name. */
++    nameDef *pyname;                    /* The variable Python name. */
++    int no_typehint;                    /* The type hint will be suppressed. */
++    struct _classDef *ecd;              /* The enclosing class. */
++    moduleDef *module;                  /* The owning module. */
++    int varflags;                       /* The variable flags. */
++    argDef type;                        /* The actual type. */
++    codeBlockList *accessfunc;          /* The access function. */
++    codeBlockList *getcode;             /* The get code. */
++    codeBlockList *setcode;             /* The set code. */
++    platformDef *platforms;             /* The platforms. */
++    struct _varDef *next;               /* Next in the list. */
++} varDef;
++
++
++/* A property definition. */
++typedef struct _propertyDef {
++    nameDef *name;                      /* The property name. */
++    docstringDef *docstring;            /* The docstring. */
++    const char *get;                    /* The name of the getter method. */
++    const char *set;                    /* The name of the setter method. */
++    platformDef *platforms;             /* The platforms. */
++    struct _propertyDef *next;          /* Next in the list. */
++} propertyDef;
++
++
++/* An overloaded member function definition. */
++typedef struct _overDef {
++    sourceLocation sloc;                /* The source location. */
++    char *cppname;                      /* The C++ name. */
++    docstringDef *docstring;            /* The docstring. */
++    int overflags;                      /* The overload flags. */
++    int no_typehint;                    /* The type hint will be suppressed. */
++    int pyqt_signal_hack;               /* The PyQt signal hack. */
++    KwArgs kwargs;                      /* The keyword argument support. */
++    struct _memberDef *common;          /* Common parts. */
++    apiVersionRangeDef *api_range;      /* The optional API version range. */
++    signatureDef pysig;                 /* The Python signature. */
++    signatureDef *cppsig;               /* The C++ signature. */
++    throwArgs *exceptions;              /* The exceptions. */
++    codeBlockList *methodcode;          /* Method code. */
++    codeBlockList *premethodcode;       /* Code to insert before the method code. */
++    codeBlockList *virtcallcode;        /* Virtual call code. */
++    codeBlockList *virtcode;            /* Virtual handler code. */
++    char *prehook;                      /* The pre-hook name. */
++    char *posthook;                     /* The post-hook name. */
++    const char *virt_error_handler;     /* The virtual error handler. */
++    platformDef *platforms;             /* The platforms. */
++    struct _overDef *next;              /* Next in the list. */
++} overDef;
++
++
++/* An overloaded constructor definition. */
++typedef struct _ctorDef {
++    docstringDef *docstring;            /* The docstring. */
++    int ctorflags;                      /* The ctor flags. */
++    int no_typehint;                    /* The type hint will be suppressed. */
++    KwArgs kwargs;                      /* The keyword argument support. */
++    apiVersionRangeDef *api_range;      /* The optional API version range. */
++    signatureDef pysig;                 /* The Python signature. */
++    signatureDef *cppsig;               /* The C++ signature, NULL if /NoDerived/. */
++    throwArgs *exceptions;              /* The exceptions. */
++    codeBlockList *methodcode;          /* Method code. */
++    codeBlockList *premethodcode;       /* Code to insert before the method code. */
++    char *prehook;                      /* The pre-hook name. */
++    char *posthook;                     /* The post-hook name. */
++    platformDef *platforms;             /* The platforms. */
++    struct _ctorDef *next;              /* Next in the list. */
++} ctorDef;
++
++
++/* An enumerated type member definition. */
++typedef struct _enumMemberDef {
++    nameDef *pyname;                    /* The Python name. */
++    int no_typehint;                    /* The type hint will be suppressed. */
++    char *cname;                        /* The C/C++ name. */
++    struct _enumDef *ed;                /* The enclosing enum. */
++    platformDef *platforms;             /* The platforms. */
++    struct _enumMemberDef *next;        /* Next in the list. */
++} enumMemberDef;
++
++
++/* An enumerated type definition. */
++typedef struct _enumDef {
++    int enumflags;                      /* The enum flags. */
++    scopedNameDef *fqcname;             /* The C/C++ name (may be NULL). */
++    nameDef *cname;                     /* The C/C++ name (may be NULL). */
++    nameDef *pyname;                    /* The Python name (may be NULL). */
++    int no_typehint;                    /* The type hint will be suppressed. */
++    struct _enumDef *first_alt;         /* The first alternate API. */
++    struct _enumDef *next_alt;          /* The next alternate API. */
++    int enumnr;                         /* The enum number. */
++    int enum_idx;                       /* The enum index within the module. */
++    struct _classDef *ecd;              /* The enclosing class, if any. */
++    struct _mappedTypeDef *emtd;        /* The enclosing mapped type, if any. */
++    moduleDef *module;                  /* The owning module. */
++    enumMemberDef *members;             /* The list of members. */
++    struct _memberDef *slots;           /* The list of slots. */
++    struct _overDef *overs;             /* The list of slot overloads. */
++    platformDef *platforms;             /* The platforms. */
++    struct _enumDef *next;              /* Next in the list. */
++} enumDef;
++
++
++/* An member function definition. */
++typedef struct _memberDef {
++    nameDef *pyname;                    /* The Python name. */
++    int memberflags;                    /* The member flags. */
++    int membernr;                       /* The index in the method table. */
++    slotType slot;                      /* The slot type. */
++    moduleDef *module;                  /* The owning module. */
++    struct _ifaceFileDef *ns_scope;     /* The scope if it has been moved. */
++    struct _memberDef *next;            /* Next in the list. */
++} memberDef;
++
++
++/* A list of visible member functions. */
++typedef struct _visibleList {
++    memberDef *m;                       /* The member definition. */
++    struct _classDef *cd;               /* The class. */
++    struct _visibleList *next;          /* Next in the list. */
++} visibleList;
++
++
++/* An entry in a linked class list. */
++typedef struct _classList {
++    struct _classDef *cd;               /* The class itself. */
++    struct _classList *next;            /* Next in the list. */
++} classList;
++
++
++/* A virtual overload definition. */
++typedef struct _virtOverDef {
++    overDef *od;                        /* The overload. */
++    virtHandlerDef *virthandler;        /* The virtual handler. */
++    struct _virtOverDef *next;          /* Next in the list. */
++} virtOverDef;
++
++
++/* A class that appears in a class's hierarchy. */
++typedef struct _mroDef {
++    struct _classDef *cd;               /* The class. */
++    int mroflags;                       /* The hierarchy flags. */
++    struct _mroDef *next;               /* The next in the list. */
++} mroDef;
++
++
++/* A class definition. */
++typedef struct _classDef {
++    docstringDef *docstring;            /* The class docstring. */
++    unsigned classflags;                /* The class flags. */
++    unsigned classflags2;               /* The class flags, part 2. */
++    int pyqt_flags;                     /* The PyQt specific flags. */
++    const char *pyqt_interface;         /* The Qt interface name. */
++    nameDef *pyname;                    /* The Python name. */
++    int no_typehint;                    /* The type hint will be suppressed. */
++    ifaceFileDef *iff;                  /* The interface file. */
++    struct _classDef *ecd;              /* The enclosing scope. */
++    struct _classDef *real;             /* The real class if this is a proxy or extender. */
++    classList *supers;                  /* The parent classes. */
++    mroDef *mro;                        /* The super-class hierarchy. */
++    nameDef *metatype;                  /* The meta-type. */
++    nameDef *supertype;                 /* The super-type. */
++    templateDef *td;                    /* The instantiated template. */
++    ctorDef *ctors;                     /* The constructors. */
++    ctorDef *defctor;                   /* The default ctor. */
++    codeBlockList *dealloccode;         /* Handwritten dealloc code. */
++    codeBlockList *dtorcode;            /* Handwritten dtor code. */
++    throwArgs *dtorexceptions;          /* The dtor exceptions. */
++    memberDef *members;                 /* The member functions. */
++    overDef *overs;                     /* The overloads. */
++    argList *casts;                     /* The operator casts. */
++    virtOverDef *vmembers;              /* The virtual members. */
++    visibleList *visible;               /* The visible members. */
++    codeBlockList *cppcode;             /* Class C++ code. */
++    codeBlockList *convtosubcode;       /* Convert to sub C++ code. */
++    struct _classDef *subbase;          /* Sub-class base class. */
++    codeBlockList *instancecode;        /* Create instance code. */
++    codeBlockList *convtocode;          /* Convert to C++ code. */
++    codeBlockList *convfromcode;        /* Convert from C++ code. */
++    codeBlockList *travcode;            /* Traverse code. */
++    codeBlockList *clearcode;           /* Clear code. */
++    codeBlockList *getbufcode;          /* Get buffer code (Python v3). */
++    codeBlockList *releasebufcode;      /* Release buffer code (Python v3). */
++    codeBlockList *readbufcode;         /* Read buffer code (Python v2). */
++    codeBlockList *writebufcode;        /* Write buffer code (Python v2). */
++    codeBlockList *segcountcode;        /* Segment count code (Python v2). */
++    codeBlockList *charbufcode;         /* Character buffer code (Python v2). */
++    codeBlockList *picklecode;          /* Pickle code. */
++    codeBlockList *finalcode;           /* Finalisation code. */
++    codeBlockList *typehintcode;        /* Type hint code. */
++    propertyDef *properties;            /* The properties. */
++    const char *virt_error_handler;     /* The virtual error handler. */
++    typeHintDef *typehint_in;           /* The PEP 484 input type hint. */
++    typeHintDef *typehint_out;          /* The PEP 484 output type hint. */
++    const char *typehint_value;         /* The type hint value. */
++    struct _classDef *next;             /* Next in the list. */
++} classDef;
++
++
++/* A class template definition. */
++typedef struct _classTmplDef {
++    signatureDef sig;                   /* The template arguments. */
++    classDef *cd;                       /* The class itself. */
++    struct _classTmplDef *next;         /* The next in the list. */
++} classTmplDef;
++
++
++/* A mapped type template definition. */
++typedef struct _mappedTypeTmplDef {
++    signatureDef sig;                   /* The template arguments. */
++    mappedTypeDef *mt;                  /* The mapped type itself. */
++    struct _mappedTypeTmplDef *next;    /* The next in the list. */
++} mappedTypeTmplDef;
++
++
++/* The extracts for an identifier. */
++typedef struct _extractDef {
++    const char *id;                     /* The identifier. */
++    struct _extractPartDef *parts;      /* The ordered list of parts. */
++    struct _extractDef *next;           /* The next in the list. */
++} extractDef;
++
++
++/* Part of an extract for an identifier. */
++typedef struct _extractPartDef {
++    int order;                          /* The order of the part. */
++    codeBlock *part;                    /* The part itself. */
++    struct _extractPartDef *next;       /* The next in the list. */
++} extractPartDef;
++
++
++/* A rule for automatic Python naming. */
++typedef struct _autoPyNameDef {
++    const char *remove_leading;         /* Leading string to remove. */
++    struct _autoPyNameDef *next;        /* The next in the list. */
++} autoPyNameDef;
++
++
++/* The parse tree corresponding to the specification file. */
++typedef struct {
++    moduleDef *module;                  /* The module being generated. */
++    moduleDef *modules;                 /* The list of modules. */
++    nameDef *namecache;                 /* The name cache. */
++    ifaceFileDef *ifacefiles;           /* The list of interface files. */
++    classDef *classes;                  /* The list of classes. */
++    classTmplDef *classtemplates;       /* The list of class templates. */
++    exceptionDef *exceptions;           /* The list of exceptions. */
++    mappedTypeDef *mappedtypes;         /* The mapped types. */
++    mappedTypeTmplDef *mappedtypetemplates; /* The list of mapped type templates. */
++    enumDef *enums;                     /* List of enums. */
++    varDef *vars;                       /* List of variables. */
++    typedefDef *typedefs;               /* List of typedefs. */
++    int nrvirthandlers;                 /* The number of virtual handlers. */
++    virtHandlerDef *virthandlers;       /* The virtual handlers. */
++    virtErrorHandler *errorhandlers;    /* The list of virtual error handlers. */
++    codeBlockList *exphdrcode;          /* Exported header code. */
++    codeBlockList *exptypehintcode;     /* Exported type hint code. */
++    codeBlockList *docs;                /* Documentation. */
++    classDef *qobject_cd;               /* QObject class, NULL if none. */
++    int sigslots;                       /* Set if signals or slots are used. */
++    int genc;                           /* Set if we are generating C code. */
++    struct _stringList *plugins;        /* The list of plugins. */
++    struct _extractDef *extracts;       /* The list of extracts. */
++} sipSpec;
++
++
++/* A list of strings. */
++typedef struct _stringList {
++    const char *s;                      /* The string. */
++    struct _stringList *next;           /* The next in the list. */
++} stringList;
++
++
++/* File specific context information for the parser. */
++typedef struct _parserContext {
++    const char *filename;               /* The %Import or %Include filename. */
++    int ifdepth;                        /* The depth of nested if's. */
++    moduleDef *prevmod;                 /* The previous module. */
++} parserContext;
++
++
++extern char *sipVersion;                /* The version of SIP. */
++extern stringList *includeDirList;      /* The include directory list for SIP files. */
++
++
++void parse(sipSpec *, FILE *, char *, int, stringList *, stringList *,
++        stringList *, KwArgs, int);
++void parserEOF(const char *,parserContext *);
++void transform(sipSpec *, int);
++void generateCode(sipSpec *, char *, char *, char *, const char *, int, int,
++        int, int, stringList *needed_qualifiers, stringList *, const char *,
++        int, int, const char *);
++void generateExtracts(sipSpec *pt, const stringList *extracts);
++void addExtractPart(sipSpec *pt, const char *id, int order, codeBlock *part);
++void generateAPI(sipSpec *pt, moduleDef *mod, const char *apiFile);
++void generateXML(sipSpec *pt, moduleDef *mod, const char *xmlFile);
++void generateTypeHints(sipSpec *pt, moduleDef *mod, const char *pyiFile);
++void generateExpression(valueDef *vd, int in_str, FILE *fp);
++void warning(Warning w, const char *fmt, ...);
++void deprecated(const char *msg);
++SIP_NORETURN void fatal(const char *fmt,...);
++void fatalScopedName(scopedNameDef *);
++void fatalStart();
++void getSourceLocation(sourceLocation *slp);
++int setInputFile(FILE *open_fp, parserContext *pc, int optional);
++void resetLexerState();
++void *sipMalloc(size_t n);
++void *sipCalloc(size_t nr, size_t n);
++char *sipStrdup(const char *);
++char *concat(const char *, ...);
++void append(char **, const char *);
++void appendToIfaceFileList(ifaceFileList **ifflp, ifaceFileDef *iff);
++int selectedQualifier(stringList *needed_qualifiers, qualDef *qd);
++int excludedFeature(stringList *,qualDef *);
++int sameSignature(signatureDef *,signatureDef *,int);
++int sameTemplateSignature(signatureDef *tmpl_sd, signatureDef *args_sd,
++        int deep);
++int compareScopedNames(scopedNameDef *snd1, scopedNameDef *snd2);
++int sameBaseType(argDef *,argDef *);
++char *scopedNameTail(scopedNameDef *);
++scopedNameDef *copyScopedName(scopedNameDef *);
++void appendScopedName(scopedNameDef **,scopedNameDef *);
++void freeScopedName(scopedNameDef *);
++void appendToClassList(classList **,classDef *);
++void appendCodeBlockList(codeBlockList **headp, codeBlockList *cbl);
++void prcode(FILE *fp, const char *fmt, ...);
++void prCopying(FILE *fp, moduleDef *mod, const char *comment);
++void prOverloadName(FILE *fp, overDef *od);
++void prOverloadDecl(FILE *fp, ifaceFileDef *scope, overDef *od, int defval);
++void prDefaultValue(argDef *ad, int in_str, FILE *fp);
++void prScopedPythonName(FILE *fp, classDef *scope, const char *pyname);
++void searchTypedefs(sipSpec *pt, scopedNameDef *snd, argDef *ad);
++int isZeroArgSlot(memberDef *md);
++int isIntReturnSlot(memberDef *md);
++int isSSizeReturnSlot(memberDef *md);
++int isLongReturnSlot(memberDef *md);
++int isVoidReturnSlot(memberDef *md);
++int isNumberSlot(memberDef *md);
++int isInplaceNumberSlot(memberDef *md);
++int isRichCompareSlot(memberDef *md);
++mappedTypeDef *allocMappedType(sipSpec *pt, argDef *type);
++void appendString(stringList **headp, const char *s);
++void appendTypeStrings(scopedNameDef *ename, signatureDef *patt, signatureDef *src, signatureDef *known, scopedNameDef **names, scopedNameDef **values);
++codeBlockList *templateCode(sipSpec *pt, ifaceFileList **used,
++        codeBlockList *ocbl, scopedNameDef *names, scopedNameDef *values);
++ifaceFileDef *findIfaceFile(sipSpec *pt, moduleDef *mod,
++        scopedNameDef *fqname, ifaceFileType iftype,
++        apiVersionRangeDef *api_range, argDef *ad);
++int pluginPyQt4(sipSpec *pt);
++int pluginPyQt5(sipSpec *pt);
++SIP_NORETURN void yyerror(char *);
++void yywarning(char *);
++int yylex();
++nameDef *cacheName(sipSpec *pt, const char *name);
++scopedNameDef *encodedTemplateName(templateDef *td);
++apiVersionRangeDef *findAPI(sipSpec *pt, const char *name);
++memberDef *findMethod(classDef *cd, const char *name);
++typeHintDef *newTypeHint(char *raw_hint);
++int isPyKeyword(const char *word);
++void getDefaultImplementation(sipSpec *pt, argType atype, classDef **cdp,
++        mappedTypeDef **mtdp);
++char *templateString(const char *src, scopedNameDef *names,
++        scopedNameDef *values);
++int inDefaultAPI(sipSpec *pt, apiVersionRangeDef *range);
++int hasImplicitOverloads(signatureDef *sd);
++void dsCtor(sipSpec *pt, classDef *cd, ctorDef *ct, int sec, FILE *fp);
++void dsOverload(sipSpec *pt, overDef *od, int is_method, int sec, FILE *fp);
++scopedNameDef *getFQCNameOfType(argDef *ad);
++scopedNameDef *removeGlobalScope(scopedNameDef *snd);
++void pyiTypeHint(sipSpec *pt, typeHintDef *thd, moduleDef *mod, int out,
++        ifaceFileList *defined, int pep484, int rest, FILE *fp);
++void restPyClass(classDef *cd, int as_ref, FILE *fp);
++void restPyEnum(enumDef *ed, int as_ref, FILE *fp);
++
++
++/* These are only here because bison publically references them. */
++
++/* Represent a set of option flags. */
++
++#define MAX_NR_FLAGS    5
++
++typedef enum {
++    bool_flag,
++    string_flag,
++    name_flag,
++    opt_name_flag,
++    dotted_name_flag,
++    integer_flag,
++    opt_integer_flag,
++    api_range_flag
++} flagType;
++
++typedef struct {
++    const char *fname;                  /* The flag name. */
++    flagType ftype;                     /* The flag type. */
++    union {                             /* The flag value. */
++        char *sval;                     /* A string value. */
++        long ival;                      /* An integer value. */
++        apiVersionRangeDef *aval;       /* An API range value. */
++    } fvalue;
++} optFlag;
++
++typedef struct {
++    int nrFlags;                        /* The number of flags. */
++    optFlag flags[MAX_NR_FLAGS];        /* Each flag. */
++} optFlags;
++
++
++/* These represent the configuration of different directives. */
++
++/* %API */
++typedef struct _apiCfg {
++    int token;
++    const char *name;
++    int version;
++} apiCfg;
++
++/* %AutoPyName */
++typedef struct _autoPyNameCfg {
++    int token;
++    const char *remove_leading;
++} autoPyNameCfg;
++
++/* %CompositeModule */
++typedef struct _compModuleCfg {
++    int token;
++    const char *name;
++    docstringDef *docstring;
++} compModuleCfg;
++
++/* %ConsolidatedModule */
++typedef struct _consModuleCfg {
++    int token;
++    const char *name;
++    docstringDef *docstring;
++} consModuleCfg;
++
++/* %DefaultDocstringFormat */
++typedef struct _defDocstringFmtCfg {
++    int token;
++    const char *name;
++} defDocstringFmtCfg;
++
++/* %DefaultDocstringSignature */
++typedef struct _defDocstringSigCfg {
++    int token;
++    const char *name;
++} defDocstringSigCfg;
++
++/* %DefaultEncoding */
++typedef struct _defEncodingCfg {
++    int token;
++    const char *name;
++} defEncodingCfg;
++
++/* %DefaultMetatype */
++typedef struct _defMetatypeCfg {
++    int token;
++    const char *name;
++} defMetatypeCfg;
++
++/* %DefaultSupertype */
++typedef struct _defSupertypeCfg {
++    int token;
++    const char *name;
++} defSupertypeCfg;
++
++/* %Docstring */
++typedef struct _docstringCfg {
++    int token;
++    Format format;
++    Signature signature;
++} docstringCfg;
++
++/* %Exception */
++typedef struct _exceptionCfg {
++    int token;
++    codeBlock *type_header_code;
++    codeBlock *raise_code;
++} exceptionCfg;
++
++/* %Extract */
++typedef struct _extractCfg {
++    int token;
++    const char *id;
++    int order;
++} extractCfg;
++
++/* %Feature */
++typedef struct _featureCfg {
++    int token;
++    const char *name;
++} featureCfg;
++
++/* %HiddenNamespace */
++typedef struct _hiddenNsCfg {
++    int token;
++    scopedNameDef *name;
++} hiddenNsCfg;
++
++/* %Import */
++typedef struct _importCfg {
++    int token;
++    const char *name;
++} importCfg;
++
++/* %Include */
++typedef struct _includeCfg {
++    int token;
++    const char *name;
++    int optional;
++} includeCfg;
++
++/* %License */
++typedef struct _licenseCfg {
++    int token;
++    const char *type;
++    const char *licensee;
++    const char *signature;
++    const char *timestamp;
++} licenseCfg;
++
++/* %Module and its sub-directives. */
++typedef struct _moduleCfg {
++    int token;
++    int c_module;
++    KwArgs kwargs;
++    const char *name;
++    int use_arg_names;
++    int use_limited_api;
++    int all_raise_py_exc;
++    int call_super_init;
++    const char *def_error_handler;
++    docstringDef *docstring;
++} moduleCfg;
++
++/* %Plugin */
++typedef struct _pluginCfg {
++    int token;
++    const char *name;
++} pluginCfg;
++
++/* %Property */
++typedef struct _propertyCfg {
++    int token;
++    const char *get;
++    const char *name;
++    const char *set;
++    docstringDef *docstring;
++} propertyCfg;
++
++/* Variable sub-directives. */
++typedef struct _variableCfg {
++    int token;
++    codeBlock *access_code;
++    codeBlock *get_code;
++    codeBlock *set_code;
++} variableCfg;
++
++/* %VirtualErrorHandler */
++typedef struct _vehCfg {
++    int token;
++    const char *name;
++} vehCfg;
++
++#endif
+diff -Nurd '--exclude=doc' '--exclude=.hg*' ./sip-4.19.12.orig/sipgen/transform.c sip/sipgen/transform.c
+--- ./sip-4.19.12.orig/sipgen/transform.c	2018-07-05 05:54:58.000000000 -0400
++++ sip/sipgen/transform.c	2018-09-24 13:12:20.694275757 -0400
+@@ -89,7 +89,8 @@
+ static classDef *findAltClassImplementation(sipSpec *pt, mappedTypeDef *mtd);
+ static ifaceFileDef *getIfaceFile(argDef *ad);
+ static ifaceFileDef *getIfaceFileForEnum(enumDef *ed);
+-static mappedTypeDef *instantiateMappedTypeTemplate(sipSpec *pt, moduleDef *mod, mappedTypeTmplDef *mtt, argDef *type);
++static void instantiateMappedTypeTemplate(sipSpec *pt, moduleDef *mod,
++        mappedTypeTmplDef *mtt, argDef *type);
+ static classDef *getProxy(moduleDef *mod, classDef *cd);
+ static int generatingCodeForModule(sipSpec *pt, moduleDef *mod);
+ static void checkAssignmentHelper(sipSpec *pt, classDef *cd);
+@@ -3040,9 +3041,7 @@
+             for (mtt = pt->mappedtypetemplates; mtt != NULL; mtt = mtt->next)
+                 if (compareScopedNames(mtt->mt->type.u.td->fqname, type->u.td->fqname) == 0 && sameTemplateSignature(&mtt->mt->type.u.td->types, &type->u.td->types, TRUE))
+                 {
+-                    type->u.mtd = instantiateMappedTypeTemplate(pt, mod, mtt, type);
+-                    type->atype = mapped_type;
+-
++                    instantiateMappedTypeTemplate(pt, mod, mtt, type);
+                     break;
+                 }
+         }
+@@ -3144,9 +3143,10 @@
+ 
+ 
+ /*
+- * Instantiate a mapped type template and return it.
++ * Instantiate a mapped type template.
+  */
+-static mappedTypeDef *instantiateMappedTypeTemplate(sipSpec *pt, moduleDef *mod, mappedTypeTmplDef *mtt, argDef *type)
++static void instantiateMappedTypeTemplate(sipSpec *pt, moduleDef *mod,
++        mappedTypeTmplDef *mtt, argDef *type)
+ {
+     scopedNameDef *type_names, *type_values;
+     mappedTypeDef *mtd;
+@@ -3201,7 +3201,13 @@
+ 
+     mtd = copyTemplateType(mtd, type);
+ 
+-    return mtd;
++    /* Replace the template with the mapped type. */
++    type->atype = mapped_type;
++    type->typehint_in = mtd->typehint_in;
++    type->typehint_out = mtd->typehint_out;
++    type->typehint_value = mtd->typehint_value;
++
++    type->u.mtd = mtd;
+ }
+ 
+ 
+diff -Nurd '--exclude=doc' '--exclude=.hg*' ./sip-4.19.12.orig/sipgen/type_hints.c sip/sipgen/type_hints.c
+--- ./sip-4.19.12.orig/sipgen/type_hints.c	2018-07-05 05:54:58.000000000 -0400
++++ sip/sipgen/type_hints.c	2018-09-24 13:12:20.695275742 -0400
+@@ -57,10 +57,8 @@
+         ifaceFileList *defined, KwArgs kwargs, int pep484, FILE *fp);
+ static void pyiType(sipSpec *pt, moduleDef *mod, argDef *ad, int out, int sec,
+         ifaceFileList *defined, int pep484, FILE *fp);
+-static void pyiTypeHint(sipSpec *pt, typeHintDef *thd, moduleDef *mod, int out,
+-        ifaceFileList *defined, int pep484, FILE *fp);
+ static void pyiTypeHintNode(typeHintNodeDef *node, moduleDef *mod,
+-        ifaceFileList *defined, int pep484, FILE *fp);
++        ifaceFileList *defined, int pep484, int rest, FILE *fp);
+ static void prIndent(int indent, FILE *fp);
+ static int separate(int first, int indent, FILE *fp);
+ static void prClassRef(classDef *cd, moduleDef *mod, ifaceFileList *defined,
+@@ -956,7 +954,7 @@
+ 
+     if (thd != NULL)
+     {
+-        pyiTypeHint(pt, thd, mod, out, defined, pep484, fp);
++        pyiTypeHint(pt, thd, mod, out, defined, pep484, FALSE, fp);
+         return;
+     }
+ 
+@@ -1415,13 +1413,13 @@
+ /*
+  * Generate a type hint from a /TypeHint/ annotation.
+  */
+-static void pyiTypeHint(sipSpec *pt, typeHintDef *thd, moduleDef *mod, int out,
+-        ifaceFileList *defined, int pep484, FILE *fp)
++void pyiTypeHint(sipSpec *pt, typeHintDef *thd, moduleDef *mod, int out,
++        ifaceFileList *defined, int pep484, int rest, FILE *fp)
+ {
+     parseTypeHint(pt, thd, out);
+ 
+     if (thd->root != NULL)
+-        pyiTypeHintNode(thd->root, mod, defined, pep484, fp);
++        pyiTypeHintNode(thd->root, mod, defined, pep484, rest, fp);
+     else
+         maybeAnyObject(thd->raw_hint, pep484, fp);
+ }
+@@ -1431,7 +1429,7 @@
+  * Generate a single node of a type hint.
+  */
+ static void pyiTypeHintNode(typeHintNodeDef *node, moduleDef *mod,
+-        ifaceFileList *defined, int pep484, FILE *fp)
++        ifaceFileList *defined, int pep484, int rest, FILE *fp)
+ {
+     switch (node->type)
+     {
+@@ -1452,7 +1450,7 @@
+ 
+                 need_comma = TRUE;
+ 
+-                pyiTypeHintNode(thnd, mod, defined, pep484, fp);
++                pyiTypeHintNode(thnd, mod, defined, pep484, rest, fp);
+             }
+ 
+             fprintf(fp, "]");
+@@ -1461,11 +1459,19 @@
+         break;
+ 
+     case class_node:
+-        prClassRef(node->u.cd, mod, defined, pep484, fp);
++        if (rest)
++            restPyClass(node->u.cd, TRUE, fp);
++        else
++            prClassRef(node->u.cd, mod, defined, pep484, fp);
++
+         break;
+ 
+     case enum_node:
+-        prEnumRef(node->u.ed, mod, defined, pep484, fp);
++        if (rest)
++            restPyEnum(node->u.ed, TRUE, fp);
++        else
++            prEnumRef(node->u.ed, mod, defined, pep484, fp);
++
+         break;
+ 
+     case brackets_node:
+@@ -1702,7 +1708,7 @@
+ 
+ 
+ /*
+- * Flatten an unions in a list of nodes.
++ * Flatten any unions in a list of nodes.
+  */
+ static typeHintNodeDef *flatten_unions(typeHintNodeDef *nodes)
+ {
+diff -Nurd '--exclude=doc' '--exclude=.hg*' ./sip-4.19.12.orig/siplib/sip.h sip/siplib/sip.h
+--- ./sip-4.19.12.orig/siplib/sip.h	2018-07-05 05:55:19.000000000 -0400
++++ sip/siplib/sip.h	2018-09-18 18:12:23.643053242 -0400
+@@ -54,8 +54,8 @@
+ /*
+  * Define the SIP version number.
+  */
+-#define SIP_VERSION         0x04130c
+-#define SIP_VERSION_STR     "4.19.12"
++#define SIP_VERSION         0x04ffff
++#define SIP_VERSION_STR     "4.255.255"
+ 
+ 
+ /*
+diff -Nurd '--exclude=doc' '--exclude=.hg*' ./sip-4.19.12.orig/siplib/sip.h.in sip/siplib/sip.h.in
+--- ./sip-4.19.12.orig/siplib/sip.h.in	1969-12-31 19:00:00.000000000 -0500
++++ sip/siplib/sip.h.in	2018-09-18 17:52:23.290543826 -0400
+@@ -0,0 +1,2169 @@
++/*
++ * The SIP module interface.
++ *
++ * Copyright (c) 2018 Riverbank Computing Limited <info at riverbankcomputing.com>
++ *
++ * This file is part of SIP.
++ *
++ * This copy of SIP is licensed for use under the terms of the SIP License
++ * Agreement.  See the file LICENSE for more details.
++ *
++ * This copy of SIP may also used under the terms of the GNU General Public
++ * License v2 or v3 as published by the Free Software Foundation which can be
++ * found in the files LICENSE-GPL2 and LICENSE-GPL3 included in this package.
++ *
++ * SIP is supplied WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
++ */
++
++
++#ifndef _SIP_H
++#define _SIP_H
++
++
++/*
++ * This gets round a problem with Qt's moc and Python v2.3.  Strictly speaking
++ * it's a Qt problem but later versions of Python include a fix for it so we
++ * might as well too.
++ */
++#undef slots
++
++
++#include <Python.h>
++
++/*
++ * There is a mis-feature somewhere with the Borland compiler.  This works
++ * around it.
++ */
++#if defined(__BORLANDC__)
++#include <rpc.h>
++#endif
++
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++/* Sanity check on the Python version. */
++#if PY_VERSION_HEX < 0x02030000
++#error "This version of SIP requires Python v2.3 or later"
++#endif
++
++
++/*
++ * Define the SIP version number.
++ */
++#define SIP_VERSION         0x at RM_HEXVERSION@
++#define SIP_VERSION_STR     "@RM_RELEASE@"
++
++
++/*
++ * Define the current API version number.  SIP must handle modules with the
++ * same major number and with the same or earlier minor number.  Whenever
++ * members are added to non-embedded data structures they must be appended and
++ * the minor number incremented.  Whenever data structure members are removed
++ * or their offset changed then the major number must be incremented and the
++ * minor number set * to 0.
++ *
++ * History:
++ *
++ * 12.5 Replaced the sipConvertFromSliceObject() macro with
++ *      sip_api_convert_from_slice_object() in the public API.
++ *
++ * 12.4 Added sip_api_instance_destroyed_ex() to the private API.
++ *
++ * 12.3 Added SIP_TYPE_SCOPED_ENUM to the sipTypeDef flags.
++ *      Added sip_api_convert_to_enum() to the public API.
++ *      Added sip_api_convert_to_bool() to the public API.
++ *      Added sip_api_long_as_char(), sip_api_long_as_signed_char(),
++ *      sip_api_long_as_unsigned_char(), sip_api_long_as_short(),
++ *      sip_api_long_as_unsigned_short(), sip_api_long_as_int(),
++ *      sip_api_long_as_unsigned_int(), sip_api_long_as_long(),
++ *      sip_api_long_as_unsigned_long(), sip_api_long_as_long_long(),
++ *      sip_api_long_as_unsigned_long_long() to the public API.
++ *      Deprecated sip_api_can_convert_to_enum().
++ *
++ * 12.2 Added sip_api_print_object() to the public API.
++ *      Renamed sip_api_common_dtor() to sip_api_instance_destroyed() and added
++ *      it to the public API.
++ *      Added sipEventType and sip_api_register_event_handler() to the public
++ *      API.
++ *
++ * 12.1 Added sip_api_enable_gc() to the public API.
++ *
++ * 12.0 Added SIP_TYPE_LIMITED_API to the sipTypeDef flags.
++ *      Added sip_api_py_type_dict() and sip_api_py_type_name() to the public
++ *      API.
++ *      Added sip_api_set_new_user_type_handler() to the public API.
++ *      Added sip_api_is_user_type() to the public API.
++ *      Added sip_api_set_type_user_data() and sip_api_get_type_user_data() to
++ *      the public API.
++ *      Added sip_api_set_user_object() and sip_api_get_user_object() to the
++ *      public API.
++ *      Added sip_api_get_method() and sip_api_from_method() to the public API.
++ *      Added sip_api_get_c_function() to the public API.
++ *      Added sip_api_get_date() and sip_api_from_date() to the public API.
++ *      Added sip_api_get_datetime() and sip_api_from_datetime() to the public
++ *      API.
++ *      Added sip_api_get_time() and sip_api_from_time() to the public API.
++ *      Added sip_api_get_frame() to the public API.
++ *      Added sip_api_check_plugin_for_type() to the public API.
++ *      Added sip_api_unicode_new(), sip_api_unicode_write() and
++ *      sip_api_unicode_data() to the public API.
++ *      Added sip_api_get_buffer_info() and sip_api_relese_buffer_info() to the
++ *      public API.
++ *      Added sip_api_call_procedure_method() to the public API.
++ *      Added sip_api_is_owned_by_python() to the private API.
++ *      Added sip_api_is_derived_class() to the private API.
++ *      Removed the im_version member from sipImportedModuleDef.
++ *      Removed the im_module member from sipImportedModuleDef.
++ *      Removed the em_version member from sipExportedModuleDef.
++ *      Removed the em_virthandlers member from sipExportedModuleDef.
++ *      Re-ordered the API functions.
++ *
++ * 11.3 Added sip_api_get_interpreter() to the public API.
++ *
++ * 11.2 Added sip_api_get_reference() to the private API.
++ *
++ * 11.1 Added sip_api_invoke_slot_ex().
++ *
++ * 11.0 Added the pyqt5QtSignal and pyqt5ClassTypeDef structures.
++ *      Removed qt_interface from pyqt4ClassTypeDef.
++ *      Added hack to pyqt4QtSignal.
++ *
++ * 10.1 Added ctd_final to sipClassTypeDef.
++ *      Added ctd_init_mixin to sipClassTypeDef.
++ *      Added sip_api_get_mixin_address() to the public API.
++ *      Added sip_api_convert_from_new_pytype() to the public API.
++ *      Added sip_api_convert_to_array() to the public API.
++ *      Added sip_api_convert_to_typed_array() to the public API.
++ *      Added sip_api_register_proxy_resolver() to the public API.
++ *      Added sip_api_init_mixin() to the private API.
++ *      Added qt_interface to pyqt4ClassTypeDef.
++ *
++ * 10.0 Added sip_api_set_destroy_on_exit().
++ *      Added sip_api_enable_autoconversion().
++ *      Removed sip_api_call_error_handler_old().
++ *      Removed sip_api_start_thread().
++ *
++ * 9.2  Added sip_gilstate_t and SIP_RELEASE_GIL to the public API.
++ *      Renamed sip_api_call_error_handler() to
++ *      sip_api_call_error_handler_old().
++ *      Added the new sip_api_call_error_handler() to the private API.
++ *
++ * 9.1  Added the capsule type.
++ *      Added the 'z' format character to sip_api_build_result().
++ *      Added the 'z', '!' and '$' format characters to
++ *      sip_api_parse_result_ex().
++ *
++ * 9.0  Changed the sipVariableGetterFunc signature.
++ *      Added sip_api_parse_result_ex() to the private API.
++ *      Added sip_api_call_error_handler() to the private API.
++ *      Added em_virterrorhandlers to sipExportedModuleDef.
++ *      Re-ordered the API functions.
++ *
++ * 8.1  Revised the sipVariableDef structure.
++ *      sip_api_get_address() is now part of the public API.
++ *
++ * 8.0  Changed the size of the sipSimpleWrapper structure.
++ *      Added sip_api_get_address().
++ *
++ * 7.1  Added the 'H' format character to sip_api_parse_result().
++ *      Deprecated the 'D' format character of sip_api_parse_result().
++ *
++ * 7.0  Added sip_api_parse_kwd_args().
++ *      Added sipErrorState, sip_api_add_exception().
++ *      The type initialisation function is now passed a dictionary of keyword
++ *      arguments.
++ *      All argument parsers now update a set of error messages rather than an
++ *      argument count.
++ *      The signatures of sip_api_no_function() and sip_api_no_method() have
++ *      changed.
++ *      Added ctd_docstring to sipClassTypeDef.
++ *      Added vf_docstring to sipVersionedFunctionDef.
++ *
++ * 6.0  Added the sipContainerDef structure to define the contents of a class
++ *      or mapped type.  Restructured sipClassDef and sipMappedTypeDef
++ *      accordingly.
++ *      Added the 'r' format character to sip_api_parse_args().
++ *      Added the 'r' format character to sip_api_call_method() and
++ *      sip_api_build_result().
++ *      Added the assignment, array and copy allocation helpers.
++ *
++ * 5.0  Added sip_api_is_api_enabled().
++ *      Renamed the td_version_nr member of sipTypeDef to be int and where -1
++ *      indicates it is not versioned.
++ *      Added the em_versions member to sipExportedModuleDef.
++ *      Added the em_versioned_functions member to sipExportedModuleDef.
++ *
++ * 4.0  Much refactoring.
++ *
++ * 3.8  Added sip_api_register_qt_metatype() and sip_api_deprecated().
++ *      Added qt_register_meta_type() to the Qt support API.
++ *      The C/C++ names of enums and types are now always defined in the
++ *      relevant structures and don't default to the Python name.
++ *      Added the 'XE' format characters to sip_api_parse_args().
++ *
++ * 3.7  Added sip_api_convert_from_const_void_ptr(),
++ *      sip_api_convert_from_void_ptr_and_size() and
++ *      sip_api_convert_from_const_void_ptr_and_size().
++ *      Added the 'g' and 'G' format characters (to replace the now deprecated
++ *      'a' and 'A' format characters) to sip_api_build_result(),
++ *      sip_api_call_method() and sip_api_parse_result().
++ *      Added the 'k' and 'K' format characters (to replace the now deprecated
++ *      'a' and 'A' format characters) to sip_api_parse_args().
++ *      Added sip_api_invoke_slot().
++ *      Added sip_api_parse_type().
++ *      Added sip_api_is_exact_wrapped_type().
++ *      Added the td_assign and td_qt fields to the sipTypeDef structure.
++ *      Added the mt_assign field to the sipMappedType structure.
++ *
++ * 3.6  Added the 'g' format character to sip_api_parse_args().
++ *
++ * 3.5  Added the td_pickle field to the sipTypeDef structure.
++ *      Added sip_api_transfer_break().
++ *
++ * 3.4  Added qt_find_connection() to the Qt support API.
++ *      Added sip_api_string_as_char(), sip_api_unicode_as_wchar(),
++ *      sip_api_unicode_as_wstring(), sip_api_find_class(),
++ *      sip_api_find_named_enum() and sip_api_parse_signature().
++ *      Added the 'A', 'w' and 'x' format characters to sip_api_parse_args(),
++ *      sip_api_parse_result(), sip_api_build_result() and
++ *      sip_api_call_method().
++ *
++ * 3.3  Added sip_api_register_int_types().
++ *
++ * 3.2  Added sip_api_export_symbol() and sip_api_import_symbol().
++ *
++ * 3.1  Added sip_api_add_mapped_type_instance().
++ *
++ * 3.0  Moved the Qt support out of the sip module and into PyQt.  This is
++ *      such a dramatic change that there is no point in attempting to maintain
++ *      backwards compatibility.
++ *
++ * 2.0  Added the td_flags field to the sipTypeDef structure.
++ *      Added the first_child, sibling_next, sibling_prev and parent fields to
++ *      the sipWrapper structure.
++ *      Added the td_traverse and td_clear fields to the sipTypeDef structure.
++ *      Added the em_api_minor field to the sipExportedModuleDef structure.
++ *      Added sip_api_bad_operator_arg().
++ *      Added sip_api_wrapper_check().
++ *
++ * 1.1  Added support for __pos__ and __abs__.
++ *
++ * 1.0  Removed all deprecated parts of the API.
++ *      Removed the td_proxy field from the sipTypeDef structure.
++ *      Removed the create proxy function from the 'q' and 'y' format
++ *      characters to sip_api_parse_args().
++ *      Removed sip_api_emit_to_slot().
++ *      Reworked the enum related structures.
++ *
++ * 0.2  Added the 'H' format character to sip_api_parse_args().
++ *
++ * 0.1  Added sip_api_add_class_instance().
++ *      Added the 't' format character to sip_api_parse_args().
++ *      Deprecated the 'J' and 'K' format characters to sip_api_parse_result().
++ *
++ * 0.0  Original version.
++ */
++#define SIP_API_MAJOR_NR    12
++#define SIP_API_MINOR_NR    5
++
++
++/*
++ * Qt includes this typedef and its meta-object system explicitly converts
++ * types to uint.  If these correspond to signal arguments then that conversion
++ * is exposed.  Therefore SIP generates code that uses it.  This definition is
++ * for the cases that SIP is generating non-Qt related bindings with compilers
++ * that don't include it themselves (i.e. MSVC).
++ */
++typedef unsigned int uint;
++
++
++/* Some Python compatibility stuff. */
++#if PY_VERSION_HEX >= 0x02050000
++
++#define SIP_SSIZE_T         Py_ssize_t
++#define SIP_SSIZE_T_FORMAT  "%zd"
++
++#define SIP_MLNAME_CAST(s)  (s)
++#define SIP_MLDOC_CAST(s)   (s)
++#define SIP_TPNAME_CAST(s)  (s)
++
++#else
++
++#define SIP_SSIZE_T         int
++#define SIP_SSIZE_T_FORMAT  "%d"
++
++#define SIP_MLNAME_CAST(s)  ((char *)(s))
++#define SIP_MLDOC_CAST(s)   ((char *)(s))
++#define SIP_TPNAME_CAST(s)  ((char *)(s))
++
++#endif
++
++#if PY_MAJOR_VERSION >= 3
++
++#define SIPLong_Check       PyLong_Check
++#define SIPLong_FromLong    PyLong_FromLong
++#define SIPLong_AsLong      PyLong_AsLong
++
++#define SIPBytes_Check      PyBytes_Check
++#define SIPBytes_FromString PyBytes_FromString
++#define SIPBytes_FromStringAndSize  PyBytes_FromStringAndSize
++#define SIPBytes_AsString   PyBytes_AsString
++#define SIPBytes_Size       PyBytes_Size
++#define SIPBytes_AS_STRING  PyBytes_AS_STRING
++#define SIPBytes_GET_SIZE   PyBytes_GET_SIZE
++
++#if PY_MINOR_VERSION >= 1
++#define SIP_USE_PYCAPSULE
++#endif
++
++#if PY_MINOR_VERSION < 2
++#define SIP_SUPPORT_PYCOBJECT
++#endif
++
++#else
++
++#define SIPLong_Check       PyInt_Check
++#define SIPLong_FromLong    PyInt_FromLong
++#define SIPLong_AsLong      PyInt_AsLong
++
++#define SIPBytes_Check      PyString_Check
++#define SIPBytes_FromString PyString_FromString
++#define SIPBytes_FromStringAndSize  PyString_FromStringAndSize
++#define SIPBytes_AsString   PyString_AsString
++#define SIPBytes_Size       PyString_Size
++#define SIPBytes_AS_STRING  PyString_AS_STRING
++#define SIPBytes_GET_SIZE   PyString_GET_SIZE
++
++#if PY_MINOR_VERSION >= 7
++#define SIP_USE_PYCAPSULE
++#endif
++
++#define SIP_SUPPORT_PYCOBJECT
++
++#endif
++
++#if !defined(Py_REFCNT)
++#define Py_REFCNT(ob)       (((PyObject*)(ob))->ob_refcnt)
++#endif
++
++#if !defined(Py_TYPE)
++#define Py_TYPE(ob)         (((PyObject*)(ob))->ob_type)
++#endif
++
++#if !defined(PyVarObject_HEAD_INIT)
++#define PyVarObject_HEAD_INIT(type, size)   PyObject_HEAD_INIT(type) size,
++#endif
++
++
++#if defined(SIP_USE_PYCAPSULE)
++#define SIPCapsule_FromVoidPtr(p, n)    PyCapsule_New((p), (n), NULL)
++#define SIPCapsule_AsVoidPtr(p, n)      PyCapsule_GetPointer((p), (n))
++#else
++#define SIPCapsule_FromVoidPtr(p, n)    sipConvertFromVoidPtr((p))
++#define SIPCapsule_AsVoidPtr(p, n)      sipConvertToVoidPtr((p))
++#endif
++
++
++/*
++ * The mask that can be passed to sipTrace().
++ */
++#define SIP_TRACE_CATCHERS  0x0001
++#define SIP_TRACE_CTORS     0x0002
++#define SIP_TRACE_DTORS     0x0004
++#define SIP_TRACE_INITS     0x0008
++#define SIP_TRACE_DEALLOCS  0x0010
++#define SIP_TRACE_METHODS   0x0020
++
++
++/*
++ * Hide some thread dependent stuff.
++ */
++#ifdef WITH_THREAD
++typedef PyGILState_STATE sip_gilstate_t;
++#define SIP_RELEASE_GIL(gs) PyGILState_Release(gs);
++#define SIP_BLOCK_THREADS   {PyGILState_STATE sipGIL = PyGILState_Ensure();
++#define SIP_UNBLOCK_THREADS PyGILState_Release(sipGIL);}
++#else
++typedef int sip_gilstate_t;
++#define SIP_RELEASE_GIL(gs)
++#define SIP_BLOCK_THREADS
++#define SIP_UNBLOCK_THREADS
++#endif
++
++
++/*
++ * Forward declarations of types.
++ */
++struct _sipBufferDef;
++typedef struct _sipBufferDef sipBufferDef;
++
++struct _sipBufferInfoDef;
++typedef struct _sipBufferInfoDef sipBufferInfoDef;
++
++struct _sipCFunctionDef;
++typedef struct _sipCFunctionDef sipCFunctionDef;
++
++struct _sipDateDef;
++typedef struct _sipDateDef sipDateDef;
++
++struct _sipEnumTypeObject;
++typedef struct _sipEnumTypeObject sipEnumTypeObject;
++
++struct _sipMethodDef;
++typedef struct _sipMethodDef sipMethodDef;
++
++struct _sipSimpleWrapper;
++typedef struct _sipSimpleWrapper sipSimpleWrapper;
++
++struct _sipTimeDef;
++typedef struct _sipTimeDef sipTimeDef;
++
++struct _sipTypeDef;
++typedef struct _sipTypeDef sipTypeDef;
++
++struct _sipWrapperType;
++typedef struct _sipWrapperType sipWrapperType;
++
++struct _sipWrapper;
++typedef struct _sipWrapper sipWrapper;
++
++
++/*
++ * The different events a handler can be registered for.
++ */
++typedef enum
++{
++    sipEventWrappedInstance,    /* After wrapping a C/C++ instance. */
++    sipEventCollectingWrapper,  /* When garbage collecting a wrapper object. */
++    sipEventNrEvents
++} sipEventType;
++
++/*
++ * The event handlers.
++ */
++typedef void (*sipWrappedInstanceEventHandler)(void *sipCpp);
++typedef void (*sipCollectingWrapperEventHandler)(sipSimpleWrapper *sipSelf);
++
++
++/*
++ * The operation an access function is being asked to perform.
++ */
++typedef enum
++{
++    UnguardedPointer,   /* Return the unguarded pointer. */
++    GuardedPointer,     /* Return the guarded pointer, ie. 0 if it has gone. */
++    ReleaseGuard        /* Release the guard, if any. */
++} AccessFuncOp;
++
++
++/*
++ * Some convenient function pointers.
++ */
++typedef void *(*sipInitFunc)(sipSimpleWrapper *, PyObject *, PyObject *,
++        PyObject **, PyObject **, PyObject **);
++typedef int (*sipFinalFunc)(PyObject *, void *, PyObject *, PyObject **);
++typedef void *(*sipAccessFunc)(sipSimpleWrapper *, AccessFuncOp);
++typedef int (*sipTraverseFunc)(void *, visitproc, void *);
++typedef int (*sipClearFunc)(void *);
++#if PY_MAJOR_VERSION >= 3
++typedef int (*sipGetBufferFuncLimited)(PyObject *, void *, sipBufferDef *);
++typedef void (*sipReleaseBufferFuncLimited)(PyObject *, void *);
++#if !defined(Py_LIMITED_API)
++typedef int (*sipGetBufferFunc)(PyObject *, void *, Py_buffer *, int);
++typedef void (*sipReleaseBufferFunc)(PyObject *, void *, Py_buffer *);
++#endif
++#else
++typedef SIP_SSIZE_T (*sipBufferFunc)(PyObject *, void *, SIP_SSIZE_T, void **);
++typedef SIP_SSIZE_T (*sipSegCountFunc)(PyObject *, void *, SIP_SSIZE_T *);
++#endif
++typedef void (*sipDeallocFunc)(sipSimpleWrapper *);
++typedef void *(*sipCastFunc)(void *, const sipTypeDef *);
++typedef const sipTypeDef *(*sipSubClassConvertFunc)(void **);
++typedef int (*sipConvertToFunc)(PyObject *, void **, int *, PyObject *);
++typedef PyObject *(*sipConvertFromFunc)(void *, PyObject *);
++typedef void (*sipVirtErrorHandlerFunc)(sipSimpleWrapper *, sip_gilstate_t);
++typedef int (*sipVirtHandlerFunc)(sip_gilstate_t, sipVirtErrorHandlerFunc,
++        sipSimpleWrapper *, PyObject *, ...);
++typedef void (*sipAssignFunc)(void *, SIP_SSIZE_T, void *);
++typedef void *(*sipArrayFunc)(SIP_SSIZE_T);
++typedef void *(*sipCopyFunc)(const void *, SIP_SSIZE_T);
++typedef void (*sipReleaseFunc)(void *, int);
++typedef PyObject *(*sipPickleFunc)(void *);
++typedef int (*sipAttrGetterFunc)(const sipTypeDef *, PyObject *);
++typedef PyObject *(*sipVariableGetterFunc)(void *, PyObject *, PyObject *);
++typedef int (*sipVariableSetterFunc)(void *, PyObject *, PyObject *);
++typedef void *(*sipProxyResolverFunc)(void *);
++typedef int (*sipNewUserTypeFunc)(sipWrapperType *);
++
++
++#if !defined(Py_LIMITED_API) || PY_VERSION_HEX < 0x03020000
++/*
++ * The meta-type of a wrapper type.
++ */
++struct _sipWrapperType {
++    /*
++     * The super-metatype.  This must be first in the structure so that it can
++     * be cast to a PyTypeObject *.
++     */
++    PyHeapTypeObject super;
++
++    /* Set if the type is a user implemented Python sub-class. */
++    unsigned wt_user_type : 1;
++
++    /* Set if the type's dictionary contains all lazy attributes. */
++    unsigned wt_dict_complete : 1;
++
++    /* Unused and available for future use. */
++    unsigned wt_unused : 30;
++
++    /* The generated type structure. */
++    sipTypeDef *wt_td;
++
++    /* The list of init extenders. */
++    struct _sipInitExtenderDef *wt_iextend;
++
++    /* The handler called whenever a new user type has been created. */
++    sipNewUserTypeFunc wt_new_user_type_handler;
++
++    /*
++     * For the user to use.  Note that any data structure will leak if the
++     * type is garbage collected.
++     */
++    void *wt_user_data;
++};
++
++
++/*
++ * The type of a simple C/C++ wrapper object.
++ */
++struct _sipSimpleWrapper {
++    PyObject_HEAD
++
++    /*
++     * The data, initially a pointer to the C/C++ object, as interpreted by the
++     * access function.
++     */
++    void *data;
++
++    /* The optional access function. */
++    sipAccessFunc access_func;
++
++    /* Object flags. */
++    unsigned sw_flags;
++
++    /* The optional dictionary of extra references keyed by argument number. */
++    PyObject *extra_refs;
++
++    /* For the user to use. */
++    PyObject *user;
++
++    /* The instance dictionary. */
++    PyObject *dict;
++
++    /* The main instance if this is a mixin. */
++    PyObject *mixin_main;
++
++    /* Next object at this address. */
++    struct _sipSimpleWrapper *next;
++};
++
++
++/*
++ * The type of a C/C++ wrapper object that supports parent/child relationships.
++ */
++struct _sipWrapper {
++    /* The super-type. */
++    sipSimpleWrapper super;
++
++    /* First child object. */
++    struct _sipWrapper *first_child;
++
++    /* Next sibling. */
++    struct _sipWrapper *sibling_next;
++
++    /* Previous sibling. */
++    struct _sipWrapper *sibling_prev;
++
++    /* Owning object. */
++    struct _sipWrapper *parent;
++};
++
++
++/*
++ * The meta-type of an enum type.  (This is exposed only to support the
++ * deprecated sipConvertFromNamedEnum() macro.)
++ */
++struct _sipEnumTypeObject {
++    /*
++     * The super-metatype.  This must be first in the structure so that it can
++     * be cast to a PyTypeObject *.
++     */
++    PyHeapTypeObject super;
++
++    /* The generated type structure. */
++    struct _sipTypeDef *type;
++};
++#endif
++
++
++/*
++ * The information describing an encoded type ID.
++ */
++typedef struct _sipEncodedTypeDef {
++    /* The type number. */
++    unsigned sc_type : 16;
++
++    /* The module number (255 for this one). */
++    unsigned sc_module : 8;
++
++    /* A context specific flag. */
++    unsigned sc_flag : 1;
++} sipEncodedTypeDef;
++
++
++/*
++ * The information describing an enum member.
++ */
++typedef struct _sipEnumMemberDef {
++    /* The member name. */
++    const char *em_name;
++
++    /* The member value. */
++    int em_val;
++
++    /* The member enum, -ve if anonymous. */
++    int em_enum;
++} sipEnumMemberDef;
++
++
++/*
++ * The information describing static instances.
++ */
++typedef struct _sipInstancesDef {
++    /* The types. */
++    struct _sipTypeInstanceDef *id_type;
++
++    /* The void *. */
++    struct _sipVoidPtrInstanceDef *id_voidp;
++
++    /* The chars. */
++    struct _sipCharInstanceDef *id_char;
++
++    /* The strings. */
++    struct _sipStringInstanceDef *id_string;
++
++    /* The ints. */
++    struct _sipIntInstanceDef *id_int;
++
++    /* The longs. */
++    struct _sipLongInstanceDef *id_long;
++
++    /* The unsigned longs. */
++    struct _sipUnsignedLongInstanceDef *id_ulong;
++
++    /* The long longs. */
++    struct _sipLongLongInstanceDef *id_llong;
++
++    /* The unsigned long longs. */
++    struct _sipUnsignedLongLongInstanceDef *id_ullong;
++
++    /* The doubles. */
++    struct _sipDoubleInstanceDef *id_double;
++} sipInstancesDef;
++
++
++/*
++ * The information describing a type initialiser extender.
++ */
++typedef struct _sipInitExtenderDef {
++    /* The API version range index. */
++    int ie_api_range;
++
++    /* The extender function. */
++    sipInitFunc ie_extender;
++
++    /* The class being extended. */
++    sipEncodedTypeDef ie_class;
++
++    /* The next extender for this class. */
++    struct _sipInitExtenderDef *ie_next;
++} sipInitExtenderDef;
++
++
++/*
++ * The information describing a sub-class convertor.
++ */
++typedef struct _sipSubClassConvertorDef {
++    /* The convertor. */
++    sipSubClassConvertFunc scc_convertor;
++
++    /* The encoded base type. */
++    sipEncodedTypeDef scc_base;
++
++    /* The base type. */
++    struct _sipTypeDef *scc_basetype;
++} sipSubClassConvertorDef;
++
++
++/*
++ * The structure populated by %BIGetBufferCode when the limited API is enabled.
++ */
++struct _sipBufferDef {
++    /* The address of the buffer. */
++    void *bd_buffer;
++
++    /* The length of the buffer. */
++    SIP_SSIZE_T bd_length;
++
++    /* Set if the buffer is read-only. */
++    int bd_readonly;
++};
++
++
++/*
++ * The structure describing a Python buffer.
++ */
++struct _sipBufferInfoDef {
++    /* This is internal to sip. */
++    void *bi_internal;
++
++    /* The address of the buffer. */
++    void *bi_buf;
++
++    /* A reference to the object implementing the buffer interface. */
++    PyObject *bi_obj;
++
++    /* The length of the buffer in bytes. */
++    SIP_SSIZE_T bi_len;
++
++    /* The number of dimensions. */
++    int bi_ndim;
++
++    /* The format of each element of the buffer. */
++    char *bi_format;
++};
++
++
++/*
++ * The structure describing a Python C function.
++ */
++struct _sipCFunctionDef {
++    /* The C function. */
++    PyMethodDef *cf_function;
++
++    /* The optional bound object. */
++    PyObject *cf_self;
++};
++
++
++/*
++ * The structure describing a Python method.
++ */
++struct _sipMethodDef {
++    /* The function that implements the method. */
++    PyObject *pm_function;
++
++    /* The bound object. */
++    PyObject *pm_self;
++
++#if PY_MAJOR_VERSION < 3
++    /* The class. */
++    PyObject *pm_class;
++#endif
++};
++
++
++/*
++ * The structure describing a Python date.
++ */
++struct _sipDateDef {
++    /* The year. */
++    int pd_year;
++
++    /* The month (1-12). */
++    int pd_month;
++
++    /* The day (1-31). */
++    int pd_day;
++};
++
++
++/*
++ * The structure describing a Python time.
++ */
++struct _sipTimeDef {
++    /* The hour (0-23). */
++    int pt_hour;
++
++    /* The minute (0-59). */
++    int pt_minute;
++
++    /* The second (0-59). */
++    int pt_second;
++
++    /* The microsecond (0-999999). */
++    int pt_microsecond;
++};
++
++
++/*
++ * The different error states of handwritten code.
++ */
++typedef enum {
++    sipErrorNone,       /* There is no error. */
++    sipErrorFail,       /* The error is a failure. */
++    sipErrorContinue    /* It may not apply if a later operation succeeds. */
++} sipErrorState;
++
++
++/*
++ * The different Python slot types.  New slots must be added to the end,
++ * otherwise the major version of the internal ABI must be changed.
++ */
++typedef enum {
++    str_slot,           /* __str__ */
++    int_slot,           /* __int__ */
++#if PY_MAJOR_VERSION < 3
++    long_slot,          /* __long__ */
++#endif
++    float_slot,         /* __float__ */
++    len_slot,           /* __len__ */
++    contains_slot,      /* __contains__ */
++    add_slot,           /* __add__ for number */
++    concat_slot,        /* __add__ for sequence types */
++    sub_slot,           /* __sub__ */
++    mul_slot,           /* __mul__ for number types */
++    repeat_slot,        /* __mul__ for sequence types */
++    div_slot,           /* __div__ */
++    mod_slot,           /* __mod__ */
++    floordiv_slot,      /* __floordiv__ */
++    truediv_slot,       /* __truediv__ */
++    and_slot,           /* __and__ */
++    or_slot,            /* __or__ */
++    xor_slot,           /* __xor__ */
++    lshift_slot,        /* __lshift__ */
++    rshift_slot,        /* __rshift__ */
++    iadd_slot,          /* __iadd__ for number types */
++    iconcat_slot,       /* __iadd__ for sequence types */
++    isub_slot,          /* __isub__ */
++    imul_slot,          /* __imul__ for number types */
++    irepeat_slot,       /* __imul__ for sequence types */
++    idiv_slot,          /* __idiv__ */
++    imod_slot,          /* __imod__ */
++    ifloordiv_slot,     /* __ifloordiv__ */
++    itruediv_slot,      /* __itruediv__ */
++    iand_slot,          /* __iand__ */
++    ior_slot,           /* __ior__ */
++    ixor_slot,          /* __ixor__ */
++    ilshift_slot,       /* __ilshift__ */
++    irshift_slot,       /* __irshift__ */
++    invert_slot,        /* __invert__ */
++    call_slot,          /* __call__ */
++    getitem_slot,       /* __getitem__ */
++    setitem_slot,       /* __setitem__ */
++    delitem_slot,       /* __delitem__ */
++    lt_slot,            /* __lt__ */
++    le_slot,            /* __le__ */
++    eq_slot,            /* __eq__ */
++    ne_slot,            /* __ne__ */
++    gt_slot,            /* __gt__ */
++    ge_slot,            /* __ge__ */
++#if PY_MAJOR_VERSION < 3
++    cmp_slot,           /* __cmp__ */
++#endif
++    bool_slot,          /* __bool__, __nonzero__ */
++    neg_slot,           /* __neg__ */
++    repr_slot,          /* __repr__ */
++    hash_slot,          /* __hash__ */
++    pos_slot,           /* __pos__ */
++    abs_slot,           /* __abs__ */
++#if PY_VERSION_HEX >= 0x02050000
++    index_slot,         /* __index__ */
++#endif
++    iter_slot,          /* __iter__ */
++    next_slot,          /* __next__ */
++    setattr_slot,       /* __setattr__, __delattr__ */
++    matmul_slot,        /* __matmul__ (for Python v3.5 and later) */
++    imatmul_slot,       /* __imatmul__ (for Python v3.5 and later) */
++    await_slot,         /* __await__ (for Python v3.5 and later) */
++    aiter_slot,         /* __aiter__ (for Python v3.5 and later) */
++    anext_slot,         /* __anext__ (for Python v3.5 and later) */
++} sipPySlotType;
++
++
++/*
++ * The information describing a Python slot function.
++ */
++typedef struct _sipPySlotDef {
++    /* The function. */
++    void *psd_func;
++
++    /* The type. */
++    sipPySlotType psd_type;
++} sipPySlotDef;
++
++
++/*
++ * The information describing a Python slot extender.
++ */
++typedef struct _sipPySlotExtenderDef {
++    /* The function. */
++    void *pse_func;
++
++    /* The type. */
++    sipPySlotType pse_type;
++
++    /* The encoded class. */
++    sipEncodedTypeDef pse_class;
++} sipPySlotExtenderDef;
++
++
++/*
++ * The information describing a typedef.
++ */
++typedef struct _sipTypedefDef {
++    /* The typedef name. */
++    const char *tdd_name;
++
++    /* The typedef value. */
++    const char *tdd_type_name;
++} sipTypedefDef;
++
++
++/*
++ * The information describing a variable or property.
++ */
++
++typedef enum
++{
++    PropertyVariable,       /* A property. */
++    InstanceVariable,       /* An instance variable. */
++    ClassVariable           /* A class (i.e. static) variable. */
++} sipVariableType;
++
++typedef struct _sipVariableDef {
++    /* The type of variable. */
++    sipVariableType vd_type;
++
++    /* The name. */
++    const char *vd_name;
++
++    /*
++     * The getter.  If this is a variable (rather than a property) then the
++     * actual type is sipVariableGetterFunc.
++     */
++    PyMethodDef *vd_getter;
++
++    /*
++     * The setter.  If this is a variable (rather than a property) then the
++     * actual type is sipVariableSetterFunc.  It is NULL if the property cannot
++     * be set or the variable is const.
++     */
++    PyMethodDef *vd_setter;
++
++    /* The property deleter. */
++    PyMethodDef *vd_deleter;
++
++    /* The docstring. */
++    const char *vd_docstring;
++} sipVariableDef;
++
++
++/*
++ * The information describing a type, either a C++ class (or C struct), a C++
++ * namespace, a mapped type or a named enum.
++ */
++struct _sipTypeDef {
++    /* The version range index, -1 if the type isn't versioned. */
++    int td_version;
++
++    /* The next version of this type. */
++    struct _sipTypeDef *td_next_version;
++
++    /*
++     * The module, 0 if the type hasn't been initialised.
++     */
++    struct _sipExportedModuleDef *td_module;
++
++    /* Type flags, see the sipType*() macros. */
++    int td_flags;
++
++    /* The C/C++ name of the type. */
++    int td_cname;
++
++    /*
++     * The Python type object.  This needs to be a union until we remove the
++     * deprecated sipClass_* macros.
++     */
++    union {
++        PyTypeObject *td_py_type;
++        sipWrapperType *td_wrapper_type;
++    } u;
++
++    /* Any additional fixed data generated by a plugin. */
++    void *td_plugin_data;
++};
++
++
++/*
++ * The information describing a container (ie. a class, namespace or a mapped
++ * type).
++ */
++typedef struct _sipContainerDef {
++    /*
++     * The Python name of the type, -1 if this is a namespace extender (in the
++     * context of a class) or doesn't require a namespace (in the context of a
++     * mapped type). */
++    int cod_name;
++
++    /*
++     * The scoping type or the namespace this is extending if it is a namespace
++     * extender.
++     */
++    sipEncodedTypeDef cod_scope;
++
++    /* The number of lazy methods. */
++    int cod_nrmethods;
++
++    /* The table of lazy methods. */
++    PyMethodDef *cod_methods;
++
++    /* The number of lazy enum members. */
++    int cod_nrenummembers;
++
++    /* The table of lazy enum members. */
++    sipEnumMemberDef *cod_enummembers;
++
++    /* The number of variables. */
++    int cod_nrvariables;
++
++    /* The table of variables. */
++    sipVariableDef *cod_variables;
++
++    /* The static instances. */
++    sipInstancesDef cod_instances;
++} sipContainerDef;
++
++
++/*
++ * The information describing a C++ class (or C struct) or a C++ namespace.
++ */
++typedef struct _sipClassTypeDef {
++    /* The base type information. */
++    sipTypeDef ctd_base;
++
++    /* The container information. */
++    sipContainerDef ctd_container;
++
++    /* The docstring. */
++    const char *ctd_docstring;
++
++    /*
++     * The meta-type name, -1 to use the meta-type of the first super-type
++     * (normally sipWrapperType).
++     */
++    int ctd_metatype;
++
++    /* The super-type name, -1 to use sipWrapper. */
++    int ctd_supertype;
++
++    /* The super-types. */
++    sipEncodedTypeDef *ctd_supers;
++
++    /* The table of Python slots. */
++    sipPySlotDef *ctd_pyslots;
++
++    /* The initialisation function. */
++    sipInitFunc ctd_init;
++
++    /* The traverse function. */
++    sipTraverseFunc ctd_traverse;
++
++    /* The clear function. */
++    sipClearFunc ctd_clear;
++
++#if PY_MAJOR_VERSION >= 3
++    /* The get buffer function. */
++#if defined(Py_LIMITED_API)
++    sipGetBufferFuncLimited ctd_getbuffer;
++#else
++    sipGetBufferFunc ctd_getbuffer;
++#endif
++
++    /* The release buffer function. */
++#if defined(Py_LIMITED_API)
++    sipReleaseBufferFuncLimited ctd_releasebuffer;
++#else
++    sipReleaseBufferFunc ctd_releasebuffer;
++#endif
++#else
++    /* The read buffer function. */
++    sipBufferFunc ctd_readbuffer;
++
++    /* The write buffer function. */
++    sipBufferFunc ctd_writebuffer;
++
++    /* The segment count function. */
++    sipSegCountFunc ctd_segcount;
++
++    /* The char buffer function. */
++    sipBufferFunc ctd_charbuffer;
++#endif
++
++    /* The deallocation function. */
++    sipDeallocFunc ctd_dealloc;
++
++    /* The optional assignment function. */
++    sipAssignFunc ctd_assign;
++
++    /* The optional array allocation function. */
++    sipArrayFunc ctd_array;
++
++    /* The optional copy function. */
++    sipCopyFunc ctd_copy;
++
++    /* The release function, 0 if a C struct. */
++    sipReleaseFunc ctd_release;
++
++    /* The cast function, 0 if a C struct. */
++    sipCastFunc ctd_cast;
++
++    /* The optional convert to function. */
++    sipConvertToFunc ctd_cto;
++
++    /* The optional convert from function. */
++    sipConvertFromFunc ctd_cfrom;
++
++    /* The next namespace extender. */
++    struct _sipClassTypeDef *ctd_nsextender;
++
++    /* The pickle function. */
++    sipPickleFunc ctd_pickle;
++
++    /* The finalisation function. */
++    sipFinalFunc ctd_final;
++
++    /* The mixin initialisation function. */
++    initproc ctd_init_mixin;
++} sipClassTypeDef;
++
++
++/*
++ * The information describing a mapped type.
++ */
++typedef struct _sipMappedTypeDef {
++    /* The base type information. */
++    sipTypeDef mtd_base;
++
++    /* The container information. */
++    sipContainerDef mtd_container;
++
++    /* The optional assignment function. */
++    sipAssignFunc mtd_assign;
++
++    /* The optional array allocation function. */
++    sipArrayFunc mtd_array;
++
++    /* The optional copy function. */
++    sipCopyFunc mtd_copy;
++
++    /* The optional release function. */
++    sipReleaseFunc mtd_release;
++
++    /* The convert to function. */
++    sipConvertToFunc mtd_cto;
++
++    /* The convert from function. */
++    sipConvertFromFunc mtd_cfrom;
++} sipMappedTypeDef;
++
++
++/*
++ * The information describing a named enum.
++ */
++typedef struct _sipEnumTypeDef {
++    /* The base type information. */
++    sipTypeDef etd_base;
++
++    /* The Python name of the enum. */
++    int etd_name;
++
++    /* The scoping type, -1 if it is defined at the module level. */
++    int etd_scope;
++
++    /* The Python slots. */
++    struct _sipPySlotDef *etd_pyslots;
++} sipEnumTypeDef;
++
++
++/*
++ * The information describing an external type.
++ */
++typedef struct _sipExternalTypeDef {
++    /* The index into the type table. */
++    int et_nr;
++
++    /* The name of the type. */
++    const char *et_name;
++} sipExternalTypeDef;
++
++
++/*
++ * The information describing a mapped class.  This (and anything that uses it)
++ * is deprecated.
++ */
++typedef sipTypeDef sipMappedType;
++
++
++/*
++ * Defines an entry in the module specific list of delayed dtor calls.
++ */
++typedef struct _sipDelayedDtor {
++    /* The C/C++ instance. */
++    void *dd_ptr;
++
++    /* The class name. */
++    const char *dd_name;
++
++    /* Non-zero if dd_ptr is a derived class instance. */
++    int dd_isderived;
++
++    /* Next in the list. */
++    struct _sipDelayedDtor *dd_next;
++} sipDelayedDtor;
++
++
++/*
++ * Defines an entry in the table of global functions all of whose overloads
++ * are versioned (so their names can't be automatically added to the module
++ * dictionary).
++ */
++typedef struct _sipVersionedFunctionDef {
++    /* The name, -1 marks the end of the table. */
++    int vf_name;
++
++    /* The function itself. */
++    PyCFunction vf_function;
++
++    /* The METH_* flags. */
++    int vf_flags;
++
++    /* The docstring. */
++    const char *vf_docstring;
++
++    /* The API version range index. */
++    int vf_api_range;
++} sipVersionedFunctionDef;
++
++
++/*
++ * Defines a virtual error handler.
++ */
++typedef struct _sipVirtErrorHandlerDef {
++    /* The name of the handler. */
++    const char *veh_name;
++
++    /* The handler function. */
++    sipVirtErrorHandlerFunc veh_handler;
++} sipVirtErrorHandlerDef;
++
++
++/*
++ * Defines a type imported from another module.
++ */
++typedef union _sipImportedTypeDef {
++    /* The type name before the module is imported. */
++    const char *it_name;
++
++    /* The type after the module is imported. */
++    sipTypeDef *it_td;
++} sipImportedTypeDef;
++
++
++/*
++ * Defines a virtual error handler imported from another module.
++ */
++typedef union _sipImportedVirtErrorHandlerDef {
++    /* The handler name before the module is imported. */
++    const char *iveh_name;
++
++    /* The handler after the module is imported. */
++    sipVirtErrorHandlerFunc iveh_handler;
++} sipImportedVirtErrorHandlerDef;
++
++
++/*
++ * Defines an exception imported from another module.
++ */
++typedef union _sipImportedExceptionDef {
++    /* The exception name before the module is imported. */
++    const char *iexc_name;
++
++    /* The exception object after the module is imported. */
++    PyObject *iexc_object;
++} sipImportedExceptionDef;
++
++
++/*
++ * The information describing an imported module.
++ */
++typedef struct _sipImportedModuleDef {
++    /* The module name. */
++    const char *im_name;
++
++    /* The types imported from the module. */
++    sipImportedTypeDef *im_imported_types;
++
++    /* The virtual error handlers imported from the module. */
++    sipImportedVirtErrorHandlerDef *im_imported_veh;
++
++    /* The exceptions imported from the module. */
++    sipImportedExceptionDef *im_imported_exceptions;
++} sipImportedModuleDef;
++
++
++/*
++ * The main client module structure.
++ */
++typedef struct _sipExportedModuleDef {
++    /* The next in the list. */
++    struct _sipExportedModuleDef *em_next;
++
++    /* The SIP API minor version number. */
++    unsigned em_api_minor;
++
++    /* The module name. */
++    int em_name;
++
++    /* The module name as an object. */
++    PyObject *em_nameobj;
++
++    /* The string pool. */
++    const char *em_strings;
++
++    /* The imported modules. */
++    sipImportedModuleDef *em_imports;
++
++    /* The optional Qt support API. */
++    struct _sipQtAPI *em_qt_api;
++
++    /* The number of types. */
++    int em_nrtypes;
++
++    /* The table of types. */
++    sipTypeDef **em_types;
++
++    /* The table of external types. */
++    sipExternalTypeDef *em_external;
++
++    /* The number of members in global enums. */
++    int em_nrenummembers;
++
++    /* The table of members in global enums. */
++    sipEnumMemberDef *em_enummembers;
++
++    /* The number of typedefs. */
++    int em_nrtypedefs;
++
++    /* The table of typedefs. */
++    sipTypedefDef *em_typedefs;
++
++    /* The table of virtual error handlers. */
++    sipVirtErrorHandlerDef *em_virterrorhandlers;
++
++    /* The sub-class convertors. */
++    sipSubClassConvertorDef *em_convertors;
++
++    /* The static instances. */
++    sipInstancesDef em_instances;
++
++    /* The license. */
++    struct _sipLicenseDef *em_license;
++
++    /* The table of exception types. */
++    PyObject **em_exceptions;
++
++    /* The table of Python slot extenders. */
++    sipPySlotExtenderDef *em_slotextend;
++
++    /* The table of initialiser extenders. */
++    sipInitExtenderDef *em_initextend;
++
++    /* The delayed dtor handler. */
++    void (*em_delayeddtors)(const sipDelayedDtor *);
++
++    /* The list of delayed dtors. */
++    sipDelayedDtor *em_ddlist;
++
++    /*
++     * The array of API version definitions.  Each definition takes up 3
++     * elements.  If the third element of a 3-tuple is negative then the first
++     * two elements define an API and its default version.  All such
++     * definitions will appear at the end of the array.  If the first element
++     * of a 3-tuple is negative then that is the last element of the array.
++     */
++    int *em_versions;
++
++    /* The optional table of versioned functions. */
++    sipVersionedFunctionDef *em_versioned_functions;
++} sipExportedModuleDef;
++
++
++/*
++ * The information describing a license to be added to a dictionary.
++ */
++typedef struct _sipLicenseDef {
++    /* The type of license. */
++    const char *lc_type;
++
++    /* The licensee. */
++    const char *lc_licensee;
++
++    /* The timestamp. */
++    const char *lc_timestamp;
++
++    /* The signature. */
++    const char *lc_signature;
++} sipLicenseDef;
++
++
++/*
++ * The information describing a void pointer instance to be added to a
++ * dictionary.
++ */
++typedef struct _sipVoidPtrInstanceDef {
++    /* The void pointer name. */
++    const char *vi_name;
++
++    /* The void pointer value. */
++    void *vi_val;
++} sipVoidPtrInstanceDef;
++
++
++/*
++ * The information describing a char instance to be added to a dictionary.
++ */
++typedef struct _sipCharInstanceDef {
++    /* The char name. */
++    const char *ci_name;
++
++    /* The char value. */
++    char ci_val;
++
++    /* The encoding used, either 'A', 'L', '8' or 'N'. */
++    char ci_encoding;
++} sipCharInstanceDef;
++
++
++/*
++ * The information describing a string instance to be added to a dictionary.
++ * This is also used as a hack to add (or fix) other types rather than add a
++ * new table type and so requiring a new major version of the API.
++ */
++typedef struct _sipStringInstanceDef {
++    /* The string name. */
++    const char *si_name;
++
++    /* The string value. */
++    const char *si_val;
++
++    /*
++     * The encoding used, either 'A', 'L', '8' or 'N'.  'w' and 'W' are also
++     * used to support the fix for wchar_t.
++     */
++    char si_encoding;
++} sipStringInstanceDef;
++
++
++/*
++ * The information describing an int instance to be added to a dictionary.
++ */
++typedef struct _sipIntInstanceDef {
++    /* The int name. */
++    const char *ii_name;
++
++    /* The int value. */
++    int ii_val;
++} sipIntInstanceDef;
++
++
++/*
++ * The information describing a long instance to be added to a dictionary.
++ */
++typedef struct _sipLongInstanceDef {
++    /* The long name. */
++    const char *li_name;
++
++    /* The long value. */
++    long li_val;
++} sipLongInstanceDef;
++
++
++/*
++ * The information describing an unsigned long instance to be added to a
++ * dictionary.
++ */
++typedef struct _sipUnsignedLongInstanceDef {
++    /* The unsigned long name. */
++    const char *uli_name;
++
++    /* The unsigned long value. */
++    unsigned long uli_val;
++} sipUnsignedLongInstanceDef;
++
++
++/*
++ * The information describing a long long instance to be added to a dictionary.
++ */
++typedef struct _sipLongLongInstanceDef {
++    /* The long long name. */
++    const char *lli_name;
++
++    /* The long long value. */
++#if defined(HAVE_LONG_LONG)
++    PY_LONG_LONG lli_val;
++#else
++    long lli_val;
++#endif
++} sipLongLongInstanceDef;
++
++
++/*
++ * The information describing an unsigned long long instance to be added to a
++ * dictionary.
++ */
++typedef struct _sipUnsignedLongLongInstanceDef {
++    /* The unsigned long long name. */
++    const char *ulli_name;
++
++    /* The unsigned long long value. */
++#if defined(HAVE_LONG_LONG)
++    unsigned PY_LONG_LONG ulli_val;
++#else
++    unsigned long ulli_val;
++#endif
++} sipUnsignedLongLongInstanceDef;
++
++
++/*
++ * The information describing a double instance to be added to a dictionary.
++ */
++typedef struct _sipDoubleInstanceDef {
++    /* The double name. */
++    const char *di_name;
++
++    /* The double value. */
++    double di_val;
++} sipDoubleInstanceDef;
++
++
++/*
++ * The information describing a class or enum instance to be added to a
++ * dictionary.
++ */
++typedef struct _sipTypeInstanceDef {
++    /* The type instance name. */
++    const char *ti_name;
++
++    /* The actual instance. */
++    void *ti_ptr;
++
++    /* A pointer to the generated type. */
++    struct _sipTypeDef **ti_type;
++
++    /* The wrapping flags. */
++    int ti_flags;
++} sipTypeInstanceDef;
++
++
++/*
++ * Define a mapping between a wrapped type identified by a string and the
++ * corresponding Python type.  This is deprecated.
++ */
++typedef struct _sipStringTypeClassMap {
++    /* The type as a string. */
++    const char *typeString;
++
++    /* A pointer to the Python type. */
++    struct _sipWrapperType **pyType;
++} sipStringTypeClassMap;
++
++
++/*
++ * Define a mapping between a wrapped type identified by an integer and the
++ * corresponding Python type.  This is deprecated.
++ */
++typedef struct _sipIntTypeClassMap {
++    /* The type as an integer. */
++    int typeInt;
++
++    /* A pointer to the Python type. */
++    struct _sipWrapperType **pyType;
++} sipIntTypeClassMap;
++
++
++/*
++ * A Python method's component parts.  This allows us to re-create the method
++ * without changing the reference counts of the components.
++ */
++typedef struct _sipPyMethod {
++    /* The function. */
++    PyObject *mfunc;
++
++    /* Self if it is a bound method. */
++    PyObject *mself;
++
++#if PY_MAJOR_VERSION < 3
++    /* The class. */
++    PyObject *mclass;
++#endif
++} sipPyMethod;
++
++
++/*
++ * A slot (in the Qt, rather than Python, sense).
++ */
++typedef struct _sipSlot {
++    /* Name if a Qt or Python signal. */
++    char *name;
++
++    /* Signal or Qt slot object. */
++    PyObject *pyobj;
++
++    /* Python slot method, pyobj is NULL. */
++    sipPyMethod meth;
++
++    /* A weak reference to the slot, Py_True if pyobj has an extra reference. */
++    PyObject *weakSlot;
++} sipSlot;
++
++
++/*
++ * The API exported by the SIP module, ie. pointers to all the data and
++ * functions that can be used by generated code.
++ */
++typedef struct _sipAPIDef {
++    /*
++     * This must be the first entry and it's signature must not change so that
++     * version number mismatches can be detected and reported.
++     */
++    int (*api_export_module)(sipExportedModuleDef *client, unsigned api_major,
++            unsigned api_minor, void *unused);
++
++    /*
++     * The following are part of the public API.
++     */
++    PyTypeObject *api_simplewrapper_type;
++    PyTypeObject *api_wrapper_type;
++    PyTypeObject *api_wrappertype_type;
++    PyTypeObject *api_voidptr_type;
++
++    void (*api_bad_catcher_result)(PyObject *method);
++    void (*api_bad_length_for_slice)(SIP_SSIZE_T seqlen, SIP_SSIZE_T slicelen);
++    PyObject *(*api_build_result)(int *isErr, const char *fmt, ...);
++    PyObject *(*api_call_method)(int *isErr, PyObject *method, const char *fmt,
++            ...);
++    void (*api_call_procedure_method)(sip_gilstate_t, sipVirtErrorHandlerFunc,
++            sipSimpleWrapper *, PyObject *, const char *, ...);
++    PyObject *(*api_connect_rx)(PyObject *txObj, const char *sig,
++            PyObject *rxObj, const char *slot, int type);
++    SIP_SSIZE_T (*api_convert_from_sequence_index)(SIP_SSIZE_T idx,
++            SIP_SSIZE_T len);
++    int (*api_can_convert_to_type)(PyObject *pyObj, const sipTypeDef *td,
++            int flags);
++    void *(*api_convert_to_type)(PyObject *pyObj, const sipTypeDef *td,
++            PyObject *transferObj, int flags, int *statep, int *iserrp);
++    void *(*api_force_convert_to_type)(PyObject *pyObj, const sipTypeDef *td,
++            PyObject *transferObj, int flags, int *statep, int *iserrp);
++
++    /*
++     * The following are deprecated parts of the public API.
++     */
++    int (*api_can_convert_to_enum)(PyObject *pyObj, const sipTypeDef *td);
++
++    /*
++     * The following are part of the public API.
++     */
++    void (*api_release_type)(void *cpp, const sipTypeDef *td, int state);
++    PyObject *(*api_convert_from_type)(void *cpp, const sipTypeDef *td,
++            PyObject *transferObj);
++    PyObject *(*api_convert_from_new_type)(void *cpp, const sipTypeDef *td,
++            PyObject *transferObj);
++    PyObject *(*api_convert_from_enum)(int eval, const sipTypeDef *td);
++    int (*api_get_state)(PyObject *transferObj);
++    PyObject *(*api_disconnect_rx)(PyObject *txObj, const char *sig,
++            PyObject *rxObj, const char *slot);
++    void (*api_free)(void *mem);
++    PyObject *(*api_get_pyobject)(void *cppPtr, const sipTypeDef *td);
++    void *(*api_malloc)(size_t nbytes);
++    int (*api_parse_result)(int *isErr, PyObject *method, PyObject *res,
++            const char *fmt, ...);
++    void (*api_trace)(unsigned mask, const char *fmt, ...);
++    void (*api_transfer_back)(PyObject *self);
++    void (*api_transfer_to)(PyObject *self, PyObject *owner);
++    void (*api_transfer_break)(PyObject *self);
++    unsigned long (*api_long_as_unsigned_long)(PyObject *o);
++    PyObject *(*api_convert_from_void_ptr)(void *val);
++    PyObject *(*api_convert_from_const_void_ptr)(const void *val);
++    PyObject *(*api_convert_from_void_ptr_and_size)(void *val,
++            SIP_SSIZE_T size);
++    PyObject *(*api_convert_from_const_void_ptr_and_size)(const void *val,
++            SIP_SSIZE_T size);
++    void *(*api_convert_to_void_ptr)(PyObject *obj);
++    int (*api_export_symbol)(const char *name, void *sym);
++    void *(*api_import_symbol)(const char *name);
++    const sipTypeDef *(*api_find_type)(const char *type);
++    int (*api_register_py_type)(PyTypeObject *type);
++    const sipTypeDef *(*api_type_from_py_type_object)(PyTypeObject *py_type);
++    const sipTypeDef *(*api_type_scope)(const sipTypeDef *td);
++    const char *(*api_resolve_typedef)(const char *name);
++    int (*api_register_attribute_getter)(const sipTypeDef *td,
++            sipAttrGetterFunc getter);
++    int (*api_is_api_enabled)(const char *name, int from, int to);
++    sipErrorState (*api_bad_callable_arg)(int arg_nr, PyObject *arg);
++    void *(*api_get_address)(struct _sipSimpleWrapper *w);
++    void (*api_set_destroy_on_exit)(int);
++    int (*api_enable_autoconversion)(const sipTypeDef *td, int enable);
++    void *(*api_get_mixin_address)(struct _sipSimpleWrapper *w,
++            const sipTypeDef *td);
++    PyObject *(*api_convert_from_new_pytype)(void *cpp, PyTypeObject *py_type,
++            sipWrapper *owner, sipSimpleWrapper **selfp, const char *fmt, ...);
++    PyObject *(*api_convert_to_typed_array)(void *data, const sipTypeDef *td,
++            const char *format, size_t stride, SIP_SSIZE_T len, int flags);
++    PyObject *(*api_convert_to_array)(void *data, const char *format,
++            SIP_SSIZE_T len, int flags);
++    int (*api_register_proxy_resolver)(const sipTypeDef *td,
++            sipProxyResolverFunc resolver);
++    PyInterpreterState *(*api_get_interpreter)();
++    sipNewUserTypeFunc (*api_set_new_user_type_handler)(const sipTypeDef *,
++            sipNewUserTypeFunc);
++    void (*api_set_type_user_data)(sipWrapperType *, void *);
++    void *(*api_get_type_user_data)(const sipWrapperType *);
++    PyObject *(*api_py_type_dict)(const PyTypeObject *);
++    const char *(*api_py_type_name)(const PyTypeObject *);
++    int (*api_get_method)(PyObject *, sipMethodDef *);
++    PyObject *(*api_from_method)(const sipMethodDef *);
++    int (*api_get_c_function)(PyObject *, sipCFunctionDef *);
++    int (*api_get_date)(PyObject *, sipDateDef *);
++    PyObject *(*api_from_date)(const sipDateDef *);
++    int (*api_get_datetime)(PyObject *, sipDateDef *, sipTimeDef *);
++    PyObject *(*api_from_datetime)(const sipDateDef *, const sipTimeDef *);
++    int (*api_get_time)(PyObject *, sipTimeDef *);
++    PyObject *(*api_from_time)(const sipTimeDef *);
++    int (*api_is_user_type)(const sipWrapperType *);
++    struct _frame *(*api_get_frame)(int);
++    int (*api_check_plugin_for_type)(const sipTypeDef *, const char *);
++    PyObject *(*api_unicode_new)(SIP_SSIZE_T, unsigned, int *, void **);
++    void (*api_unicode_write)(int, void *, int, unsigned);
++    void *(*api_unicode_data)(PyObject *, int *, SIP_SSIZE_T *);
++    int (*api_get_buffer_info)(PyObject *, sipBufferInfoDef *);
++    void (*api_release_buffer_info)(sipBufferInfoDef *);
++    PyObject *(*api_get_user_object)(const sipSimpleWrapper *);
++    void (*api_set_user_object)(sipSimpleWrapper *, PyObject *);
++
++    /*
++     * The following are not part of the public API.
++     */
++    int (*api_init_module)(sipExportedModuleDef *client, PyObject *mod_dict);
++    int (*api_parse_args)(PyObject **parseErrp, PyObject *sipArgs,
++            const char *fmt, ...);
++    int (*api_parse_pair)(PyObject **parseErrp, PyObject *arg0, PyObject *arg1,
++            const char *fmt, ...);
++
++    /*
++     * The following are part of the public API.
++     */
++    void (*api_instance_destroyed)(sipSimpleWrapper *sipSelf);
++
++    /*
++     * The following are not part of the public API.
++     */
++    void (*api_no_function)(PyObject *parseErr, const char *func,
++            const char *doc);
++    void (*api_no_method)(PyObject *parseErr, const char *scope,
++            const char *method, const char *doc);
++    void (*api_abstract_method)(const char *classname, const char *method);
++    void (*api_bad_class)(const char *classname);
++    void *(*api_get_cpp_ptr)(sipSimpleWrapper *w, const sipTypeDef *td);
++    void *(*api_get_complex_cpp_ptr)(sipSimpleWrapper *w);
++    PyObject *(*api_is_py_method)(sip_gilstate_t *gil, char *pymc,
++            sipSimpleWrapper *sipSelf, const char *cname, const char *mname);
++    void (*api_call_hook)(const char *hookname);
++    void (*api_end_thread)(void);
++    void (*api_raise_unknown_exception)(void);
++    void (*api_raise_type_exception)(const sipTypeDef *td, void *ptr);
++    int (*api_add_type_instance)(PyObject *dict, const char *name,
++            void *cppPtr, const sipTypeDef *td);
++    void (*api_bad_operator_arg)(PyObject *self, PyObject *arg,
++            sipPySlotType st);
++    PyObject *(*api_pyslot_extend)(sipExportedModuleDef *mod, sipPySlotType st,
++            const sipTypeDef *type, PyObject *arg0, PyObject *arg1);
++    void (*api_add_delayed_dtor)(sipSimpleWrapper *w);
++    char (*api_bytes_as_char)(PyObject *obj);
++    const char *(*api_bytes_as_string)(PyObject *obj);
++    char (*api_string_as_ascii_char)(PyObject *obj);
++    const char *(*api_string_as_ascii_string)(PyObject **obj);
++    char (*api_string_as_latin1_char)(PyObject *obj);
++    const char *(*api_string_as_latin1_string)(PyObject **obj);
++    char (*api_string_as_utf8_char)(PyObject *obj);
++    const char *(*api_string_as_utf8_string)(PyObject **obj);
++#if defined(HAVE_WCHAR_H)
++    wchar_t (*api_unicode_as_wchar)(PyObject *obj);
++    wchar_t *(*api_unicode_as_wstring)(PyObject *obj);
++#else
++    int (*api_unicode_as_wchar)(PyObject *obj);
++    int *(*api_unicode_as_wstring)(PyObject *obj);
++#endif
++    int (*api_deprecated)(const char *classname, const char *method);
++    void (*api_keep_reference)(PyObject *self, int key, PyObject *obj);
++    int (*api_parse_kwd_args)(PyObject **parseErrp, PyObject *sipArgs,
++            PyObject *sipKwdArgs, const char **kwdlist, PyObject **unused,
++            const char *fmt, ...);
++    void (*api_add_exception)(sipErrorState es, PyObject **parseErrp);
++    int (*api_parse_result_ex)(sip_gilstate_t, sipVirtErrorHandlerFunc,
++            sipSimpleWrapper *, PyObject *method, PyObject *res,
++            const char *fmt, ...);
++    void (*api_call_error_handler)(sipVirtErrorHandlerFunc,
++            sipSimpleWrapper *, sip_gilstate_t);
++    int (*api_init_mixin)(PyObject *self, PyObject *args, PyObject *kwds,
++            const sipClassTypeDef *ctd);
++    PyObject *(*api_get_reference)(PyObject *self, int key);
++    int (*api_is_owned_by_python)(sipSimpleWrapper *);
++    int (*api_is_derived_class)(sipSimpleWrapper *);
++
++    /*
++     * The following may be used by Qt support code but no other handwritten
++     * code.
++     */
++    void (*api_free_sipslot)(sipSlot *slot);
++    int (*api_same_slot)(const sipSlot *sp, PyObject *rxObj, const char *slot);
++    void *(*api_convert_rx)(sipWrapper *txSelf, const char *sigargs,
++            PyObject *rxObj, const char *slot, const char **memberp,
++            int flags);
++    PyObject *(*api_invoke_slot)(const sipSlot *slot, PyObject *sigargs);
++    PyObject *(*api_invoke_slot_ex)(const sipSlot *slot, PyObject *sigargs,
++            int check_receiver);
++    int (*api_save_slot)(sipSlot *sp, PyObject *rxObj, const char *slot);
++    void (*api_clear_any_slot_reference)(sipSlot *slot);
++    int (*api_visit_slot)(sipSlot *slot, visitproc visit, void *arg);
++
++    /*
++     * The following are deprecated parts of the public API.
++     */
++    PyTypeObject *(*api_find_named_enum)(const char *type);
++    const sipMappedType *(*api_find_mapped_type)(const char *type);
++    sipWrapperType *(*api_find_class)(const char *type);
++    sipWrapperType *(*api_map_int_to_class)(int typeInt,
++            const sipIntTypeClassMap *map, int maplen);
++    sipWrapperType *(*api_map_string_to_class)(const char *typeString,
++            const sipStringTypeClassMap *map, int maplen);
++
++    /*
++     * The following are part of the public API.
++     */
++    int (*api_enable_gc)(int enable);
++    void (*api_print_object)(PyObject *o);
++    int (*api_register_event_handler)(sipEventType type, const sipTypeDef *td,
++            void *handler);
++    int (*api_convert_to_enum)(PyObject *obj, const sipTypeDef *td);
++    int (*api_convert_to_bool)(PyObject *obj);
++    int (*api_enable_overflow_checking)(int enable);
++    char (*api_long_as_char)(PyObject *o);
++    signed char (*api_long_as_signed_char)(PyObject *o);
++    unsigned char (*api_long_as_unsigned_char)(PyObject *o);
++    short (*api_long_as_short)(PyObject *o);
++    unsigned short (*api_long_as_unsigned_short)(PyObject *o);
++    int (*api_long_as_int)(PyObject *o);
++    unsigned int (*api_long_as_unsigned_int)(PyObject *o);
++    long (*api_long_as_long)(PyObject *o);
++#if defined(HAVE_LONG_LONG)
++    PY_LONG_LONG (*api_long_as_long_long)(PyObject *o);
++    unsigned PY_LONG_LONG (*api_long_as_unsigned_long_long)(PyObject *o);
++#else
++    void *api_long_as_long_long;
++    void *api_long_as_unsigned_long_long;
++#endif
++
++    /*
++     * The following are not part of the public API.
++     */
++    void (*api_instance_destroyed_ex)(sipSimpleWrapper **sipSelfp);
++
++    /*
++     * The following are part of the public API.
++     */
++    int (*api_convert_from_slice_object)(PyObject *slice, SIP_SSIZE_T length,
++            SIP_SSIZE_T *start, SIP_SSIZE_T *stop, SIP_SSIZE_T *step,
++            SIP_SSIZE_T *slicelength);
++} sipAPIDef;
++
++
++/*
++ * The API implementing the optional Qt support.
++ */
++typedef struct _sipQtAPI {
++    sipTypeDef **qt_qobject;
++    void *(*qt_create_universal_signal)(void *, const char **);
++    void *(*qt_find_universal_signal)(void *, const char **);
++    void *(*qt_create_universal_slot)(struct _sipWrapper *, const char *,
++            PyObject *, const char *, const char **, int);
++    void (*qt_destroy_universal_slot)(void *);
++    void *(*qt_find_slot)(void *, const char *, PyObject *, const char *,
++            const char **);
++    int (*qt_connect)(void *, const char *, void *, const char *, int);
++    int (*qt_disconnect)(void *, const char *, void *, const char *);
++    int (*qt_same_name)(const char *, const char *);
++    sipSlot *(*qt_find_sipslot)(void *, void **);
++    int (*qt_emit_signal)(PyObject *, const char *, PyObject *);
++    int (*qt_connect_py_signal)(PyObject *, const char *, PyObject *,
++            const char *);
++    void (*qt_disconnect_py_signal)(PyObject *, const char *, PyObject *,
++            const char *);
++} sipQtAPI;
++
++
++/*
++ * These are flags that can be passed to sipCanConvertToType(),
++ * sipConvertToType() and sipForceConvertToType().
++ */
++#define SIP_NOT_NONE        0x01    /* Disallow None. */
++#define SIP_NO_CONVERTORS   0x02    /* Disable any type convertors. */
++
++
++/*
++ * These are flags that can be passed to sipConvertToArray().  These are held
++ * in sw_flags.
++ */
++#define SIP_READ_ONLY       0x01    /* The array is read-only. */
++#define SIP_OWNS_MEMORY     0x02    /* The array owns its memory. */
++
++
++/*
++ * These are the state flags returned by %ConvertToTypeCode.  Note that the
++ * values share the same "flagspace" as the contents of sw_flags.
++ */
++#define SIP_TEMPORARY       0x01    /* A temporary instance. */
++#define SIP_DERIVED_CLASS   0x02    /* The instance is derived. */
++
++
++/*
++ * These flags are specific to the Qt support API.
++ */
++#define SIP_SINGLE_SHOT     0x01    /* The connection is single shot. */
++
++
++/*
++ * Useful macros, not part of the public API.
++ */
++
++/* These are held in sw_flags. */
++#define SIP_INDIRECT        0x0004  /* If there is a level of indirection. */
++#define SIP_ACCFUNC         0x0008  /* If there is an access function. */
++#define SIP_NOT_IN_MAP      0x0010  /* If Python object is not in the map. */
++
++#if !defined(Py_LIMITED_API) || PY_VERSION_HEX < 0x03020000
++#define SIP_PY_OWNED        0x0020  /* If owned by Python. */
++#define SIP_SHARE_MAP       0x0040  /* If the map slot might be occupied. */
++#define SIP_CPP_HAS_REF     0x0080  /* If C/C++ has a reference. */
++#define SIP_POSSIBLE_PROXY  0x0100  /* If there might be a proxy slot. */
++#define SIP_ALIAS           0x0200  /* If it is an alias. */
++#define SIP_CREATED         0x0400  /* If the C/C++ object has been created. */
++
++#define sipIsDerived(sw)    ((sw)->sw_flags & SIP_DERIVED_CLASS)
++#define sipIsIndirect(sw)   ((sw)->sw_flags & SIP_INDIRECT)
++#define sipIsAccessFunc(sw) ((sw)->sw_flags & SIP_ACCFUNC)
++#define sipNotInMap(sw)     ((sw)->sw_flags & SIP_NOT_IN_MAP)
++#define sipSetNotInMap(sw)  ((sw)->sw_flags |= SIP_NOT_IN_MAP)
++#define sipIsPyOwned(sw)    ((sw)->sw_flags & SIP_PY_OWNED)
++#define sipSetPyOwned(sw)   ((sw)->sw_flags |= SIP_PY_OWNED)
++#define sipResetPyOwned(sw) ((sw)->sw_flags &= ~SIP_PY_OWNED)
++#define sipCppHasRef(sw)    ((sw)->sw_flags & SIP_CPP_HAS_REF)
++#define sipSetCppHasRef(sw) ((sw)->sw_flags |= SIP_CPP_HAS_REF)
++#define sipResetCppHasRef(sw)   ((sw)->sw_flags &= ~SIP_CPP_HAS_REF)
++#define sipPossibleProxy(sw)    ((sw)->sw_flags & SIP_POSSIBLE_PROXY)
++#define sipSetPossibleProxy(sw) ((sw)->sw_flags |= SIP_POSSIBLE_PROXY)
++#define sipIsAlias(sw)      ((sw)->sw_flags & SIP_ALIAS)
++#define sipWasCreated(sw)   ((sw)->sw_flags & SIP_CREATED)
++#endif
++
++#define SIP_TYPE_TYPE_MASK  0x0007  /* The type type mask. */
++#define SIP_TYPE_CLASS      0x0000  /* If the type is a C++ class. */
++#define SIP_TYPE_NAMESPACE  0x0001  /* If the type is a C++ namespace. */
++#define SIP_TYPE_MAPPED     0x0002  /* If the type is a mapped type. */
++#define SIP_TYPE_ENUM       0x0003  /* If the type is a named enum. */
++#define SIP_TYPE_SCOPED_ENUM    0x0004  /* If the type is a scoped enum. */
++#define SIP_TYPE_ABSTRACT   0x0008  /* If the type is abstract. */
++#define SIP_TYPE_SCC        0x0010  /* If the type is subject to sub-class convertors. */
++#define SIP_TYPE_ALLOW_NONE 0x0020  /* If the type can handle None. */
++#define SIP_TYPE_STUB       0x0040  /* If the type is a stub. */
++#define SIP_TYPE_NONLAZY    0x0080  /* If the type has a non-lazy method. */
++#define SIP_TYPE_SUPER_INIT 0x0100  /* If the instance's super init should be called. */
++#define SIP_TYPE_LIMITED_API    0x0200  /* Use the limited API.  If this is more generally required it may need to be moved to the module definition. */
++
++
++/*
++ * The following are part of the public API.
++ */
++#define sipTypeIsClass(td)  (((td)->td_flags & SIP_TYPE_TYPE_MASK) == SIP_TYPE_CLASS)
++#define sipTypeIsNamespace(td)  (((td)->td_flags & SIP_TYPE_TYPE_MASK) == SIP_TYPE_NAMESPACE)
++#define sipTypeIsMapped(td) (((td)->td_flags & SIP_TYPE_TYPE_MASK) == SIP_TYPE_MAPPED)
++#define sipTypeIsEnum(td)   (((td)->td_flags & SIP_TYPE_TYPE_MASK) == SIP_TYPE_ENUM)
++#define sipTypeIsScopedEnum(td) (((td)->td_flags & SIP_TYPE_TYPE_MASK) == SIP_TYPE_SCOPED_ENUM)
++#define sipTypeAsPyTypeObject(td)   ((td)->u.td_py_type)
++#define sipTypeName(td)     sipNameFromPool((td)->td_module, (td)->td_cname)
++#define sipTypePluginData(td)   ((td)->td_plugin_data)
++
++
++/*
++ * Note that this was never actually documented as being part of the public
++ * API.  It is now deprecated.  sipIsUserType() should be used instead.
++ */
++#define sipIsExactWrappedType(wt)   (sipTypeAsPyTypeObject((wt)->wt_td) == (PyTypeObject *)(wt))
++
++
++/*
++ * The following are deprecated parts of the public API.
++ */
++#define sipClassName(w)     PyString_FromString(Py_TYPE(w)->tp_name)
++
++
++/*
++ * The following are not part of the public API.
++ */
++#define sipTypeIsAbstract(td)   ((td)->td_flags & SIP_TYPE_ABSTRACT)
++#define sipTypeHasSCC(td)   ((td)->td_flags & SIP_TYPE_SCC)
++#define sipTypeAllowNone(td)    ((td)->td_flags & SIP_TYPE_ALLOW_NONE)
++#define sipTypeIsStub(td)   ((td)->td_flags & SIP_TYPE_STUB)
++#define sipTypeSetStub(td)  ((td)->td_flags |= SIP_TYPE_STUB)
++#define sipTypeHasNonlazyMethod(td) ((td)->td_flags & SIP_TYPE_NONLAZY)
++#define sipTypeCallSuperInit(td)    ((td)->td_flags & SIP_TYPE_SUPER_INIT)
++#define sipTypeUseLimitedAPI(td)    ((td)->td_flags & SIP_TYPE_LIMITED_API)
++
++/*
++ * Get various names from the string pool for various data types.
++ */
++#define sipNameFromPool(em, mr) (&((em)->em_strings)[(mr)])
++#define sipNameOfModule(em)     sipNameFromPool((em), (em)->em_name)
++#define sipPyNameOfContainer(cod, td)   sipNameFromPool((td)->td_module, (cod)->cod_name)
++#define sipPyNameOfEnum(etd)    sipNameFromPool((etd)->etd_base.td_module, (etd)->etd_name)
++
++
++/*
++ * The following are PyQt4-specific extensions.  In SIP v5 they will be pushed
++ * out to a plugin supplied by PyQt4.
++ */
++
++/*
++ * The description of a Qt signal for PyQt4.
++ */
++typedef struct _pyqt4QtSignal {
++    /* The C++ name and signature of the signal. */
++    const char *signature;
++
++    /* The optional docstring. */
++    const char *docstring;
++
++    /*
++     * If the signal is an overload of regular methods then this points to the
++     * code that implements those methods.
++     */
++    PyMethodDef *non_signals;
++
++    /*
++     * The hack to apply when built against Qt5:
++     *
++     * 0 - no hack
++     * 1 - add an optional None
++     * 2 - add an optional []
++     * 3 - add an optional False
++     */
++    int hack;
++} pyqt4QtSignal;
++
++
++/*
++ * This is the PyQt4-specific extension to the generated class type structure.
++ */
++typedef struct _pyqt4ClassPluginDef {
++    /* A pointer to the QObject sub-class's staticMetaObject class variable. */
++    const void *static_metaobject;
++
++    /*
++     * A set of flags.  At the moment only bit 0 is used to say if the type is
++     * derived from QFlags.
++     */
++    unsigned flags;
++
++    /*
++     * The table of signals emitted by the type.  These are grouped by signal
++     * name.
++     */
++    const pyqt4QtSignal *qt_signals;
++} pyqt4ClassPluginDef;
++
++
++/*
++ * The following are PyQt5-specific extensions.  In SIP v5 they will be pushed
++ * out to a plugin supplied by PyQt5.
++ */
++
++/*
++ * The description of a Qt signal for PyQt5.
++ */
++typedef int (*pyqt5EmitFunc)(void *, PyObject *);
++
++typedef struct _pyqt5QtSignal {
++    /* The normalised C++ name and signature of the signal. */
++    const char *signature;
++
++    /* The optional docstring. */
++    const char *docstring;
++
++    /*
++     * If the signal is an overload of regular methods then this points to the
++     * code that implements those methods.
++     */
++    PyMethodDef *non_signals;
++
++    /*
++     * If the signal has optional arguments then this function will implement
++     * emit() for the signal.
++     */
++    pyqt5EmitFunc emitter;
++} pyqt5QtSignal;
++
++
++/*
++ * This is the PyQt5-specific extension to the generated class type structure.
++ */
++typedef struct _pyqt5ClassPluginDef {
++    /* A pointer to the QObject sub-class's staticMetaObject class variable. */
++    const void *static_metaobject;
++
++    /*
++     * A set of flags.  At the moment only bit 0 is used to say if the type is
++     * derived from QFlags.
++     */
++    unsigned flags;
++
++    /*
++     * The table of signals emitted by the type.  These are grouped by signal
++     * name.
++     */
++    const pyqt5QtSignal *qt_signals;
++
++    /* The name of the interface that the class defines. */
++    const char *qt_interface;
++} pyqt5ClassPluginDef;
++
++
++#ifdef __cplusplus
++}
++#endif
++
++
++#endif
+diff -Nurd '--exclude=doc' '--exclude=.hg*' ./sip-4.19.12.orig/siplib/siplib.c sip/siplib/siplib.c
+--- ./sip-4.19.12.orig/siplib/siplib.c	2018-07-05 05:54:58.000000000 -0400
++++ sip/siplib/siplib.c	2018-09-18 18:00:57.928047976 -0400
+@@ -39,13 +39,22 @@
+ 
+ 
+ /*
+- * The qualified name of the sip module.  The qualified name should be defined
+- * in the compiler invocation when creating a package-specific copy.
++ * The qualified and base names of the sip module.  These should be defined in
++ * the compiler invocation when creating a package-specific copy.
+  */
+ #if !defined(SIP_MODULE_NAME)
+-#define SIP_MODULE_NAME     "sip"
++#define SIP_MODULE_NAME     sip
++#endif
++
++#if !defined(SIP_MODULE_BASENAME)
++#define SIP_MODULE_BASENAME sip
+ #endif
+ 
++#define STRINGIFY_EX(s)     #s
++#define STRINGIFY(s)        STRINGIFY_EX(s)
++
++#define SIP_MODULE_NAME_STR     STRINGIFY(SIP_MODULE_NAME)
++#define SIP_MODULE_BASENAME_STR STRINGIFY(SIP_MODULE_BASENAME)
+ 
+ /*
+  * The Python metatype for a C++ wrapper type.  We inherit everything from the
+@@ -1023,19 +1032,24 @@
+  * The Python module initialisation function.
+  */
+ #if PY_MAJOR_VERSION >= 3
+-#define SIP_MODULE_ENTRY        PyInit_sip
++#define SIP_MODULE_ENTRY_PREFIX PyInit_
+ #define SIP_MODULE_TYPE         PyObject *
+ #define SIP_MODULE_DISCARD(m)   Py_DECREF(m)
+ #define SIP_FATAL(s)            return NULL
+ #define SIP_MODULE_RETURN(m)    return (m)
+ #else
+-#define SIP_MODULE_ENTRY        initsip
++#define SIP_MODULE_ENTRY_PREFIX init
+ #define SIP_MODULE_TYPE         void
+ #define SIP_MODULE_DISCARD(m)
+ #define SIP_FATAL(s)            Py_FatalError(s)
+ #define SIP_MODULE_RETURN(m)
+ #endif
+ 
++#define CONCAT_EX(PREFIX, NAME) PREFIX ## NAME
++#define CONCAT(PREFIX, NAME)    CONCAT_EX(PREFIX, NAME)
++
++#define SIP_MODULE_ENTRY        CONCAT(SIP_MODULE_ENTRY_PREFIX, SIP_MODULE_BASENAME)
++
+ #if defined(SIP_STATIC_MODULE)
+ SIP_MODULE_TYPE SIP_MODULE_ENTRY(void)
+ #else
+@@ -1069,7 +1083,7 @@
+ #if PY_MAJOR_VERSION >= 3
+     static PyModuleDef module_def = {
+         PyModuleDef_HEAD_INIT,
+-        SIP_MODULE_NAME,        /* m_name */
++        SIP_MODULE_NAME_STR,    /* m_name */
+         NULL,                   /* m_doc */
+         -1,                     /* m_size */
+         methods,                /* m_methods */
+@@ -1099,13 +1113,13 @@
+     sipWrapperType_Type.tp_base = &PyType_Type;
+ 
+     if (PyType_Ready(&sipWrapperType_Type) < 0)
+-        SIP_FATAL(SIP_MODULE_NAME ": Failed to initialise sip.wrappertype type");
++        SIP_FATAL(SIP_MODULE_NAME_STR ": Failed to initialise sip.wrappertype type");
+ 
+     if (PyType_Ready((PyTypeObject *)&sipSimpleWrapper_Type) < 0)
+-        SIP_FATAL(SIP_MODULE_NAME ": Failed to initialise sip.simplewrapper type");
++        SIP_FATAL(SIP_MODULE_NAME_STR ": Failed to initialise sip.simplewrapper type");
+ 
+     if (sip_api_register_py_type((PyTypeObject *)&sipSimpleWrapper_Type) < 0)
+-        SIP_FATAL(SIP_MODULE_NAME ": Failed to register sip.simplewrapper type");
++        SIP_FATAL(SIP_MODULE_NAME_STR ": Failed to register sip.simplewrapper type");
+ 
+ #if defined(STACKLESS)
+     sipWrapper_Type.super.tp_base = (PyTypeObject *)&sipSimpleWrapper_Type;
+@@ -1116,33 +1130,33 @@
+ #endif
+ 
+     if (PyType_Ready((PyTypeObject *)&sipWrapper_Type) < 0)
+-        SIP_FATAL(SIP_MODULE_NAME ": Failed to initialise sip.wrapper type");
++        SIP_FATAL(SIP_MODULE_NAME_STR ": Failed to initialise sip.wrapper type");
+ 
+     if (PyType_Ready(&sipMethodDescr_Type) < 0)
+-        SIP_FATAL(SIP_MODULE_NAME ": Failed to initialise sip.methoddescriptor type");
++        SIP_FATAL(SIP_MODULE_NAME_STR ": Failed to initialise sip.methoddescriptor type");
+ 
+     if (PyType_Ready(&sipVariableDescr_Type) < 0)
+-        SIP_FATAL(SIP_MODULE_NAME ": Failed to initialise sip.variabledescriptor type");
++        SIP_FATAL(SIP_MODULE_NAME_STR ": Failed to initialise sip.variabledescriptor type");
+ 
+     sipEnumType_Type.tp_base = &PyType_Type;
+ 
+     if (PyType_Ready(&sipEnumType_Type) < 0)
+-        SIP_FATAL(SIP_MODULE_NAME ": Failed to initialise sip.enumtype type");
++        SIP_FATAL(SIP_MODULE_NAME_STR ": Failed to initialise sip.enumtype type");
+ 
+     if (PyType_Ready(&sipVoidPtr_Type) < 0)
+-        SIP_FATAL(SIP_MODULE_NAME ": Failed to initialise sip.voidptr type");
++        SIP_FATAL(SIP_MODULE_NAME_STR ": Failed to initialise sip.voidptr type");
+ 
+     if (PyType_Ready(&sipArray_Type) < 0)
+-        SIP_FATAL(SIP_MODULE_NAME ": Failed to initialise sip.array type");
++        SIP_FATAL(SIP_MODULE_NAME_STR ": Failed to initialise sip.array type");
+ 
+ #if PY_MAJOR_VERSION >= 3
+     mod = PyModule_Create(&module_def);
+ #else
+-    mod = Py_InitModule(SIP_MODULE_NAME, methods);
++    mod = Py_InitModule(SIP_MODULE_NAME_STR, methods);
+ #endif
+ 
+     if (mod == NULL)
+-        SIP_FATAL(SIP_MODULE_NAME ": Failed to initialise sip module");
++        SIP_FATAL(SIP_MODULE_NAME_STR ": Failed to initialise sip module");
+ 
+     mod_dict = PyModule_GetDict(mod);
+ 
+@@ -1153,12 +1167,12 @@
+     if (type_unpickler == NULL || enum_unpickler == NULL)
+     {
+         SIP_MODULE_DISCARD(mod);
+-        SIP_FATAL(SIP_MODULE_NAME ": Failed to get pickle helpers");
++        SIP_FATAL(SIP_MODULE_NAME_STR ": Failed to get pickle helpers");
+     }
+ 
+     /* Publish the SIP API. */
+ #if defined(SIP_USE_PYCAPSULE)
+-    obj = PyCapsule_New((void *)&sip_api, SIP_MODULE_NAME "._C_API", NULL);
++    obj = PyCapsule_New((void *)&sip_api, SIP_MODULE_NAME_STR "._C_API", NULL);
+ #else
+     obj = PyCObject_FromVoidPtr((void *)&sip_api, NULL);
+ #endif
+@@ -1166,7 +1180,7 @@
+     if (obj == NULL)
+     {
+         SIP_MODULE_DISCARD(mod);
+-        SIP_FATAL(SIP_MODULE_NAME ": Failed to create _C_API object");
++        SIP_FATAL(SIP_MODULE_NAME_STR ": Failed to create _C_API object");
+     }
+ 
+     rc = PyDict_SetItemString(mod_dict, "_C_API", obj);
+@@ -1175,20 +1189,20 @@
+     if (rc < 0)
+     {
+         SIP_MODULE_DISCARD(mod);
+-        SIP_FATAL(SIP_MODULE_NAME ": Failed to add _C_API object to module dictionary");
++        SIP_FATAL(SIP_MODULE_NAME_STR ": Failed to add _C_API object to module dictionary");
+     }
+ 
+     /* These will always be needed. */
+     if (objectify("__init__", &init_name) < 0)
+     {
+         SIP_MODULE_DISCARD(mod);
+-        SIP_FATAL(SIP_MODULE_NAME ": Failed to objectify '__init__'");
++        SIP_FATAL(SIP_MODULE_NAME_STR ": Failed to objectify '__init__'");
+     }
+ 
+     if ((empty_tuple = PyTuple_New(0)) == NULL)
+     {
+         SIP_MODULE_DISCARD(mod);
+-        SIP_FATAL(SIP_MODULE_NAME ": Failed to create empty tuple");
++        SIP_FATAL(SIP_MODULE_NAME_STR ": Failed to create empty tuple");
+     }
+ 
+     /* Add the SIP version number, but don't worry about errors. */
+@@ -1248,7 +1262,7 @@
+      * Also install the package-specific module at the top level for backwards
+      * compatibility.
+      */
+-    if (strcmp(SIP_MODULE_NAME, "sip") != 0)
++    if (strcmp(SIP_MODULE_NAME_STR, "sip") != 0 && strcmp(SIP_MODULE_BASENAME_STR, "sip") == 0)
+     {
+         PyObject *modules = PySys_GetObject("modules");
+ 
+diff -Nurd '--exclude=doc' '--exclude=.hg*' ./sip-4.19.12.orig/sphinx/command_line.rst sip/sphinx/command_line.rst
+--- ./sip-4.19.12.orig/sphinx/command_line.rst	2018-07-05 05:54:58.000000000 -0400
++++ sip/sphinx/command_line.rst	2018-09-18 18:00:57.928047976 -0400
+@@ -115,10 +115,9 @@
+ 
+     .. versionadded:: 4.19.9
+ 
+-    The qualified name of the private copy of the :mod:`sip` module.  It should
+-    be of the form ``package.sip``.  See also the
+-    :option:`--sip-module <configure.py --sip-module>` option of the
+-    installation script.
++    The fully qualified name of the private copy of the :mod:`sip` module.
++    See also the :option:`--sip-module <configure.py --sip-module>` option of
++    the installation script.
+ 
+ .. cmdoption:: -o
+ 
+diff -Nurd '--exclude=doc' '--exclude=.hg*' ./sip-4.19.12.orig/sphinx/conf.py sip/sphinx/conf.py
+--- ./sip-4.19.12.orig/sphinx/conf.py	2018-07-05 05:55:19.000000000 -0400
++++ sip/sphinx/conf.py	1969-12-31 19:00:00.000000000 -0500
+@@ -1,139 +0,0 @@
+-# -*- coding: utf-8 -*-
+-#
+-# SIP documentation build configuration file, created by
+-# sphinx-quickstart on Sat May 30 14:28:55 2009.
+-#
+-# This file is execfile()d with the current directory set to its containing dir.
+-#
+-# Note that not all possible configuration values are present in this
+-# autogenerated file.
+-#
+-# All configuration values have a default; values that are commented out
+-# serve to show the default.
+-
+-import datetime
+-import os
+-import sys
+-
+-# If extensions (or modules to document with autodoc) are in another directory,
+-# add these directories to sys.path here. If the directory is relative to the
+-# documentation root, use os.path.abspath to make it absolute, like shown here.
+-#sys.path.append(os.path.abspath('.'))
+-
+-# -- General configuration -----------------------------------------------------
+-
+-# Add any Sphinx extension module names here, as strings. They can be extensions
+-# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
+-#extensions = []
+-
+-# Add any paths that contain templates here, relative to this directory.
+-templates_path = ['templates']
+-
+-# The suffix of source filenames.
+-source_suffix = '.rst'
+-
+-# The encoding of source files.
+-#source_encoding = 'utf-8'
+-
+-# The master toctree document.
+-master_doc = 'index'
+-
+-# General information about the project.
+-project = 'SIP'
+-copyright = '{0} Riverbank Computing Limited'.format(
+-        datetime.date.today().year)
+-
+-# The version info for the project you're documenting, acts as replacement for
+-# |version| and |release|, also used in various other places throughout the
+-# built documents.
+-#
+-# The short X.Y version.
+-version = '4.19.12'
+-# The full version, including alpha/beta/rc tags.
+-release = '4.19.12'
+-
+-# The language for content autogenerated by Sphinx. Refer to documentation
+-# for a list of supported languages.
+-#language = None
+-
+-# There are two options for replacing |today|: either, you set today to some
+-# non-false value, then it is used:
+-#today = ''
+-# Else, today_fmt is used as the format for a strftime call.
+-#today_fmt = '%B %d, %Y'
+-
+-# List of patterns, relative to source directory, that match files and
+-# directories to ignore when looking for source files.
+-exclude_patterns = ['html']
+-
+-# The reST default role (used for this markup: `text`) to use for all documents.
+-#default_role = None
+-
+-# If true, '()' will be appended to :func: etc. cross-reference text.
+-#add_function_parentheses = True
+-
+-# If true, the current module name will be prepended to all description
+-# unit titles (such as .. function::).
+-#add_module_names = True
+-
+-# If true, sectionauthor and moduleauthor directives will be shown in the
+-# output. They are ignored by default.
+-#show_authors = False
+-
+-# The name of the Pygments (syntax highlighting) style to use.
+-pygments_style = 'sphinx'
+-
+-# A list of ignored prefixes for module index sorting.
+-#modindex_common_prefix = []
+-
+-
+-# -- Options for HTML output ---------------------------------------------------
+-
+-# The theme to use for HTML and HTML Help pages.
+-html_theme = 'riverbank'
+-
+-# Add any paths that contain custom themes here, relative to this directory.
+-html_theme_path = ['.']
+-
+-# The name for this set of Sphinx documents.  If None, it defaults to
+-# "<project> v<release> documentation".
+-html_title = "%s v%s Reference Guide" % (project, release)
+-
+-# Output file base name for HTML help builder.
+-htmlhelp_basename = 'SIPdoc'
+-
+-
+-# -- Project-specific extensions -----------------------------------------------
+-
+-def setup(app):
+-    """ Define roles specific to SIP. """
+-
+-    app.add_description_unit('argument-annotation', 'aanno',
+-            indextemplate='single: %s (argument annotation)')
+-
+-    app.add_description_unit('class-annotation', 'canno',
+-            indextemplate='single: %s (class annotation)')
+-
+-    app.add_description_unit('enum-annotation', 'eanno',
+-            indextemplate='single: %s (enum annotation)')
+-
+-    app.add_description_unit('exception-annotation', 'xanno',
+-            indextemplate='single: %s (exception annotation)')
+-
+-    app.add_description_unit('function-annotation', 'fanno',
+-            indextemplate='single: %s (function annotation)')
+-
+-    app.add_description_unit('mapped-type-annotation', 'manno',
+-            indextemplate='single: %s (mapped type annotation)')
+-
+-    app.add_description_unit('typedef-annotation', 'tanno',
+-            indextemplate='single: %s (typedef annotation)')
+-
+-    app.add_description_unit('variable-annotation', 'vanno',
+-            indextemplate='single: %s (variable annotation)')
+-
+-    app.add_description_unit('directive', 'directive',
+-            indextemplate='single: %s (directive)')
+-
+-    app.add_description_unit('sip-type', 'stype',
+-            indextemplate='single: %s (SIP type)')
+diff -Nurd '--exclude=doc' '--exclude=.hg*' ./sip-4.19.12.orig/sphinx/conf.py.in sip/sphinx/conf.py.in
+--- ./sip-4.19.12.orig/sphinx/conf.py.in	1969-12-31 19:00:00.000000000 -0500
++++ sip/sphinx/conf.py.in	2018-09-18 17:52:23.310543535 -0400
+@@ -0,0 +1,139 @@
++# -*- coding: utf-8 -*-
++#
++# SIP documentation build configuration file, created by
++# sphinx-quickstart on Sat May 30 14:28:55 2009.
++#
++# This file is execfile()d with the current directory set to its containing dir.
++#
++# Note that not all possible configuration values are present in this
++# autogenerated file.
++#
++# All configuration values have a default; values that are commented out
++# serve to show the default.
++
++import datetime
++import os
++import sys
++
++# If extensions (or modules to document with autodoc) are in another directory,
++# add these directories to sys.path here. If the directory is relative to the
++# documentation root, use os.path.abspath to make it absolute, like shown here.
++#sys.path.append(os.path.abspath('.'))
++
++# -- General configuration -----------------------------------------------------
++
++# Add any Sphinx extension module names here, as strings. They can be extensions
++# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
++#extensions = []
++
++# Add any paths that contain templates here, relative to this directory.
++templates_path = ['templates']
++
++# The suffix of source filenames.
++source_suffix = '.rst'
++
++# The encoding of source files.
++#source_encoding = 'utf-8'
++
++# The master toctree document.
++master_doc = 'index'
++
++# General information about the project.
++project = 'SIP'
++copyright = '{0} Riverbank Computing Limited'.format(
++        datetime.date.today().year)
++
++# The version info for the project you're documenting, acts as replacement for
++# |version| and |release|, also used in various other places throughout the
++# built documents.
++#
++# The short X.Y version.
++version = '@RM_VERSION@'
++# The full version, including alpha/beta/rc tags.
++release = '@RM_RELEASE@'
++
++# The language for content autogenerated by Sphinx. Refer to documentation
++# for a list of supported languages.
++#language = None
++
++# There are two options for replacing |today|: either, you set today to some
++# non-false value, then it is used:
++#today = ''
++# Else, today_fmt is used as the format for a strftime call.
++#today_fmt = '%B %d, %Y'
++
++# List of patterns, relative to source directory, that match files and
++# directories to ignore when looking for source files.
++exclude_patterns = ['html']
++
++# The reST default role (used for this markup: `text`) to use for all documents.
++#default_role = None
++
++# If true, '()' will be appended to :func: etc. cross-reference text.
++#add_function_parentheses = True
++
++# If true, the current module name will be prepended to all description
++# unit titles (such as .. function::).
++#add_module_names = True
++
++# If true, sectionauthor and moduleauthor directives will be shown in the
++# output. They are ignored by default.
++#show_authors = False
++
++# The name of the Pygments (syntax highlighting) style to use.
++pygments_style = 'sphinx'
++
++# A list of ignored prefixes for module index sorting.
++#modindex_common_prefix = []
++
++
++# -- Options for HTML output ---------------------------------------------------
++
++# The theme to use for HTML and HTML Help pages.
++html_theme = 'riverbank'
++
++# Add any paths that contain custom themes here, relative to this directory.
++html_theme_path = ['.']
++
++# The name for this set of Sphinx documents.  If None, it defaults to
++# "<project> v<release> documentation".
++html_title = "%s v%s Reference Guide" % (project, release)
++
++# Output file base name for HTML help builder.
++htmlhelp_basename = 'SIPdoc'
++
++
++# -- Project-specific extensions -----------------------------------------------
++
++def setup(app):
++    """ Define roles specific to SIP. """
++
++    app.add_description_unit('argument-annotation', 'aanno',
++            indextemplate='single: %s (argument annotation)')
++
++    app.add_description_unit('class-annotation', 'canno',
++            indextemplate='single: %s (class annotation)')
++
++    app.add_description_unit('enum-annotation', 'eanno',
++            indextemplate='single: %s (enum annotation)')
++
++    app.add_description_unit('exception-annotation', 'xanno',
++            indextemplate='single: %s (exception annotation)')
++
++    app.add_description_unit('function-annotation', 'fanno',
++            indextemplate='single: %s (function annotation)')
++
++    app.add_description_unit('mapped-type-annotation', 'manno',
++            indextemplate='single: %s (mapped type annotation)')
++
++    app.add_description_unit('typedef-annotation', 'tanno',
++            indextemplate='single: %s (typedef annotation)')
++
++    app.add_description_unit('variable-annotation', 'vanno',
++            indextemplate='single: %s (variable annotation)')
++
++    app.add_description_unit('directive', 'directive',
++            indextemplate='single: %s (directive)')
++
++    app.add_description_unit('sip-type', 'stype',
++            indextemplate='single: %s (SIP type)')
+diff -Nurd '--exclude=doc' '--exclude=.hg*' ./sip-4.19.12.orig/sphinx/installation.rst sip/sphinx/installation.rst
+--- ./sip-4.19.12.orig/sphinx/installation.rst	2018-07-05 05:54:58.000000000 -0400
++++ sip/sphinx/installation.rst	2018-09-18 18:00:57.928047976 -0400
+@@ -160,11 +160,10 @@
+ 
+ .. cmdoption:: --sip-module <NAME>
+ 
+-    The :mod:`sip` module will be created with the name ``<NAME>`` rather than
+-    the default ``sip``.  ``<NAME>`` should be of the form ``package.sip``.
+-    See :ref:`ref-private-sip` for how to use this to create a private copy of
+-    the :mod:`sip` module.  Also see the :option:`-n <sip -n>` option of the
+-    code generator.
++    The :mod:`sip` module will be created with the fully qualified name
++    ``<NAME>`` rather than the default ``sip``.  See :ref:`ref-private-sip` for
++    how to use this to create a private copy of the :mod:`sip` module.  Also
++    see the :option:`-n <sip -n>` option of the code generator.
+ 
+ .. cmdoption:: --sysroot <DIR>
+ 
+@@ -264,7 +263,7 @@
+ To get around this problem you can build a private copy of the :mod:`sip`
+ module that installed as part of your package.  To do this you use the
+ :option:`--sip-module <configure.py --sip-module>` option to specify the fully
+-qualified package name of your private copy.  You can also use the
++qualified name of your private copy.  You can also use the
+ :option:`--no-tools <configure.py --no-tools>` option to specify that nothing
+ else but the :mod:`sip` module is installed.
+ 
+diff -Nurd '--exclude=doc' '--exclude=.hg*' ./sip-4.19.12.orig/sphinx/introduction.rst sip/sphinx/introduction.rst
+--- ./sip-4.19.12.orig/sphinx/introduction.rst	2018-07-05 05:55:19.000000000 -0400
++++ sip/sphinx/introduction.rst	1969-12-31 19:00:00.000000000 -0500
+@@ -1,193 +0,0 @@
+-Introduction
+-============
+-
+-This is the reference guide for SIP 4.19.12.  SIP is a tool for
+-automatically generating `Python <https://www.python.org>`__ bindings for C and
+-C++ libraries.  SIP was originally developed in 1998 for
+-`PyQt <https://www.riverbankcomputing.com/software/pyqt>`__ - the Python
+-bindings for the Qt GUI toolkit - but is suitable for generating bindings for
+-any C or C++ library.
+-
+-This version of SIP generates bindings for Python v2.3 or later, including
+-Python v3.
+-
+-There are many other similar tools available.  One of the original such tools
+-is `SWIG <http://www.swig.org>`__ and, in fact, SIP is so called because it
+-started out as a small SWIG.  Unlike SWIG, SIP is specifically designed for
+-bringing together Python and C/C++ and goes to great lengths to make the
+-integration as tight as possible.
+-
+-The homepage for SIP is https://www.riverbankcomputing.com/software/sip.  Here
+-you will always find the latest stable version and the latest version of this
+-documentation.
+-
+-SIP can also be downloaded from the
+-`Mercurial <https://www.mercurial-scm.org>`__ repository at
+-https://www.riverbankcomputing.com/hg/sip.
+-
+-
+-License
+--------
+-
+-SIP is licensed under similar terms as Python itself.  SIP is also licensed
+-under the GPL (both v2 and v3).  It is your choice as to which license you
+-use.  If you choose the GPL then any bindings you create must be distributed
+-under the terms of the GPL.
+-
+-
+-Features
+---------
+-
+-SIP, and the bindings it produces, have the following features:
+-
+-- bindings are fast to load and minimise memory consumption especially when
+-  only a small sub-set of a large library is being used
+-
+-- automatic conversion between standard Python and C/C++ data types
+-
+-- overloading of functions and methods with different argument signatures
+-
+-- support for Python's keyword argument syntax
+-
+-- support for both explicitly specified and automatically generated docstrings
+-
+-- access to a C++ class's protected methods
+-
+-- the ability to define a Python class that is a sub-class of a C++ class,
+-  including abstract C++ classes
+-
+-- Python sub-classes can implement the :meth:`__dtor__` method which will be
+-  called from the C++ class's virtual destructor
+-
+-- support for ordinary C++ functions, class methods, static class methods,
+-  virtual class methods and abstract class methods
+-
+-- the ability to re-implement C++ virtual and abstract methods in Python
+-
+-- support for global and class variables
+-
+-- support for global and class operators
+-
+-- support for C++ namespaces
+-
+-- support for C++ templates
+-
+-- support for C++ exceptions and wrapping them as Python exceptions
+-
+-- the automatic generation of complementary rich comparison slots
+-
+-- support for deprecation warnings
+-
+-- the ability to define mappings between C++ classes and similar Python data
+-  types that are automatically invoked
+-
+-- the ability to automatically exploit any available run time type information
+-  to ensure that the class of a Python instance object matches the class of the
+-  corresponding C++ instance
+-
+-- the ability to change the type and meta-type of the Python object used to
+-  wrap a C/C++ data type
+-
+-- full support of the Python global interpreter lock, including the ability to
+-  specify that a C++ function of method may block, therefore allowing the lock
+-  to be released and other Python threads to run
+-
+-- support for consolidated modules where the generated wrapper code for a
+-  number of related modules may be included in a single, possibly private,
+-  module
+-
+-- support for the concept of ownership of a C++ instance (i.e. what part of the
+-  code is responsible for calling the instance's destructor) and how the
+-  ownership may change during the execution of an application
+-
+-- the ability to generate bindings for a C++ class library that itself is built
+-  on another C++ class library which also has had bindings generated so that
+-  the different bindings integrate and share code properly
+-
+-- a sophisticated versioning system that allows the full lifetime of a C++
+-  class library, including any platform specific or optional features, to be
+-  described in a single set of specification files 
+-
+-- support for the automatic generation of PEP 484 type hint stub files
+-
+-- the ability to include documentation in the specification files which can be
+-  extracted and subsequently processed by external tools
+-
+-- the ability to include copyright notices and licensing information in the
+-  specification files that is automatically included in all generated source
+-  code
+-
+-- a build system, written in Python, that you can extend to configure, compile
+-  and install your own bindings without worrying about platform specific issues
+-
+-- support for building your extensions using distutils
+-
+-- SIP, and the bindings it produces, runs under UNIX, Linux, Windows, MacOS/X,
+-  Android and iOS.
+-
+-
+-SIP Components
+---------------
+-
+-SIP comprises a number of different components.
+-
+-- The SIP code generator (:program:`sip`).  This processes :file:`.sip`
+-  specification files and generates C or C++ bindings.  It is covered in detail
+-  in :ref:`ref-using`.
+-
+-- The SIP header file (:file:`sip.h`).  This contains definitions and data
+-  structures needed by the generated C and C++ code.
+-
+-- The SIP module (:file:`sip.so` or :file:`sip.pyd`).  This is a Python
+-  extension module that is imported automatically by SIP generated bindings and
+-  provides them with some common utility functions.  Historically the module
+-  was installed in the Python installation's ``site-packages`` directory where
+-  it was imported by any extension module that needed it, for example
+-  :mod:`PyQt4` and :mod:`PyQt5`.  However this approach introduces dependencies
+-  between otherwise unrelated packages.  The preferred approach is for each
+-  package to include it's own private copy of the module that is installed in
+-  the root directory of the package as described in :ref:`ref-private-sip`.
+-  See also :ref:`ref-python-api`.
+-
+-- The SIP build system (:file:`sipconfig.py`).  This is a pure Python module
+-  that is created when SIP is configured and encapsulates all the necessary
+-  information about your system including relevant directory names, compiler
+-  and linker flags, and version numbers.  It also includes several Python
+-  classes and functions which help you write configuration scripts for your own
+-  bindings.  It is covered in detail in :ref:`ref-build-system`.
+-
+-- The SIP distutils extension (:file:`sipdistutils.py`).  This is a distutils
+-  extension that can be used to build your extension modules using distutils
+-  and is an alternative to writing configuration scripts with the SIP build
+-  system.  This can be as simple as adding your .sip files to the list of files
+-  needed to build the extension module.  It is covered in detail in
+-  :ref:`ref-distutils`.
+-
+-
+-Preparing for SIP v5
+---------------------
+-
+-The syntax of a SIP specification file will change in SIP v5.  The command line
+-options to the SIP code generator will also change.  In order to help users
+-manage the transition the following approach will be adopted.
+-
+-- Where possible, all incompatible changes will be first implemented in SIP v4.
+-
+-- When an incompatible change is implemented, the old syntax will be deprecated
+-  (with a warning message) but will be supported for the lifetime of v4.
+-
+-- The use of the :option:`--sip-module <configure.py --sip-module>` option to
+-  build a private copy of the SIP module will be compulsory.
+-
+-
+-Qt Support
+-----------
+-
+-SIP has specific support for the creation of bindings for the Qt application
+-toolkit from The Qt Company..
+-
+-The SIP code generator understands the signal/slot type safe callback mechanism
+-that Qt uses to connect objects together.  This allows applications to define
+-new Python signals, and allows any Python callable object to be used as a slot.
+-
+-SIP itself does not require Qt to be installed.
+diff -Nurd '--exclude=doc' '--exclude=.hg*' ./sip-4.19.12.orig/sphinx/introduction.rst.in sip/sphinx/introduction.rst.in
+--- ./sip-4.19.12.orig/sphinx/introduction.rst.in	1969-12-31 19:00:00.000000000 -0500
++++ sip/sphinx/introduction.rst.in	2018-09-18 17:52:23.312543505 -0400
+@@ -0,0 +1,193 @@
++Introduction
++============
++
++This is the reference guide for SIP @RM_RELEASE at .  SIP is a tool for
++automatically generating `Python <https://www.python.org>`__ bindings for C and
++C++ libraries.  SIP was originally developed in 1998 for
++`PyQt <https://www.riverbankcomputing.com/software/pyqt>`__ - the Python
++bindings for the Qt GUI toolkit - but is suitable for generating bindings for
++any C or C++ library.
++
++This version of SIP generates bindings for Python v2.3 or later, including
++Python v3.
++
++There are many other similar tools available.  One of the original such tools
++is `SWIG <http://www.swig.org>`__ and, in fact, SIP is so called because it
++started out as a small SWIG.  Unlike SWIG, SIP is specifically designed for
++bringing together Python and C/C++ and goes to great lengths to make the
++integration as tight as possible.
++
++The homepage for SIP is https://www.riverbankcomputing.com/software/sip.  Here
++you will always find the latest stable version and the latest version of this
++documentation.
++
++SIP can also be downloaded from the
++`Mercurial <https://www.mercurial-scm.org>`__ repository at
++https://www.riverbankcomputing.com/hg/sip.
++
++
++License
++-------
++
++SIP is licensed under similar terms as Python itself.  SIP is also licensed
++under the GPL (both v2 and v3).  It is your choice as to which license you
++use.  If you choose the GPL then any bindings you create must be distributed
++under the terms of the GPL.
++
++
++Features
++--------
++
++SIP, and the bindings it produces, have the following features:
++
++- bindings are fast to load and minimise memory consumption especially when
++  only a small sub-set of a large library is being used
++
++- automatic conversion between standard Python and C/C++ data types
++
++- overloading of functions and methods with different argument signatures
++
++- support for Python's keyword argument syntax
++
++- support for both explicitly specified and automatically generated docstrings
++
++- access to a C++ class's protected methods
++
++- the ability to define a Python class that is a sub-class of a C++ class,
++  including abstract C++ classes
++
++- Python sub-classes can implement the :meth:`__dtor__` method which will be
++  called from the C++ class's virtual destructor
++
++- support for ordinary C++ functions, class methods, static class methods,
++  virtual class methods and abstract class methods
++
++- the ability to re-implement C++ virtual and abstract methods in Python
++
++- support for global and class variables
++
++- support for global and class operators
++
++- support for C++ namespaces
++
++- support for C++ templates
++
++- support for C++ exceptions and wrapping them as Python exceptions
++
++- the automatic generation of complementary rich comparison slots
++
++- support for deprecation warnings
++
++- the ability to define mappings between C++ classes and similar Python data
++  types that are automatically invoked
++
++- the ability to automatically exploit any available run time type information
++  to ensure that the class of a Python instance object matches the class of the
++  corresponding C++ instance
++
++- the ability to change the type and meta-type of the Python object used to
++  wrap a C/C++ data type
++
++- full support of the Python global interpreter lock, including the ability to
++  specify that a C++ function of method may block, therefore allowing the lock
++  to be released and other Python threads to run
++
++- support for consolidated modules where the generated wrapper code for a
++  number of related modules may be included in a single, possibly private,
++  module
++
++- support for the concept of ownership of a C++ instance (i.e. what part of the
++  code is responsible for calling the instance's destructor) and how the
++  ownership may change during the execution of an application
++
++- the ability to generate bindings for a C++ class library that itself is built
++  on another C++ class library which also has had bindings generated so that
++  the different bindings integrate and share code properly
++
++- a sophisticated versioning system that allows the full lifetime of a C++
++  class library, including any platform specific or optional features, to be
++  described in a single set of specification files 
++
++- support for the automatic generation of PEP 484 type hint stub files
++
++- the ability to include documentation in the specification files which can be
++  extracted and subsequently processed by external tools
++
++- the ability to include copyright notices and licensing information in the
++  specification files that is automatically included in all generated source
++  code
++
++- a build system, written in Python, that you can extend to configure, compile
++  and install your own bindings without worrying about platform specific issues
++
++- support for building your extensions using distutils
++
++- SIP, and the bindings it produces, runs under UNIX, Linux, Windows, MacOS/X,
++  Android and iOS.
++
++
++SIP Components
++--------------
++
++SIP comprises a number of different components.
++
++- The SIP code generator (:program:`sip`).  This processes :file:`.sip`
++  specification files and generates C or C++ bindings.  It is covered in detail
++  in :ref:`ref-using`.
++
++- The SIP header file (:file:`sip.h`).  This contains definitions and data
++  structures needed by the generated C and C++ code.
++
++- The SIP module (:file:`sip.so` or :file:`sip.pyd`).  This is a Python
++  extension module that is imported automatically by SIP generated bindings and
++  provides them with some common utility functions.  Historically the module
++  was installed in the Python installation's ``site-packages`` directory where
++  it was imported by any extension module that needed it, for example
++  :mod:`PyQt4` and :mod:`PyQt5`.  However this approach introduces dependencies
++  between otherwise unrelated packages.  The preferred approach is for each
++  package to include it's own private copy of the module that is installed in
++  the root directory of the package as described in :ref:`ref-private-sip`.
++  See also :ref:`ref-python-api`.
++
++- The SIP build system (:file:`sipconfig.py`).  This is a pure Python module
++  that is created when SIP is configured and encapsulates all the necessary
++  information about your system including relevant directory names, compiler
++  and linker flags, and version numbers.  It also includes several Python
++  classes and functions which help you write configuration scripts for your own
++  bindings.  It is covered in detail in :ref:`ref-build-system`.
++
++- The SIP distutils extension (:file:`sipdistutils.py`).  This is a distutils
++  extension that can be used to build your extension modules using distutils
++  and is an alternative to writing configuration scripts with the SIP build
++  system.  This can be as simple as adding your .sip files to the list of files
++  needed to build the extension module.  It is covered in detail in
++  :ref:`ref-distutils`.
++
++
++Preparing for SIP v5
++--------------------
++
++The syntax of a SIP specification file will change in SIP v5.  The command line
++options to the SIP code generator will also change.  In order to help users
++manage the transition the following approach will be adopted.
++
++- Where possible, all incompatible changes will be first implemented in SIP v4.
++
++- When an incompatible change is implemented, the old syntax will be deprecated
++  (with a warning message) but will be supported for the lifetime of v4.
++
++- The use of the :option:`--sip-module <configure.py --sip-module>` option to
++  build a private copy of the SIP module will be compulsory.
++
++
++Qt Support
++----------
++
++SIP has specific support for the creation of bindings for the Qt application
++toolkit from The Qt Company..
++
++The SIP code generator understands the signal/slot type safe callback mechanism
++that Qt uses to connect objects together.  This allows applications to define
++new Python signals, and allows any Python callable object to be used as a slot.
++
++SIP itself does not require Qt to be installed.
+diff -Nurd '--exclude=doc' '--exclude=.hg*' ./sip-4.19.12.orig/test/int_convertors/mk.sh sip/test/int_convertors/mk.sh
+--- ./sip-4.19.12.orig/test/int_convertors/mk.sh	1969-12-31 19:00:00.000000000 -0500
++++ sip/test/int_convertors/mk.sh	2018-09-18 17:52:23.314543476 -0400
+@@ -0,0 +1,23 @@
++PYTHON=3.6
++PYTHON_ARCH="$PYTHON"m
++#PYTHON=2.7
++#PYTHON_ARCH=$PYTHON
++
++QT=5.9.2
++QT_SHORT=5.9.2
++
++PYROOT=/Library/Frameworks/Python.framework/Versions/$PYTHON
++
++QTROOT=$HOME/bob/Qt$QT/$QT_SHORT/clang_64
++
++# Run sip.
++$PYROOT/bin/sip -c . -j 1 test.sip
++#$PYROOT/bin/sip -c . -j 1 -t Qt_5_9_1 -t WS_MACX -I $PYROOT/share/sip/PyQt5 test.sip
++
++# Compile C++.
++c++ -c -pipe -fPIC -Os -w -I. -I$PYROOT/include/python"$PYTHON_ARCH" -o siptestpart0.o siptestpart0.cpp
++#c++ -c -pipe -fPIC -Os -w -std=gnu++11 -F$QTROOT/lib -I. -I$PYROOT/include/python"$PYTHON_ARCH" -I$QTROOT/lib/QtCore.framework/Headers -o siptestpart0.o siptestpart0.cpp
++
++# Link C++.
++c++ -headerpad_max_install_names -bundle -undefined dynamic_lookup -o test.so siptestpart0.o
++#c++ -headerpad_max_install_names -bundle -undefined dynamic_lookup -o test.so siptestpart0.o -F$QTROOT/lib -framework QtCore
+diff -Nurd '--exclude=doc' '--exclude=.hg*' ./sip-4.19.12.orig/test/int_convertors/run_test.py sip/test/int_convertors/run_test.py
+--- ./sip-4.19.12.orig/test/int_convertors/run_test.py	1969-12-31 19:00:00.000000000 -0500
++++ sip/test/int_convertors/run_test.py	2018-09-18 17:52:23.315543462 -0400
+@@ -0,0 +1,1845 @@
++import sys
++import unittest
++
++from sip import enableoverflowchecking
++
++from test import Test
++
++
++# The exception raised by a virtual re-implementation.
++_exc = None
++
++# The saved exception hook.
++_old_hook = None
++
++
++def _hook(xtype, xvalue, xtb):
++    """ The replacement exceptionhook. """
++
++    global _exc
++
++    # Save the exception for later.
++    _exc = xvalue
++
++
++def install_hook():
++    """ Install an exception hook that will remember exceptions raised by
++    virtual re-implementations.
++    """
++
++    global _exc, _old_hook
++
++    # Clear the saved exception.
++    _exc = None
++
++    # Save the old hook and install the new one.
++    _old_hook = sys.excepthook
++    sys.excepthook = _hook
++
++
++def uninstall_hook():
++    """ Restore the original exception hook and re-raise any exception raised
++    by a virtual re-implementation.
++    """
++
++    sys.excepthook = _old_hook
++
++    if _exc is not None:
++        raise _exc
++
++
++class InvalidFixture(Test):
++    """ A fixture for testing invalid values. """
++
++    def scoped_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return 10
++
++    def named_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return '0'
++
++    def bool_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return '0'
++
++    def char_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return '0'
++
++    def signed_char_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return '0'
++
++    def short_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return '0'
++
++    def int_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return '0'
++
++    def long_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return '0'
++
++    def long_long_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return '0'
++
++    def unsigned_char_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return '0'
++
++    def unsigned_short_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return '0'
++
++    def unsigned_int_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return '0'
++
++    def unsigned_long_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return '0'
++
++    def unsigned_long_long_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return '0'
++
++
++class ScopedEnumFixture(Test):
++    """ A fixture for testing scoped enum values. """
++
++    def scoped_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return Test.Scoped.scoped
++
++
++class NamedEnumFixture(Test):
++    """ A fixture for testing named enum values. """
++
++    def __init__(self, value):
++        """ Initialise the object. """
++
++        super().__init__()
++
++        self._value = value
++
++    def named_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self._value
++
++
++class BoolFixture(Test):
++    """ A fixture for testing valid boolean values. """
++
++    def __init__(self, value):
++        """ Initialise the object. """
++
++        super().__init__()
++
++        self._value = value
++
++    def bool_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self._value
++
++
++class LimitsFixture(Test):
++    """ The base test fixture for those implementing a range of values. """
++
++    def __init__(self, limits):
++        """ Initialise the object. """
++
++        super().__init__()
++
++        self.limits = limits
++
++
++class ValidLowerFixture(LimitsFixture):
++    """ A fixture for testing the lower bound of non-overflowing signed values.
++    """
++
++    def char_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self.limits.CHAR_LOWER
++
++    def signed_char_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self.limits.SIGNED_CHAR_LOWER
++
++    def short_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self.limits.SHORT_LOWER
++
++    def int_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self.limits.INT_LOWER
++
++    def long_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self.limits.LONG_LOWER
++
++    def long_long_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self.limits.LONG_LONG_LOWER
++
++
++class ValidUpperFixture(LimitsFixture):
++    """ A fixture for testing the upper bound of non-overflowing values.
++    """
++
++    def char_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self.limits.CHAR_UPPER
++
++    def signed_char_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self.limits.SIGNED_CHAR_UPPER
++
++    def short_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self.limits.SHORT_UPPER
++
++    def int_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self.limits.INT_UPPER
++
++    def long_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self.limits.LONG_UPPER
++
++    def long_long_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self.limits.LONG_LONG_UPPER
++
++    def unsigned_char_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self.limits.UNSIGNED_CHAR_UPPER
++
++    def unsigned_short_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self.limits.UNSIGNED_SHORT_UPPER
++
++    def unsigned_int_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self.limits.UNSIGNED_INT_UPPER
++
++    def unsigned_long_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self.limits.UNSIGNED_LONG_UPPER
++
++    def unsigned_long_long_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self.limits.UNSIGNED_LONG_LONG_UPPER
++
++
++class OverflowLowerFixture(LimitsFixture):
++    """ A fixture for testing the lower bound of overflowing signed values. """
++
++    def char_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self.limits.CHAR_LOWER - 1
++
++    def signed_char_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self.limits.SIGNED_CHAR_LOWER - 1
++
++    def short_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self.limits.SHORT_LOWER - 1
++
++    def int_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self.limits.INT_LOWER - 1
++
++    def long_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self.limits.LONG_LOWER - 1
++
++    def long_long_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self.limits.LONG_LONG_LOWER - 1
++
++
++class OverflowUpperFixture(LimitsFixture):
++    """ A fixture for testing the upper bound of overflowing values. """
++
++    def char_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self.limits.CHAR_UPPER + 1
++
++    def signed_char_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self.limits.SIGNED_CHAR_UPPER + 1
++
++    def short_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self.limits.SHORT_UPPER + 1
++
++    def int_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self.limits.INT_UPPER + 1
++
++    def long_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self.limits.LONG_UPPER + 1
++
++    def long_long_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self.limits.LONG_LONG_UPPER + 1
++
++    def unsigned_char_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self.limits.UNSIGNED_CHAR_UPPER + 1
++
++    def unsigned_short_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self.limits.UNSIGNED_SHORT_UPPER + 1
++
++    def unsigned_int_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self.limits.UNSIGNED_INT_UPPER + 1
++
++    def unsigned_long_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self.limits.UNSIGNED_LONG_UPPER + 1
++
++    def unsigned_long_long_virt(self):
++        """ Re-implemented to return the fixture-specific value. """
++
++        return self.limits.UNSIGNED_LONG_LONG_UPPER + 1
++
++
++class TestScopedEnumConvertors(unittest.TestCase):
++    """ This tests the scoped enum convertors with valid values. """
++
++    def setUp(self):
++        """ Set up a test. """
++
++        self.fixture = ScopedEnumFixture()
++
++    def tearDown(self):
++        """ Tidy up after a test. """
++
++        del self.fixture
++
++    def test_scoped_get_member(self):
++        """ scoped enum virtual result with a member value. """
++
++        self.assertIs(self.fixture.scoped_get(), Test.Scoped.scoped)
++
++    def test_scoped_set_member(self):
++        """ scoped enum function argument with a member value. """
++
++        self.fixture.scoped_set(Test.Scoped.scoped)
++
++    def test_scoped_var_member(self):
++        """ scoped enum instance variable with a member value. """
++
++        self.fixture.scoped_var = Test.Scoped.scoped
++
++
++class TestNamedEnumConvertors(unittest.TestCase):
++    """ This tests the named enum convertors with valid values. """
++
++    def setUp(self):
++        """ Set up a test. """
++
++        self.member_fixture = NamedEnumFixture(Test.named)
++        self.int_fixture = NamedEnumFixture(0)
++
++    def tearDown(self):
++        """ Tidy up after a test. """
++
++        del self.member_fixture
++        del self.int_fixture
++
++    def test_named_get_member(self):
++        """ named enum virtual result with a member value. """
++
++        self.assertEqual(self.member_fixture.named_get(), Test.named)
++
++    def test_named_set_member(self):
++        """ named enum function argument with a member value. """
++
++        self.member_fixture.named_set(Test.named)
++
++    def test_named_var_member(self):
++        """ named enum instance variable with a member value. """
++
++        self.member_fixture.named_var = Test.named
++
++    def test_named_overload_set(self):
++        """ overloaded named enum function argument. """
++
++        self.member_fixture.named_overload_set(Test.named)
++        self.assertIs(self.member_fixture.named_overload, True)
++
++    def test_named_get_int(self):
++        """ named enum virtual result with an integer value. """
++
++        self.assertEqual(self.int_fixture.named_get(), 0)
++
++    def test_named_set_int(self):
++        """ named enum function argument with an integer value. """
++
++        self.int_fixture.named_set(0)
++
++    def test_named_var_int(self):
++        """ named enum instance variable with an integer value. """
++
++        self.int_fixture.named_var = 0
++
++
++class TestBoolConvertors(unittest.TestCase):
++    """ This tests the bool convertors with valid values. """
++
++    def setUp(self):
++        """ Set up a test. """
++
++        self.true_fixture = BoolFixture(True)
++        self.false_fixture = BoolFixture(False)
++        self.nonzero_fixture = BoolFixture(-1)
++        self.zero_fixture = BoolFixture(0)
++
++    def tearDown(self):
++        """ Tidy up after a test. """
++
++        del self.true_fixture
++        del self.false_fixture
++        del self.nonzero_fixture
++        del self.zero_fixture
++
++    def test_bool_get_true(self):
++        """ bool virtual result with a True value. """
++
++        self.assertIs(self.true_fixture.bool_get(), True)
++
++    def test_bool_set_true(self):
++        """ bool function argument with a True value. """
++
++        self.true_fixture.bool_set(True)
++
++    def test_bool_var_true(self):
++        """ bool instance variable with a True value. """
++
++        self.true_fixture.bool_var = True
++
++    def test_bool_get_false(self):
++        """ bool virtual result with a True value. """
++
++        self.assertIs(self.false_fixture.bool_get(), False)
++
++    def test_bool_set_false(self):
++        """ bool function argument with a False value. """
++
++        self.false_fixture.bool_set(False)
++
++    def test_bool_var_false(self):
++        """ bool instance variable with a False value. """
++
++        self.false_fixture.bool_var = False
++
++    def test_bool_get_nonzero(self):
++        """ bool virtual result with a non-zero value. """
++
++        self.assertIs(self.nonzero_fixture.bool_get(), True)
++
++    def test_bool_set_nonzero(self):
++        """ bool function argument with a non-zero value. """
++
++        self.nonzero_fixture.bool_set(-1)
++
++    def test_bool_var_nonzero(self):
++        """ bool instance variable with a non-zero value. """
++
++        self.nonzero_fixture.bool_var = -1
++
++    def test_bool_get_zero(self):
++        """ bool virtual result with a zero value. """
++
++        self.assertIs(self.zero_fixture.bool_get(), False)
++
++    def test_bool_set_zero(self):
++        """ bool function argument with a zero value. """
++
++        self.zero_fixture.bool_set(0)
++
++    def test_bool_var_zero(self):
++        """ bool instance variable with a zero value. """
++
++        self.zero_fixture.bool_var = 0
++
++
++class TestIntConvertors(unittest.TestCase):
++    """ This tests the integer convertors with valid values. """
++
++    @classmethod
++    def setUpClass(cls):
++        """ Set up a test case. """
++
++        # Compute the various test values based on the native sizes.
++        cls.CHAR_LOWER = Test.char_lower()
++        cls.CHAR_UPPER = Test.char_upper()
++        cls.SIGNED_CHAR_LOWER, cls.SIGNED_CHAR_UPPER = cls._signed_bounds(
++                Test.signed_char_sizeof())
++        cls.SHORT_LOWER, cls.SHORT_UPPER = cls._signed_bounds(
++                Test.short_sizeof())
++        cls.INT_LOWER, cls.INT_UPPER = cls._signed_bounds(Test.int_sizeof())
++        cls.LONG_LOWER, cls.LONG_UPPER = cls._signed_bounds(Test.long_sizeof())
++        cls.LONG_LONG_LOWER, cls.LONG_LONG_UPPER = cls._signed_bounds(
++                Test.long_long_sizeof())
++        cls.UNSIGNED_CHAR_UPPER = cls._unsigned_upper_bound(
++                Test.unsigned_char_sizeof())
++        cls.UNSIGNED_SHORT_UPPER = cls._unsigned_upper_bound(
++                Test.unsigned_short_sizeof())
++        cls.UNSIGNED_INT_UPPER = cls._unsigned_upper_bound(
++                Test.unsigned_int_sizeof())
++        cls.UNSIGNED_LONG_UPPER = cls._unsigned_upper_bound(
++                Test.unsigned_long_sizeof())
++        cls.UNSIGNED_LONG_LONG_UPPER = cls._unsigned_upper_bound(
++                Test.unsigned_long_long_sizeof())
++
++    @staticmethod
++    def _signed_bounds(nrbytes):
++        """ Return the range of values for a number of bytes representing a
++        signed value.
++        """
++
++        v = 1 << ((nrbytes * 8) - 1)
++
++        return -v, v - 1
++
++    @staticmethod
++    def _unsigned_upper_bound(nrbytes):
++        """ Return the upper bound for a number of bytes representing an
++        unsigned value.
++        """
++
++        return (1 << (nrbytes * 8)) - 1
++
++
++class TestInvalidValues(TestIntConvertors):
++    """ This tests the integer, boolean and enum convertors with invalid
++    values.
++    """
++
++    def setUp(self):
++        """ Set up a test. """
++
++        self.fixture = InvalidFixture()
++
++    def tearDown(self):
++        """ Tidy up after a test. """
++
++        del self.fixture
++
++    def test_scoped_get(self):
++        """ scoped enum virtual result. """
++
++        with self.assertRaises(TypeError):
++            install_hook()
++            self.fixture.scoped_get()
++            uninstall_hook()
++
++    def test_scoped_set(self):
++        """ scoped enum function argument. """
++
++        with self.assertRaises(TypeError):
++            self.fixture.scoped_set(10)
++
++    def test_scoped_var(self):
++        """ scoped enum instance variable. """
++
++        with self.assertRaises(TypeError):
++            self.fixture.scoped_var = 10
++
++    def test_named_get(self):
++        """ named enum virtual result. """
++
++        with self.assertRaises(TypeError):
++            install_hook()
++            self.fixture.named_get()
++            uninstall_hook()
++
++    def test_named_set(self):
++        """ named enum function argument. """
++
++        with self.assertRaises(TypeError):
++            self.fixture.named_set('0')
++
++    def test_named_var(self):
++        """ named enum instance variable. """
++
++        with self.assertRaises(TypeError):
++            self.fixture.named_var = '0'
++
++    def test_bool_get(self):
++        """ bool virtual result. """
++
++        with self.assertRaises(TypeError):
++            install_hook()
++            self.fixture.bool_get()
++            uninstall_hook()
++
++    def test_bool_set(self):
++        """ bool function argument. """
++
++        with self.assertRaises(TypeError):
++            self.fixture.bool_set('0')
++
++    def test_bool_var(self):
++        """ bool instance variable. """
++
++        with self.assertRaises(TypeError):
++            self.fixture.bool_var = '0'
++
++    def test_char_get(self):
++        """ char virtual result. """
++
++        with self.assertRaises(TypeError):
++            install_hook()
++            self.fixture.char_get()
++            uninstall_hook()
++
++    def test_char_set(self):
++        """ char function argument. """
++
++        with self.assertRaises(TypeError):
++            self.fixture.char_set('0')
++
++    def test_char_var(self):
++        """ char instance variable. """
++
++        with self.assertRaises(TypeError):
++            self.fixture.char_var = '0'
++
++    def test_signed_char_get(self):
++        """ signed char virtual result. """
++
++        with self.assertRaises(TypeError):
++            install_hook()
++            self.fixture.signed_char_get()
++            uninstall_hook()
++
++    def test_signed_char_set(self):
++        """ signed char function argument. """
++
++        with self.assertRaises(TypeError):
++            self.fixture.signed_char_set('0')
++
++    def test_signed_char_var(self):
++        """ signed char instance variable. """
++
++        with self.assertRaises(TypeError):
++            self.fixture.signed_char_var = '0'
++
++    def test_short_get(self):
++        """ short virtual result. """
++
++        with self.assertRaises(TypeError):
++            install_hook()
++            self.fixture.short_get()
++            uninstall_hook()
++
++    def test_short_set(self):
++        """ short function argument. """
++
++        with self.assertRaises(TypeError):
++            self.fixture.short_set('0')
++
++    def test_short_var(self):
++        """ short instance variable. """
++
++        with self.assertRaises(TypeError):
++            self.fixture.short_var = '0'
++
++    def test_int_get(self):
++        """ int virtual result. """
++
++        with self.assertRaises(TypeError):
++            install_hook()
++            self.fixture.int_get()
++            uninstall_hook()
++
++    def test_int_set(self):
++        """ int function argument. """
++
++        with self.assertRaises(TypeError):
++            self.fixture.int_set('0')
++
++    def test_int_var(self):
++        """ int instance variable. """
++
++        with self.assertRaises(TypeError):
++            self.fixture.int_var = '0'
++
++    def test_long_get(self):
++        """ long virtual result. """
++
++        with self.assertRaises(TypeError):
++            install_hook()
++            self.fixture.long_get()
++            uninstall_hook()
++
++    def test_long_set(self):
++        """ long function argument. """
++
++        with self.assertRaises(TypeError):
++            self.fixture.long_set('0')
++
++    def test_long_var(self):
++        """ long instance variable. """
++
++        with self.assertRaises(TypeError):
++            self.fixture.long_var = '0'
++
++    def test_long_long_get(self):
++        """ long long virtual result. """
++
++        with self.assertRaises(TypeError):
++            install_hook()
++            self.fixture.long_long_get()
++            uninstall_hook()
++
++    def test_long_long_set(self):
++        """ long long function argument. """
++
++        with self.assertRaises(TypeError):
++            self.fixture.long_long_set('0')
++
++    def test_long_long_var(self):
++        """ long long instance variable. """
++
++        with self.assertRaises(TypeError):
++            self.fixture.long_long_var = '0'
++
++    def test_unsigned_char_get(self):
++        """ unsigned char virtual result. """
++
++        with self.assertRaises(TypeError):
++            install_hook()
++            self.fixture.unsigned_char_get()
++            uninstall_hook()
++
++    def test_unsigned_char_set(self):
++        """ unsigned char function argument. """
++
++        with self.assertRaises(TypeError):
++            self.fixture.unsigned_char_set('0')
++
++    def test_unsigned_char_var(self):
++        """ unsigned char instance variable. """
++
++        with self.assertRaises(TypeError):
++            self.fixture.unsigned_char_var = '0'
++
++    def test_unsigned_short_get(self):
++        """ unsigned short virtual result. """
++
++        with self.assertRaises(TypeError):
++            install_hook()
++            self.fixture.unsigned_short_get()
++            uninstall_hook()
++
++    def test_unsigned_short_set(self):
++        """ unsigned short function argument. """
++
++        with self.assertRaises(TypeError):
++            self.fixture.unsigned_short_set('0')
++
++    def test_unsigned_short_var(self):
++        """ unsigned short instance variable. """
++
++        with self.assertRaises(TypeError):
++            self.fixture.unsigned_short_var = '0'
++
++    def test_unsigned_int_get(self):
++        """ unsigned int virtual result. """
++
++        with self.assertRaises(TypeError):
++            install_hook()
++            self.fixture.unsigned_int_get()
++            uninstall_hook()
++
++    def test_unsigned_int_set(self):
++        """ unsigned int function argument. """
++
++        with self.assertRaises(TypeError):
++            self.fixture.unsigned_int_set('0')
++
++    def test_unsigned_int_var(self):
++        """ unsigned int instance variable. """
++
++        with self.assertRaises(TypeError):
++            self.fixture.unsigned_int_var = '0'
++
++    def test_unsigned_long_get(self):
++        """ unsigned long virtual result. """
++
++        with self.assertRaises(TypeError):
++            install_hook()
++            self.fixture.unsigned_long_get()
++            uninstall_hook()
++
++    def test_unsigned_long_set(self):
++        """ unsigned long function argument. """
++
++        with self.assertRaises(TypeError):
++            self.fixture.unsigned_long_set('0')
++
++    def test_unsigned_long_var(self):
++        """ unsigned long instance variable. """
++
++        with self.assertRaises(TypeError):
++            self.fixture.unsigned_long_var = '0'
++
++    def test_unsigned_long_long_get(self):
++        """ unsigned long long virtual result. """
++
++        with self.assertRaises(TypeError):
++            install_hook()
++            self.fixture.unsigned_long_long_get()
++            uninstall_hook()
++
++    def test_unsigned_long_long_set(self):
++        """ unsigned long long function argument. """
++
++        with self.assertRaises(TypeError):
++            self.fixture.unsigned_long_long_set('0')
++
++    def test_unsigned_long_long_var(self):
++        """ unsigned long long instance variable. """
++
++        with self.assertRaises(TypeError):
++            self.fixture.unsigned_long_long_var = '0'
++
++
++class TestValidValues(TestIntConvertors):
++    """ This tests the integer convertors with valid values. """
++
++    def setUp(self):
++        """ Set up a test. """
++
++        self.lower_fixture = ValidLowerFixture(self)
++        self.upper_fixture = ValidUpperFixture(self)
++
++    def tearDown(self):
++        """ Tidy up after a test. """
++
++        del self.lower_fixture
++        del self.upper_fixture
++
++    def test_char_get_lower(self):
++        """ char virtual result lower bound. """
++
++        self.assertEqual(self.lower_fixture.char_get(), self.CHAR_LOWER)
++
++    def test_char_get_upper(self):
++        """ char virtual result upper bound. """
++
++        self.assertEqual(self.upper_fixture.char_get(), self.CHAR_UPPER)
++
++    def test_char_set_lower(self):
++        """ char function argument lower bound. """
++
++        self.lower_fixture.char_set(self.CHAR_LOWER)
++
++    def test_char_set_upper(self):
++        """ char function argument upper bound. """
++
++        self.upper_fixture.char_set(self.CHAR_UPPER)
++
++    def test_char_var_lower(self):
++        """ char instance variable lower bound. """
++
++        self.lower_fixture.char_var = self.CHAR_LOWER
++
++    def test_char_var_upper(self):
++        """ char instance variable upper bound. """
++
++        self.upper_fixture.char_var = self.CHAR_UPPER
++
++    def test_signed_char_get_lower(self):
++        """ signed char virtual result lower bound. """
++
++        self.assertEqual(self.lower_fixture.signed_char_get(),
++                self.SIGNED_CHAR_LOWER)
++
++    def test_signed_char_get_upper(self):
++        """ signed char virtual result upper bound. """
++
++        self.assertEqual(self.upper_fixture.signed_char_get(),
++                self.SIGNED_CHAR_UPPER)
++
++    def test_signed_char_set_lower(self):
++        """ signed char function argument lower bound. """
++
++        self.lower_fixture.signed_char_set(self.SIGNED_CHAR_LOWER)
++
++    def test_signed_char_set_upper(self):
++        """ signed char function argument upper bound. """
++
++        self.upper_fixture.signed_char_set(self.SIGNED_CHAR_UPPER)
++
++    def test_signed_char_var_lower(self):
++        """ signed char instance variable lower bound. """
++
++        self.lower_fixture.signed_char_var = self.SIGNED_CHAR_LOWER
++
++    def test_signed_char_var_upper(self):
++        """ signed char instance variable upper bound. """
++
++        self.upper_fixture.signed_char_var = self.SIGNED_CHAR_UPPER
++
++    def test_short_get_lower(self):
++        """ short virtual result lower bound. """
++
++        self.assertEqual(self.lower_fixture.short_get(), self.SHORT_LOWER)
++
++    def test_short_get_upper(self):
++        """ short virtual result upper bound. """
++
++        self.assertEqual(self.upper_fixture.short_get(), self.SHORT_UPPER)
++
++    def test_short_set_lower(self):
++        """ short function argument lower bound. """
++
++        self.lower_fixture.short_set(self.SHORT_LOWER)
++
++    def test_short_set_upper(self):
++        """ short function argument upper bound. """
++
++        self.upper_fixture.short_set(self.SHORT_UPPER)
++
++    def test_short_var_lower(self):
++        """ short instance variable lower bound. """
++
++        self.lower_fixture.short_var = self.SHORT_LOWER
++
++    def test_short_var_upper(self):
++        """ short instance variable upper bound. """
++
++        self.upper_fixture.short_var = self.SHORT_UPPER
++
++    def test_int_get_lower(self):
++        """ int virtual result lower bound. """
++
++        self.assertEqual(self.lower_fixture.int_get(), self.INT_LOWER)
++
++    def test_int_get_upper(self):
++        """ int virtual result upper bound. """
++
++        self.assertEqual(self.upper_fixture.int_get(), self.INT_UPPER)
++
++    def test_int_set_lower(self):
++        """ int function argument lower bound. """
++
++        self.lower_fixture.int_set(self.INT_LOWER)
++
++    def test_int_set_upper(self):
++        """ int function argument upper bound. """
++
++        self.upper_fixture.int_set(self.INT_UPPER)
++
++    def test_int_var_lower(self):
++        """ int instance variable lower bound. """
++
++        self.lower_fixture.int_var = self.INT_LOWER
++
++    def test_int_var_upper(self):
++        """ int instance variable upper bound. """
++
++        self.upper_fixture.int_var = self.INT_UPPER
++
++    def test_long_get_lower(self):
++        """ long virtual result lower bound. """
++
++        self.assertEqual(self.lower_fixture.long_get(), self.LONG_LOWER)
++
++    def test_long_get_upper(self):
++        """ long virtual result upper bound. """
++
++        self.assertEqual(self.upper_fixture.long_get(), self.LONG_UPPER)
++
++    def test_long_set_lower(self):
++        """ long function argument lower bound. """
++
++        self.lower_fixture.long_set(self.LONG_LOWER)
++
++    def test_long_set_upper(self):
++        """ long function argument upper bound. """
++
++        self.upper_fixture.long_set(self.LONG_UPPER)
++
++    def test_long_var_lower(self):
++        """ long instance variable lower bound. """
++
++        self.lower_fixture.long_var = self.LONG_LOWER
++
++    def test_long_var_upper(self):
++        """ long instance variable upper bound. """
++
++        self.upper_fixture.long_var = self.LONG_UPPER
++
++    def test_long_long_get_lower(self):
++        """ long long virtual result lower bound. """
++
++        self.assertEqual(self.lower_fixture.long_long_get(),
++                self.LONG_LONG_LOWER)
++
++    def test_long_long_get_upper(self):
++        """ long long virtual result upper bound. """
++
++        self.assertEqual(self.upper_fixture.long_long_get(),
++                self.LONG_LONG_UPPER)
++
++    def test_long_long_set_lower(self):
++        """ long long function argument lower bound. """
++
++        self.lower_fixture.long_long_set(self.LONG_LONG_LOWER)
++
++    def test_long_long_set_upper(self):
++        """ long long function argument upper bound. """
++
++        self.upper_fixture.long_long_set(self.LONG_LONG_UPPER)
++
++    def test_long_long_var_lower(self):
++        """ long long instance variable lower bound. """
++
++        self.lower_fixture.long_long_var = self.LONG_LONG_LOWER
++
++    def test_long_long_var_upper(self):
++        """ long long instance variable upper bound. """
++
++        self.upper_fixture.long_long_var = self.LONG_LONG_UPPER
++
++    def test_unsigned_char_get_upper(self):
++        """ unsigned char virtual result upper bound. """
++
++        self.assertEqual(self.upper_fixture.unsigned_char_get(),
++                self.UNSIGNED_CHAR_UPPER)
++
++    def test_unsigned_char_set_upper(self):
++        """ unsigned char function argument upper bound. """
++
++        self.upper_fixture.unsigned_char_set(self.UNSIGNED_CHAR_UPPER)
++
++    def test_unsigned_char_var_upper(self):
++        """ unsigned char instance variable upper bound. """
++
++        self.upper_fixture.unsigned_char_var = self.UNSIGNED_CHAR_UPPER
++
++    def test_unsigned_short_get_upper(self):
++        """ unsigned short virtual result upper bound. """
++
++        self.assertEqual(self.upper_fixture.unsigned_short_get(),
++                self.UNSIGNED_SHORT_UPPER)
++
++    def test_unsigned_short_set_upper(self):
++        """ unsigned short function argument upper bound. """
++
++        self.upper_fixture.unsigned_short_set(self.UNSIGNED_SHORT_UPPER)
++
++    def test_unsigned_short_var_upper(self):
++        """ unsigned short instance variable upper bound. """
++
++        self.upper_fixture.unsigned_short_var = self.UNSIGNED_SHORT_UPPER
++
++    def test_unsigned_int_get_upper(self):
++        """ unsigned int virtual result upper bound. """
++
++        self.assertEqual(self.upper_fixture.unsigned_int_get(),
++                self.UNSIGNED_INT_UPPER)
++
++    def test_unsigned_int_set_upper(self):
++        """ unsigned int function argument upper bound. """
++
++        self.upper_fixture.unsigned_int_set(self.UNSIGNED_INT_UPPER)
++
++    def test_unsigned_int_var_upper(self):
++        """ unsigned int instance variable upper bound. """
++
++        self.upper_fixture.unsigned_int_var = self.UNSIGNED_INT_UPPER
++
++    def test_unsigned_long_get_upper(self):
++        """ unsigned long virtual result upper bound. """
++
++        self.assertEqual(self.upper_fixture.unsigned_long_get(),
++                self.UNSIGNED_LONG_UPPER)
++
++    def test_unsigned_long_set_upper(self):
++        """ unsigned long function argument upper bound. """
++
++        self.upper_fixture.unsigned_long_set(self.UNSIGNED_LONG_UPPER)
++
++    def test_unsigned_long_var_upper(self):
++        """ unsigned long instance variable upper bound. """
++
++        self.upper_fixture.unsigned_long_var = self.UNSIGNED_LONG_UPPER
++
++    def test_unsigned_long_long_get_upper(self):
++        """ unsigned long long virtual result upper bound. """
++
++        self.assertEqual(self.upper_fixture.unsigned_long_long_get(),
++                self.UNSIGNED_LONG_LONG_UPPER)
++
++    def test_unsigned_long_long_set_upper(self):
++        """ unsigned long long function argument upper bound. """
++
++        self.upper_fixture.unsigned_long_long_set(
++                self.UNSIGNED_LONG_LONG_UPPER)
++
++    def test_unsigned_long_long_var_upper(self):
++        """ unsigned long long instance variable upper bound. """
++
++        self.upper_fixture.unsigned_long_long_var = self.UNSIGNED_LONG_LONG_UPPER
++
++
++class TestNoOverflowChecking(TestIntConvertors):
++    """ This tests the integer convertors with overflowing values with overflow
++    checking disabled.
++    """
++
++    @staticmethod
++    def _long_long_is_long():
++        """ Return True if (unsigned) long long is the same size as (unsigned)
++        long.
++        """
++
++        return Test.long_long_sizeof() == Test.long_sizeof()
++
++    def setUp(self):
++        """ Set up a test. """
++
++        self.lower_fixture = OverflowLowerFixture(self)
++        self.upper_fixture = OverflowUpperFixture(self)
++
++        self.was_enabled = enableoverflowchecking(False)
++
++    def tearDown(self):
++        """ Tidy up after a test. """
++
++        enableoverflowchecking(self.was_enabled)
++
++        del self.lower_fixture
++        del self.upper_fixture
++
++    def test_char_get_lower(self):
++        """ char virtual result lower bound. """
++
++        install_hook()
++        self.lower_fixture.char_get()
++        uninstall_hook()
++
++    def test_char_get_upper(self):
++        """ char virtual result upper bound. """
++
++        install_hook()
++        self.upper_fixture.char_get()
++        uninstall_hook()
++
++    def test_char_set_lower(self):
++        """ char function argument lower bound. """
++
++        self.lower_fixture.char_set(self.CHAR_LOWER - 1)
++
++    def test_char_set_upper(self):
++        """ char function argument upper bound. """
++
++        self.upper_fixture.char_set(self.CHAR_UPPER + 1)
++
++    def test_char_var_lower(self):
++        """ char instance variable lower bound. """
++
++        self.lower_fixture.char_var = self.CHAR_LOWER - 1
++
++    def test_char_var_upper(self):
++        """ char instance variable upper bound. """
++
++        self.upper_fixture.char_var = self.CHAR_UPPER + 1
++
++    def test_signed_char_get_lower(self):
++        """ signed char virtual result lower bound. """
++
++        install_hook()
++        self.lower_fixture.signed_char_get()
++        uninstall_hook()
++
++    def test_signed_char_get_upper(self):
++        """ signed char virtual result upper bound. """
++
++        install_hook()
++        self.upper_fixture.signed_char_get()
++        uninstall_hook()
++
++    def test_signed_char_set_lower(self):
++        """ signed char function argument lower bound. """
++
++        self.lower_fixture.signed_char_set(self.SIGNED_CHAR_LOWER - 1)
++
++    def test_signed_char_set_upper(self):
++        """ signed char function argument upper bound. """
++
++        self.upper_fixture.signed_char_set(self.SIGNED_CHAR_UPPER + 1)
++
++    def test_signed_char_var_lower(self):
++        """ signed char instance variable lower bound. """
++
++        self.lower_fixture.signed_char_var = self.SIGNED_CHAR_LOWER - 1
++
++    def test_signed_char_var_upper(self):
++        """ signed char instance variable upper bound. """
++
++        self.upper_fixture.signed_char_var = self.SIGNED_CHAR_UPPER + 1
++
++    def test_short_get_lower(self):
++        """ short virtual result lower bound. """
++
++        install_hook()
++        self.lower_fixture.short_get()
++        uninstall_hook()
++
++    def test_short_get_upper(self):
++        """ short virtual result upper bound. """
++
++        install_hook()
++        self.upper_fixture.short_get()
++        uninstall_hook()
++
++    def test_short_set_lower(self):
++        """ short function argument lower bound. """
++
++        self.lower_fixture.short_set(self.SHORT_LOWER - 1)
++
++    def test_short_set_upper(self):
++        """ short function argument upper bound. """
++
++        self.upper_fixture.short_set(self.SHORT_UPPER + 1)
++
++    def test_short_var_lower(self):
++        """ short instance variable lower bound. """
++
++        self.lower_fixture.short_var = self.SHORT_LOWER - 1
++
++    def test_short_var_upper(self):
++        """ short instance variable upper bound. """
++
++        self.upper_fixture.short_var = self.SHORT_UPPER + 1
++
++    def test_int_get_lower(self):
++        """ int virtual result lower bound. """
++
++        install_hook()
++        self.lower_fixture.int_get()
++        uninstall_hook()
++
++    def test_int_get_upper(self):
++        """ int virtual result upper bound. """
++
++        install_hook()
++        self.upper_fixture.int_get()
++        uninstall_hook()
++
++    def test_int_set_lower(self):
++        """ int function argument lower bound. """
++
++        self.lower_fixture.int_set(self.INT_LOWER - 1)
++
++    def test_int_set_upper(self):
++        """ int function argument upper bound. """
++
++        self.upper_fixture.int_set(self.INT_UPPER + 1)
++
++    def test_int_var_lower(self):
++        """ int instance variable lower bound. """
++
++        self.lower_fixture.int_var = self.INT_LOWER - 1
++
++    def test_int_var_upper(self):
++        """ int instance variable upper bound. """
++
++        self.upper_fixture.int_var = self.INT_UPPER + 1
++
++    def test_long_get_lower(self):
++        """ long virtual result lower bound. """
++
++        install_hook()
++        self.lower_fixture.long_get()
++
++        if self._long_long_is_long():
++            # To maintain compatibility with older versions of SIP this
++            # overflows even with overflow checking disabled.
++            with self.assertRaises(OverflowError):
++                uninstall_hook()
++        else:
++            uninstall_hook()
++
++    def test_long_get_upper(self):
++        """ long virtual result upper bound. """
++
++        install_hook()
++        self.upper_fixture.long_get()
++
++        if self._long_long_is_long():
++            # To maintain compatibility with older versions of SIP this
++            # overflows even with overflow checking disabled.
++            with self.assertRaises(OverflowError):
++                uninstall_hook()
++        else:
++            uninstall_hook()
++
++    def test_long_set_lower(self):
++        """ long function argument lower bound. """
++
++        if self._long_long_is_long():
++            # To maintain compatibility with older versions of SIP this
++            # overflows even with overflow checking disabled.
++            with self.assertRaises(OverflowError):
++                self.lower_fixture.long_set(self.LONG_LOWER - 1)
++        else:
++            self.lower_fixture.long_set(self.LONG_LOWER - 1)
++
++    def test_long_set_upper(self):
++        """ long function argument upper bound. """
++
++        if self._long_long_is_long():
++            # To maintain compatibility with older versions of SIP this
++            # overflows even with overflow checking disabled.
++            with self.assertRaises(OverflowError):
++                self.upper_fixture.long_set(self.LONG_UPPER + 1)
++        else:
++            self.upper_fixture.long_set(self.LONG_UPPER + 1)
++
++    def test_long_var_lower(self):
++        """ long instance variable lower bound. """
++
++        if self._long_long_is_long():
++            # To maintain compatibility with older versions of SIP this
++            # overflows even with overflow checking disabled.
++            with self.assertRaises(OverflowError):
++                self.lower_fixture.long_var = self.LONG_LOWER - 1
++        else:
++            self.lower_fixture.long_var = self.LONG_LOWER - 1
++
++    def test_long_var_upper(self):
++        """ long instance variable upper bound. """
++
++        if self._long_long_is_long():
++            # To maintain compatibility with older versions of SIP this
++            # overflows even with overflow checking disabled.
++            with self.assertRaises(OverflowError):
++                self.upper_fixture.long_var = self.LONG_UPPER + 1
++        else:
++            self.upper_fixture.long_var = self.LONG_UPPER + 1
++
++    def test_long_long_get_lower(self):
++        """ long long virtual result lower bound. """
++
++        # To maintain compatibility with older versions of SIP this overflows
++        # even with overflow checking disabled.
++        with self.assertRaises(OverflowError):
++            install_hook()
++            self.lower_fixture.long_long_get()
++            uninstall_hook()
++
++    def test_long_long_get_upper(self):
++        """ long long virtual result upper bound. """
++
++        # To maintain compatibility with older versions of SIP this overflows
++        # even with overflow checking disabled.
++        with self.assertRaises(OverflowError):
++            install_hook()
++            self.upper_fixture.long_long_get()
++            uninstall_hook()
++
++    def test_long_long_set_lower(self):
++        """ long long function argument lower bound. """
++
++        # To maintain compatibility with older versions of SIP this overflows
++        # even with overflow checking disabled.
++        with self.assertRaises(OverflowError):
++            self.lower_fixture.long_long_set(self.LONG_LONG_LOWER - 1)
++
++    def test_long_long_set_upper(self):
++        """ long long function argument upper bound. """
++
++        # To maintain compatibility with older versions of SIP this overflows
++        # even with overflow checking disabled.
++        with self.assertRaises(OverflowError):
++            self.upper_fixture.long_long_set(self.LONG_LONG_UPPER + 1)
++
++    def test_long_long_var_lower(self):
++        """ long long instance variable lower bound. """
++
++        # To maintain compatibility with older versions of SIP this overflows
++        # even with overflow checking disabled.
++        with self.assertRaises(OverflowError):
++            self.lower_fixture.long_long_var = self.LONG_LONG_LOWER - 1
++
++    def test_long_long_var_upper(self):
++        """ long long instance variable upper bound. """
++
++        # To maintain compatibility with older versions of SIP this overflows
++        # even with overflow checking disabled.
++        with self.assertRaises(OverflowError):
++            self.upper_fixture.long_long_var = self.LONG_LONG_UPPER + 1
++
++    def test_unsigned_char_get_upper(self):
++        """ unsigned char virtual result upper bound. """
++
++        install_hook()
++        self.upper_fixture.unsigned_char_get()
++        uninstall_hook()
++
++    def test_unsigned_char_set_upper(self):
++        """ unsigned char function argument upper bound. """
++
++        self.upper_fixture.unsigned_char_set(self.UNSIGNED_CHAR_UPPER + 1)
++
++    def test_unsigned_char_var_upper(self):
++        """ unsigned char instance variable upper bound. """
++
++        self.upper_fixture.unsigned_char_var = self.UNSIGNED_CHAR_UPPER + 1
++
++    def test_unsigned_short_get_upper(self):
++        """ unsigned short virtual result upper bound. """
++
++        install_hook()
++        self.upper_fixture.unsigned_short_get()
++        uninstall_hook()
++
++    def test_unsigned_short_set_upper(self):
++        """ unsigned short function argument upper bound. """
++
++        self.upper_fixture.unsigned_short_set(self.UNSIGNED_SHORT_UPPER + 1)
++
++    def test_unsigned_short_var_upper(self):
++        """ unsigned short instance variable upper bound. """
++
++        self.upper_fixture.unsigned_short_var = self.UNSIGNED_SHORT_UPPER + 1
++
++    def test_unsigned_int_get_upper(self):
++        """ unsigned int virtual result upper bound. """
++
++        install_hook()
++        self.upper_fixture.unsigned_int_get()
++        uninstall_hook()
++
++    def test_unsigned_int_set_upper(self):
++        """ unsigned int function argument upper bound. """
++
++        self.upper_fixture.unsigned_int_set(self.UNSIGNED_INT_UPPER + 1)
++
++    def test_unsigned_int_var_upper(self):
++        """ unsigned int instance variable upper bound. """
++
++        self.upper_fixture.unsigned_int_var = self.UNSIGNED_INT_UPPER + 1
++
++    def test_unsigned_long_get_upper(self):
++        """ unsigned long virtual result upper bound. """
++
++        install_hook()
++        self.upper_fixture.unsigned_long_get()
++        uninstall_hook()
++
++    def test_unsigned_long_set_upper(self):
++        """ unsigned long function argument upper bound. """
++
++        self.upper_fixture.unsigned_long_set(self.UNSIGNED_LONG_UPPER + 1)
++
++    def test_unsigned_long_var_upper(self):
++        """ unsigned long instance variable upper bound. """
++
++        self.upper_fixture.unsigned_long_var = self.UNSIGNED_LONG_UPPER + 1
++
++    def test_unsigned_long_long_get_upper(self):
++        """ unsigned long long virtual result upper bound. """
++
++        install_hook()
++        self.upper_fixture.unsigned_long_long_get()
++        uninstall_hook()
++
++    def test_unsigned_long_long_set_upper(self):
++        """ unsigned long long function argument upper bound. """
++
++        self.upper_fixture.unsigned_long_long_set(
++                self.UNSIGNED_LONG_LONG_UPPER + 1)
++
++    def test_unsigned_long_long_var_upper(self):
++        """ unsigned long long instance variable upper bound. """
++
++        self.upper_fixture.unsigned_long_long_var = self.UNSIGNED_LONG_LONG_UPPER + 1
++
++
++class TestOverflowChecking(TestNoOverflowChecking):
++    """ This tests the integer convertors with overflowing values with overflow
++    checking enabled.
++    """
++
++    def setUp(self):
++        """ Set up a test. """
++
++        super().setUp()
++
++        enableoverflowchecking(True)
++
++    def test_char_get_lower(self):
++        """ char virtual result lower bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_char_get_lower()
++
++    def test_char_get_upper(self):
++        """ char virtual result upper bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_char_get_upper()
++
++    def test_char_set_lower(self):
++        """ char function argument lower bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_char_set_lower()
++
++    def test_char_set_upper(self):
++        """ char function argument upper bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_char_set_upper()
++
++    def test_char_var_lower(self):
++        """ char instance variable lower bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_char_var_lower()
++
++    def test_char_var_upper(self):
++        """ char instance variable upper bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_char_var_upper()
++
++    def test_signed_char_get_lower(self):
++        """ signed char virtual result lower bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_signed_char_get_lower()
++
++    def test_signed_char_get_upper(self):
++        """ signed char virtual result upper bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_signed_char_get_upper()
++
++    def test_signed_char_set_lower(self):
++        """ signed char function argument lower bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_signed_char_set_lower()
++
++    def test_signed_char_set_upper(self):
++        """ signed char function argument upper bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_signed_char_set_upper()
++
++    def test_signed_char_var_lower(self):
++        """ signed char instance variable lower bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_signed_char_var_lower()
++
++    def test_signed_char_var_upper(self):
++        """ signed char instance variable upper bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_signed_char_var_upper()
++
++    def test_short_get_lower(self):
++        """ short virtual result lower bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_short_get_lower()
++
++    def test_short_get_upper(self):
++        """ short virtual result upper bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_short_get_upper()
++
++    def test_short_set_lower(self):
++        """ short function argument lower bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_short_set_lower()
++
++    def test_short_set_upper(self):
++        """ short function argument upper bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_short_set_upper()
++
++    def test_short_var_lower(self):
++        """ short instance variable lower bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_short_var_lower()
++
++    def test_short_var_upper(self):
++        """ short instance variable upper bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_short_var_upper()
++
++    def test_int_get_lower(self):
++        """ int virtual result lower bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_int_get_lower()
++
++    def test_int_get_upper(self):
++        """ int virtual result upper bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_int_get_upper()
++
++    def test_int_set_lower(self):
++        """ int function argument lower bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_int_set_lower()
++
++    def test_int_set_upper(self):
++        """ int function argument upper bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_int_set_upper()
++
++    def test_int_var_lower(self):
++        """ int instance variable lower bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_int_var_lower()
++
++    def test_int_var_upper(self):
++        """ int instance variable upper bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_int_var_upper()
++
++    def test_long_get_lower(self):
++        """ long virtual result lower bound. """
++
++        with self.assertRaises(OverflowError):
++            install_hook()
++            self.lower_fixture.long_get()
++            uninstall_hook()
++
++    def test_long_get_upper(self):
++        """ long virtual result upper bound. """
++
++        with self.assertRaises(OverflowError):
++            install_hook()
++            self.upper_fixture.long_get()
++            uninstall_hook()
++
++    def test_long_set_lower(self):
++        """ long function argument lower bound. """
++
++        with self.assertRaises(OverflowError):
++            self.lower_fixture.long_set(self.LONG_LOWER - 1)
++
++    def test_long_set_upper(self):
++        """ long function argument upper bound. """
++
++        with self.assertRaises(OverflowError):
++            self.upper_fixture.long_set(self.LONG_UPPER + 1)
++
++    def test_long_var_lower(self):
++        """ long instance variable lower bound. """
++
++        with self.assertRaises(OverflowError):
++            self.lower_fixture.long_var = self.LONG_LOWER - 1
++
++    def test_long_var_upper(self):
++        """ long instance variable upper bound. """
++
++        with self.assertRaises(OverflowError):
++            self.upper_fixture.long_var = self.LONG_UPPER + 1
++
++    def test_long_long_get_lower(self):
++        """ long long virtual result lower bound. """
++
++        super().test_long_long_get_lower()
++
++    def test_long_long_get_upper(self):
++        """ long long virtual result upper bound. """
++
++        super().test_long_long_get_upper()
++
++    def test_long_long_set_lower(self):
++        """ long long function argument lower bound. """
++
++        super().test_long_long_set_lower()
++
++    def test_long_long_set_upper(self):
++        """ long long function argument upper bound. """
++
++        super().test_long_long_set_upper()
++
++    def test_long_long_var_lower(self):
++        """ long long instance variable lower bound. """
++
++        super().test_long_long_var_lower()
++
++    def test_long_long_var_upper(self):
++        """ long long instance variable upper bound. """
++
++        super().test_long_long_var_upper()
++
++    def test_unsigned_char_get_upper(self):
++        """ unsigned char virtual result upper bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_unsigned_char_get_upper()
++
++    def test_unsigned_char_set_upper(self):
++        """ unsigned char function argument upper bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_unsigned_char_set_upper()
++
++    def test_unsigned_char_var_upper(self):
++        """ unsigned char instance variable upper bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_unsigned_char_var_upper()
++
++    def test_unsigned_short_get_upper(self):
++        """ unsigned short virtual result upper bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_unsigned_short_get_upper()
++
++    def test_unsigned_short_set_upper(self):
++        """ unsigned short function argument upper bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_unsigned_short_set_upper()
++
++    def test_unsigned_short_var_upper(self):
++        """ unsigned short instance variable upper bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_unsigned_short_var_upper()
++
++    def test_unsigned_int_get_upper(self):
++        """ unsigned int virtual result upper bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_unsigned_int_get_upper()
++
++    def test_unsigned_int_set_upper(self):
++        """ unsigned int function argument upper bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_unsigned_int_set_upper()
++
++    def test_unsigned_int_var_upper(self):
++        """ unsigned int instance variable upper bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_unsigned_int_var_upper()
++
++    def test_unsigned_long_get_upper(self):
++        """ unsigned long virtual result upper bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_unsigned_long_get_upper()
++
++    def test_unsigned_long_set_upper(self):
++        """ unsigned long function argument upper bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_unsigned_long_set_upper()
++
++    def test_unsigned_long_var_upper(self):
++        """ unsigned long instance variable upper bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_unsigned_long_var_upper()
++
++    def test_unsigned_long_long_get_upper(self):
++        """ unsigned long long virtual result upper bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_unsigned_long_long_get_upper()
++
++    def test_unsigned_long_long_set_upper(self):
++        """ unsigned long long function argument upper bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_unsigned_long_long_set_upper()
++
++    def test_unsigned_long_long_var_upper(self):
++        """ unsigned long long instance variable upper bound. """
++
++        with self.assertRaises(OverflowError):
++            super().test_unsigned_long_long_var_upper()
++
++
++if __name__ == '__main__':
++    unittest.main()
+diff -Nurd '--exclude=doc' '--exclude=.hg*' ./sip-4.19.12.orig/test/int_convertors/test.h sip/test/int_convertors/test.h
+--- ./sip-4.19.12.orig/test/int_convertors/test.h	1969-12-31 19:00:00.000000000 -0500
++++ sip/test/int_convertors/test.h	2018-09-18 17:52:23.315543462 -0400
+@@ -0,0 +1,110 @@
++#if !defined(_TEST_H)
++#define _TEST_H
++
++#include <limits.h>
++
++
++class Test
++{
++public:
++    enum class Scoped {
++        scoped = 10
++    };
++    Scoped scoped_get() {return scoped_virt();}
++    virtual Scoped scoped_virt() {return Scoped::scoped;}
++    static void scoped_set(Scoped) {}
++    Scoped scoped_var;
++
++    enum Named {
++        named = 10
++    };
++    Named named_get() {return named_virt();}
++    virtual Named named_virt() {return named;}
++    static void named_set(Named) {}
++    Named named_var;
++
++    enum Named2 {
++        named2 = 10
++    };
++    void named_overload_set(Named2) {named_overload = false;}
++    void named_overload_set(Named) {named_overload = true;}
++    bool named_overload;
++
++    bool bool_get() {return bool_virt();}
++    virtual bool bool_virt() {return false;}
++    static void bool_set(bool) {}
++    bool bool_var;
++
++    static int char_lower() {return CHAR_MIN;}
++    static int char_upper() {return CHAR_MAX;}
++    char char_get() {return char_virt();}
++    virtual char char_virt() {return 0;}
++    static void char_set(char) {}
++    char char_var;
++
++    static unsigned signed_char_sizeof() {return sizeof (signed char);}
++    signed char signed_char_get() {return signed_char_virt();}
++    virtual signed char signed_char_virt() {return 0;}
++    static void signed_char_set(signed char) {}
++    signed char signed_char_var;
++
++    static unsigned short_sizeof() {return sizeof (short);}
++    short short_get() {return short_virt();}
++    virtual short short_virt() {return 0;}
++    static void short_set(short) {}
++    short short_var;
++
++    static unsigned int_sizeof() {return sizeof (int);}
++    int int_get() {return int_virt();}
++    virtual int int_virt() {return 0;}
++    static void int_set(int) {}
++    int int_var;
++
++    static unsigned long_sizeof() {return sizeof (long);}
++    long long_get() {return long_virt();}
++    virtual long long_virt() {return 0;}
++    static void long_set(long) {}
++    long long_var;
++
++    static unsigned long_long_sizeof() {return sizeof (long long);}
++    long long long_long_get() {return long_long_virt();}
++    virtual long long long_long_virt() {return 0;}
++    static void long_long_set(long long) {}
++    long long long_long_var;
++
++    static unsigned unsigned_char_sizeof() {return sizeof (unsigned char);}
++    unsigned char unsigned_char_get() {return unsigned_char_virt();}
++    virtual unsigned char unsigned_char_virt() {return 0;}
++    static void unsigned_char_set(unsigned char) {}
++    unsigned char unsigned_char_var;
++
++    static unsigned unsigned_short_sizeof() {return sizeof (unsigned short);}
++    unsigned short unsigned_short_get() {return unsigned_short_virt();}
++    virtual unsigned short unsigned_short_virt() {return 0;}
++    static void unsigned_short_set(unsigned short) {}
++    unsigned short unsigned_short_var;
++
++    static unsigned unsigned_int_sizeof() {return sizeof (unsigned int);}
++    unsigned int unsigned_int_get() {return unsigned_int_virt();}
++    virtual unsigned int unsigned_int_virt() {return 0;}
++    static void unsigned_int_set(unsigned int) {}
++    unsigned int unsigned_int_var;
++
++    static unsigned unsigned_long_sizeof() {return sizeof (unsigned long);}
++    unsigned long unsigned_long_get() {return unsigned_long_virt();}
++    virtual unsigned long unsigned_long_virt() {return 0;}
++    static void unsigned_long_set(unsigned long) {}
++    unsigned long unsigned_long_var;
++
++    static unsigned unsigned_long_long_sizeof() {
++        return sizeof (unsigned long long);
++    }
++    unsigned long long unsigned_long_long_get() {
++        return unsigned_long_long_virt();
++    }
++    virtual unsigned long long unsigned_long_long_virt() {return 0;}
++    static void unsigned_long_long_set(unsigned long long) {}
++    unsigned long long unsigned_long_long_var;
++};
++
++#endif
+diff -Nurd '--exclude=doc' '--exclude=.hg*' ./sip-4.19.12.orig/test/int_convertors/test.sip sip/test/int_convertors/test.sip
+--- ./sip-4.19.12.orig/test/int_convertors/test.sip	1969-12-31 19:00:00.000000000 -0500
++++ sip/test/int_convertors/test.sip	2018-09-18 17:52:23.315543462 -0400
+@@ -0,0 +1,106 @@
++%Module(name=test)
++
++//%Import QtCore/QtCoremod.sip
++
++class Test
++{
++%TypeHeaderCode
++#include "test.h"
++%End
++
++public:
++    enum class Scoped {
++        scoped
++    };
++    Scoped scoped_get();
++    virtual Scoped scoped_virt();
++    static void scoped_set(Scoped);
++    Scoped scoped_var;
++
++    enum Named {
++        named
++    };
++    Named named_get();
++    virtual Named named_virt();
++    static void named_set(Named);
++    Named named_var;
++
++    enum Named2 {
++        named2 = 10
++    };
++    void named_overload_set(Named2);
++    void named_overload_set(Named);
++    bool named_overload;
++
++    bool bool_get();
++    virtual bool bool_virt();
++    static void bool_set(bool);
++    bool bool_var;
++
++    static int char_lower();
++    static int char_upper();
++    char char_get() /PyInt/;
++    virtual char char_virt() /PyInt/;
++    static void char_set(char /PyInt/);
++    char char_var /PyInt/;
++
++    static unsigned signed_char_sizeof();
++    signed char signed_char_get() /PyInt/;
++    virtual signed char signed_char_virt() /PyInt/;
++    static void signed_char_set(signed char /PyInt/);
++    signed char signed_char_var /PyInt/;
++
++    static unsigned short_sizeof();
++    short short_get();
++    virtual short short_virt();
++    static void short_set(short);
++    short short_var;
++
++    static unsigned int_sizeof();
++    int int_get();
++    virtual int int_virt();
++    static void int_set(int);
++    int int_var;
++
++    static unsigned long_sizeof();
++    long long_get();
++    virtual long long_virt();
++    static void long_set(long);
++    long long_var;
++
++    static unsigned long_long_sizeof();
++    long long long_long_get();
++    virtual long long long_long_virt();
++    static void long_long_set(long long);
++    long long long_long_var;
++
++    static unsigned unsigned_char_sizeof();
++    unsigned char unsigned_char_get() /PyInt/;
++    virtual unsigned char unsigned_char_virt() /PyInt/;
++    static void unsigned_char_set(unsigned char /PyInt/);
++    unsigned char unsigned_char_var /PyInt/;
++
++    static unsigned unsigned_short_sizeof();
++    unsigned short unsigned_short_get();
++    virtual unsigned short unsigned_short_virt();
++    static void unsigned_short_set(unsigned short);
++    unsigned short unsigned_short_var;
++
++    static unsigned unsigned_int_sizeof();
++    unsigned int unsigned_int_get();
++    virtual unsigned int unsigned_int_virt();
++    static void unsigned_int_set(unsigned int);
++    unsigned int unsigned_int_var;
++
++    static unsigned unsigned_long_sizeof();
++    unsigned long unsigned_long_get();
++    virtual unsigned long unsigned_long_virt();
++    static void unsigned_long_set(unsigned long);
++    unsigned long unsigned_long_var;
++
++    static unsigned unsigned_long_long_sizeof();
++    unsigned long long unsigned_long_long_get();
++    virtual unsigned long long unsigned_long_long_virt();
++    static void unsigned_long_long_set(unsigned long long);
++    unsigned long long unsigned_long_long_var;
++};

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Openembedded-commits mailing list