aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilip Balister <philip@balister.org>2018-09-24 20:39:41 -0400
committerKhem Raj <raj.khem@gmail.com>2018-09-24 18:10:43 -0700
commitb82388509c68df69cc0e0199774be6a51641df01 (patch)
treef977a225c12fa14042d4fa18236b92692e6ba56b
parent7b427e1187b3ab3ac354a8eea969b2c91a99f0fb (diff)
downloadmeta-openembedded-b82388509c68df69cc0e0199774be6a51641df01.tar.gz
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@balister.org>
-rw-r--r--meta-oe/recipes-devtools/sip/files/sip.patch31325
1 files 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 78100fc4ba..c126beee75 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@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@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@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@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@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@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@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@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@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@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@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@riverbankcomputing.com>
+-
+- * NEWS:
+- Updated the NEWS file.
+- [0339dce88c21] <4.19-maint>
+-
+-2018-06-19 Phil Thompson <phil@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@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@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@riverbankcomputing.com>
+-
+- * sphinx/c_api.rst:
+- Clarified the docs for sipSetUserObject().
+- [8077330e3c1b] <4.19-maint>
+-
+-2018-06-10 Phil Thompson <phil@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@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@riverbankcomputing.com>
+-
+- * mk_distinfo.py:
+- Fixed a typo.
+- [e687d71b4cc9] <4.19-maint>
+-
+-2018-05-29 Phil Thompson <phil@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@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@riverbankcomputing.com>
+-
+- * siplib/siplib.c.in:
+- Fixed __qualname__ for generated types.
+- [7cf6d49bb422] <4.19-maint>
+-
+-2018-05-16 Phil Thompson <phil@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@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@riverbankcomputing.com>
+-
+- * sphinx/riverbank/static/riverbank.css:
+- More CSS fixes.
+- [e413581ca661] <4.19-maint>
+-
+-2018-04-05 Phil Thompson <phil@riverbankcomputing.com>
+-
+- * sphinx/riverbank/static/riverbank.css:
+- Fixed the CSS for links in headers.
+- [f125f51ceffb] <4.19-maint>
+-
+-2018-03-27 Phil Thompson <phil@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@riverbankcomputing.com>
+-
+- * sipgen/gencode.c:
+- Signal docstrings can now automatically include the signature.
+- [34a94ca0260d] <4.19-maint>
+-
+-2018-03-02 Phil Thompson <phil@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@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@riverbankcomputing.com>
+-
+- * README:
+- Fixed the README.
+- [f07d0788eef0] <4.19-maint>
+-
+-2018-01-29 Phil Thompson <phil@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@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@riverbankcomputing.com>
+-
+- * siplib/siplib.c.in:
+- A significant update to a comment.
+- [f947546822c3] <4.19-maint>
+-
+-2018-01-16 Phil Thompson <phil@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@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@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@riverbankcomputing.com>
+-
+- * sipgen/gencode.c:
+- Fixed a missing quote in the docstring support.
+- [e37301b91a57] <4.19-maint>
+-
+-2018-01-07 Phil Thompson <phil@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@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@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@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@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@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@riverbankcomputing.com>
+-
+- * sphinx/annotations.rst:
+- Updated the docs for /NewThread/.
+- [30c7476904af] <4.19-maint>
+-
+-2017-11-10 Phil Thompson <phil@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@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@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@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@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@riverbankcomputing.com>
+-
+- * siplib/siplib.c.in:
+- Build fixes for Python v2.
+- [5b2adad49340] <4.19-maint>
+-
+-2017-09-18 Phil Thompson <phil@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@riverbankcomputing.com>
+-
+- * sipgen/transform.c:
+- Detect recursive imports as an error.
+- [ba19c3f5fb29] <4.19-maint>
+-
+-2017-07-03 Phil Thompson <phil@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@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@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@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@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@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@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@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@riverbankcomputing.com>
+-
+- * .hgignore:
+- Updated .hgignore for the changed build directory.
+- [b2fb251d3500] <4.19-maint>
+-
+-2017-05-27 Phil Thompson <phil@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@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@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@riverbankcomputing.com>
+-
+- * sipgen/gencode.c:
+- Fixes for 'char *&' argument types.
+- [684e23c995a3] <4.19-maint>
+-
+-2017-05-05 Phil Thompson <phil@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@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@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@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@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@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@riverbankcomputing.com>
+-
+- * siplib/siplib.c.in:
+- Remove an unnecessary comment.
+- [1f31effbc614] <4.19-maint>
+-
+-2017-03-03 Phil Thompson <phil@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@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@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@riverbankcomputing.com>
+-
+- * siplib/siplib.c.in:
+- Fixed a typo in the implementation of sipEnableGC().
+- [c15936fc6007] <4.19-maint>
+-
+-2017-02-05 Phil Thompson <phil@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@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@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@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@riverbankcomputing.com>
+-
+- * sipgen/metasrc/parser.y:
+- Fixed a couple of missing types.
+- [9737461081da] <4.19-maint>
+-
+-2017-01-23 Phil Thompson <phil@riverbankcomputing.com>
+-
+- * sipgen/gencode.c:
+- More fixes for /NoTypeName/ applied to class templates.
+- [8a45855e0d70] <4.19-maint>
+-
+-2017-01-22 Phil Thompson <phil@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@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@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@riverbankcomputing.com>
+-
+- * siplib/siplib.c.in:
+- Fixed sipGetBufferInfo().
+- [1de5c188f98d] <4.19-maint>
+-
+-2017-01-10 Phil Thompson <phil@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@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@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@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@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@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@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@riverbankcomputing.com>
+-
+- * sipgen/transform.c:
+- Fixed the incomplete tidy-up.
+- [69aaa13a1883]
+-
+-2016-11-21 Phil Thompson <phil@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@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@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@riverbankcomputing.com>
+-
+- * siplib/siplib.c.in:
+- Fixed some compiler warnings when building for Python v2.
+- [264793ee3fb0]
+-
+-2016-10-25 Phil Thompson <phil@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@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@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@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@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@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@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@riverbankcomputing.com>
+-
+- * sipgen/transform.c:
+- Refactored the name lookup code.
+- [8bd669cf535f]
+-
+-2016-09-29 Phil Thompson <phil@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@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@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@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@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@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@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@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@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@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@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@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@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@riverbankcomputing.com>
+-
+- * siplib/siplib.c.in, sphinx/c_api.rst:
+- Documented the new Unicode-related functions.
+- [c8408349d43c]
+-
+-2016-09-05 Phil Thompson <phil@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@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@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@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@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@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@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@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@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@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@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@riverbankcomputing.com>
+-
+- * rb-product, rbproduct.py:
+- Replaced the product plugin with a product file.
+- [a10b0caa91a8] <4.18-maint>
+-
+-2016-06-20 Phil Thompson <phil@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@riverbankcomputing.com>
+-
+- * rbproduct.py:
+- Tewaks to the product plugin.
+- [b2fd658f11cf] <4.18-maint>
+-
+-2016-06-15 Phil Thompson <phil@riverbankcomputing.com>
+-
+- * rbproduct.py:
+- Debugged the support for rb-release.
+- [38cdb78872f4] <4.18-maint>
+-
+-2016-06-13 Phil Thompson <phil@riverbankcomputing.com>
+-
+- * rbproduct.py:
+- Updated the product plugin to support rb-release.
+- [ecb166af3ad3] <4.18-maint>
+-
+-2016-06-10 Phil Thompson <phil@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@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@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@riverbankcomputing.com>
+-
+- * rbproduct.py:
+- Updated the product plugin for the latest rbtools changes.
+- [a4a0a84984dc] <4.18-maint>
+-
+-2016-05-05 Phil Thompson <phil@riverbankcomputing.com>
+-
+- * configure.py.in:
+- Fixed a bug in out-of-source builds.
+- [f9602fd24f17] <4.18-maint>
+-
+-2016-04-22 Phil Thompson <phil@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@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@riverbankcomputing.com>
+-
+- * METADATA.in:
+- Updated the description in the meta-data.
+- [d9eb656132f3]
+-
+-2016-04-08 Phil Thompson <phil@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@riverbankcomputing.com>
+-
+- * rbproduct.py:
+- Updated the product plugin.
+- [e42e999389f9]
+-
+- * rbproduct.py:
+- Added the rbtools product plugin.
+- [b9ba57967915]
+-
+-2016-03-30 Phil Thompson <phil@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@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@riverbankcomputing.com>
+-
+- * sipgen/gencode.c:
+- __long__ gets translated to __int__ for Python v3.
+- [a4f8a7810cc3]
+-
+-2016-03-01 Phil Thompson <phil@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@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@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@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@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@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@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@riverbankcomputing.com>
+-
+- * sip.pyi, sipgen/type_hints.c:
+- Tweaks to the type hint support.
+- [785978d8f7e3]
+-
+-2016-02-16 Phil Thompson <phil@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@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@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@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@riverbankcomputing.com>
+-
+- * sipgen/type_hints.c:
+- PY_TYPE and PY_SLICE aren't actually needed.
+- [9778770c65a5]
+-
+-2016-02-08 Phil Thompson <phil@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@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@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@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@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@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@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@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@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@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@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@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@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@riverbankcomputing.com>
+-
+- * sphinx/c_api.rst:
+- Minor docs change.
+- [dd03f114259c]
+-
+-2016-01-17 Phil Thompson <phil@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@riverbankcomputing.com>
+-
+- * sipgen/metasrc/parser.y, sphinx/specification_files.rst:
+- Deprecated SIP_SIGNAL.
+- [865e00b6ffa0]
+-
+-2016-01-15 Phil Thompson <phil@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@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@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@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@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@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@riverbankcomputing.com>
+-
+- * siplib/siplib.c.in:
+- Fixed the previous fix.
+- [17876e15c41d] <4.17-maint>
+-
+-2015-11-25 Phil Thompson <phil@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@riverbankcomputing.com>
+-
+- * sphinx/using.rst:
+- Fixed a type in the docs.
+- [7d0d2cede024] <4.16-maint>
+-
+-2015-06-02 Phil Thompson <phil@riverbankcomputing.com>
+-
+- * NEWS:
+- Updated the NEWS file.
+- [92c83f02758f] <4.16-maint>
+-
+-2015-05-24 Phil Thompson <phil@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@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@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@riverbankcomputing.com>
+-
+- * sipgen/gencode.c:
+- Fix the declaration of sipRes in the %VirtualCallCode support.
+- [bd92aad3cf7d] <4.16-maint>
+-
+-2015-03-19 Phil Thompson <phil@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@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@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@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@riverbankcomputing.com>
+-
+- * sipgen/gencode.c:
+- Added support for module-level PyObjects.
+- [136913548818] <4.16-maint>
+-
+-2015-02-14 Phil Thompson <phil@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@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@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@riverbankcomputing.com>
+-
+- * siplib/siplib.c.in:
+- Fixed a couple of compiler warnings.
+- [d653de687fd4] <4.16-maint>
+-
+-2015-02-04 Phil Thompson <phil@riverbankcomputing.com>
+-
+- * Merged the current 4.16-maint branch into the trunk.
+- [f207b8886557]
+-
+-2015-01-30 Phil Thompson <phil@riverbankcomputing.com>
+-
+- * siplib/siplib.c.in:
+- Fixed the lookup of slots.
+- [56c254273cd8] <4.16-maint>
+-
+-2015-01-05 Phil Thompson <phil@riverbankcomputing.com>
+-
+- * sipgen/metasrc/parser.y:
+- Fixed an invalid deprecation warning.
+- [3c5425fa3c80] <4.16-maint>
+-
+-2015-01-02 Phil Thompson <phil@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@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@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@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@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@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@riverbankcomputing.com>
+-
+- * siplib/voidptr.c:
+- Updated a deprecated definition of method arguments.
+- [529b8cd2ab89] <4.16-maint>
+-
+-2014-11-29 Phil Thompson <phil@riverbankcomputing.com>
+-
+- * siputils.py:
+- Fixed a regression when adding the VPATH support for moc.
+- [c2c285a80412] <4.16-maint>
+-
+-2014-11-16 Phil Thompson <phil@riverbankcomputing.com>
+-
+- * build.py:
+- A source package now includes a full ChangeLog.
+- [c005a6d2e53e] <4.16-maint>
+-
+-2014-11-05 Phil Thompson <phil@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@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@riverbankcomputing.com>
+-
+- * build.py:
+- Removed the reference to MacHg in the internal build script.
+- [b1668849c472] <4.16-maint>
+-
+-2014-10-23 Phil Thompson <phil@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@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@riverbankcomputing.com>
+-
+- * siplib/descriptors.c:
+- Minor fix for Python v2.5 and earlier.
+- [3b7f6957ae4b] <4.16-maint>
+-
+-2014-10-06 Phil Thompson <phil@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@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@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@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@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@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@riverbankcomputing.com>
+-
+- * NEWS:
+- Updated the NEWS file.
+- [b5de96615389] <4.16-maint>
+-
+-2014-09-03 Phil Thompson <phil@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@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@riverbankcomputing.com>
+-
+- * build.py, configure.py.in:
+- Added fixes for QTBUG-39300.
+- [53f490fe8f52] <4.16-maint>
+-
+-2014-07-03 Phil Thompson <phil@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@riverbankcomputing.com>
+-
+- * sipgen/gencode.c:
+- Fixed a regression that introduced some "modern" C code.
+- [449e2866018a] <4.16-maint>
+-
+-2014-06-16 Phil Thompson <phil@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@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@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@riverbankcomputing.com>
+-
+- * configure.py.in:
+- Fixes for Python v2.6.
+- [3974dcb54776] <4.16-maint>
+-
+-2014-06-01 Phil Thompson <phil@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@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@riverbankcomputing.com>
+-
+- * siplib/descriptors.c:
+- Fixed a regression introduced when getting rid of warning messages.
+- [9472e2f08313]
+-
+-2014-05-23 Phil Thompson <phil@riverbankcomputing.com>
+-
+- * configure.py.in:
+- Fixed a regression in the handling of the --platform configure.py
+- option.
+- [1cc4bd967882]
+-
+-2014-05-18 Phil Thompson <phil@riverbankcomputing.com>
+-
+- * siplib/siplib.c.in:
+- Eliminated a couple of (benign) warning messages.
+- [f6acb8ed7b65]
+-
+-2014-05-16 Phil Thompson <phil@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@riverbankcomputing.com>
+-
+- * configure.py.in:
+- Fixed a bug in the handling of configuration files.
+- [61da788f455f]
+-
+-2014-05-14 Phil Thompson <phil@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@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@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@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@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@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@riverbankcomputing.com>
+-
+- * siputils.py:
+- Handle in-line comments in spec files.
+- [044852da62d4]
+-
+-2014-04-24 Phil Thompson <phil@riverbankcomputing.com>
+-
+- * siplib/voidptr.c:
+- Fixed the previous fix. (This is C not C++.)
+- [a67e996e00d3]
+-
+-2014-04-23 Phil Thompson <phil@riverbankcomputing.com>
+-
+- * NEWS, siplib/voidptr.c:
+- Implemented nb_bool for sip.voidptr.
+- [7ca5aa6bde10]
+-
+-2014-04-21 Phil Thompson <phil@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@riverbankcomputing.com>
+-
+- * sipgen/lexer.l, sipgen/parser.y:
+- Merged the v4.15 maintenance branch into the trunk.
+- [8e55c9f2ba87]
+-
+-2014-04-15 Phil Thompson <phil@riverbankcomputing.com>
+-
+- * sphinx/conf.py.in:
+- Fixed the missing logo thumbnail.
+- [f53a9094e52e] <4.15-maint>
+-
+-2014-04-08 Phil Thompson <phil@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@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@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@riverbankcomputing.com>
+-
+- * sipgen/gencode.c:
+- Fixed the handling of enums for C++11.
+- [85e544458789] <4.15-maint>
+-
+-2014-03-14 Phil Thompson <phil@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@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@riverbankcomputing.com>
+-
+- * NEWS:
+- Updated the NEWS file.
+- [8d7c37ddc55d] <4.15-maint>
+-
+-2014-02-22 Phil Thompson <phil@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@riverbankcomputing.com>
+-
+- * sipgen/transform.c:
+- Further fixes for the handling of virtual methods.
+- [14732b487dda] <4.15-maint>
+-
+-2013-08-23 Phil Thompson <phil@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@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@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@riverbankcomputing.com>
+-
+- * NEWS:
+- Updated the NEWS file.
+- [69897cf50dea]
+-
+-2013-08-13 Phil Thompson <phil@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@riverbankcomputing.com>
+-
+- * sphinx/c_api.rst:
+- Documented sipConvertToArray() and sipConvertToTypedArray().
+- [bf49a3ad5612]
+-
+-2013-08-05 Phil Thompson <phil@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@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@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@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@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@riverbankcomputing.com>
+-
+- * siplib/siplib.c.in:
+- Clear any exceptions before trying to parse a reimplementation
+- result.
+- [7bebd55f50b2]
+-
+-2013-07-24 Phil Thompson <phil@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@riverbankcomputing.com>
+-
+- * siplib/siplib.c.in:
+- Fixed a bug in the dereferencing of mixins.
+- [fc3df3e99932]
+-
+-2013-07-21 Phil Thompson <phil@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@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@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@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@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@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@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@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@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@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@riverbankcomputing.com>
+-
+- * Merged the v4.14 maintenance branch.
+- [97beee973f94]
+-
+-2013-06-21 Phil Thompson <phil@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@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@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@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@riverbankcomputing.com>
+-
+- * siplib/siplib.c.in:
+- Fixed the last fix.
+- [67258ffe885a] <4.14-maint>
+-
+-2013-06-08 Phil Thompson <phil@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@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@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@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@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@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@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@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@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@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@riverbankcomputing.com>
+-
+- * sipgen/gencode.c:
+- Removed some redundant code generated for a component module.
+- [395bf9f00aa6] <4.14-maint>
+-
+-2013-03-26 Phil Thompson <phil@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@riverbankcomputing.com>
+-
+- * sipgen/gencode.c:
+- Fixed a code generation bug when using /Array, Transfer/.
+- [054f1676c300] <4.14-maint>
+-
+-2013-03-06 Phil Thompson <phil@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@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@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@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@riverbankcomputing.com>
+-
+- * sphinx/introduction.rst.in:
+- Documentation updates regarding SIP v5.
+- [03f33e7fdfb1] <4.14-maint>
+-
+-2013-02-04 Phil Thompson <phil@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@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@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@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@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@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@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@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@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@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@riverbankcomputing.com>
+-
+- * siputils.py:
+- Fixed the build system for QtTest in Qt5.
+- [55188026fe6d] <4.14-maint>
+-
+-2012-12-08 Phil Thompson <phil@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@riverbankcomputing.com>
+-
+- * siputils.py:
+- Fixed the build system for Qt v5-rc1.
+- [44586b952072] <4.14-maint>
+-
+-2012-11-14 Phil Thompson <phil@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@riverbankcomputing.com>
+-
+- * NEWS:
+- Updated the NEWS file.
+- [214dd6433474]
+-
+-2012-09-27 Phil Thompson <phil@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@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@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@riverbankcomputing.com>
+-
+- * sphinx/annotations.rst:
+- Fixed the incorrect /Factory/ documentation.
+- [3b76a41a1f4a]
+-
+-2012-09-20 Phil Thompson <phil@riverbankcomputing.com>
+-
+- * sipgen/gencode.c:
+- Fixed the signature for generated virtual error handler functions.
+- [caa74f25dff8]
+-
+-2012-09-19 Phil Thompson <phil@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@riverbankcomputing.com>
+-
+- * sphinx/c_api.rst:
+- Fixed a documentation typo.
+- [e1a825c52e33] <4.13-maint>
+-
+-2012-06-20 Phil Thompson <phil@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@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@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@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@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@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@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@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@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@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@riverbankcomputing.com>
+-
+- * siputils.py:
+- Taught the build system about Qt5's QtGui module.
+- [8d2739f3225f] <4.13-maint>
+-
+-2012-04-02 Phil Thompson <phil@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@riverbankcomputing.com>
+-
+- * siplib/siplib.c.in:
+- Updated the Unicode support for Python v3.3.
+- [0870e512d8dd] <4.13-maint>
+-
+-2012-03-04 Phil Thompson <phil@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@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@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@riverbankcomputing.com>
+-
+- * sipgen/parser.y:
+- Fixed bad pointer bugs in the parsing of exceptions.
+- [1058b2c18309] <4.13-maint>
+-
+-2012-01-30 Phil Thompson <phil@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@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@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@riverbankcomputing.com>
+-
+- * siplib/siplib.c.in:
+- Properly handle %PickleCode returning NULL.
+- [29ec1c523114] <4.13-maint>
+-
+-2011-12-17 Phil Thompson <phil@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@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@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@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@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@riverbankcomputing.com>
+-
+- * NEWS, sipgen/parser.y, sphinx/annotations.rst:
+- Added the /PyName/ typedef annotation.
+- [8c147224120a] <4.13-maint>
+-
+-2011-11-23 Phil Thompson <phil@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@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@riverbankcomputing.com>
+-
+- * sipgen/gencode.c:
+- Updated some code generator comments.
+- [fad4bdca5bbd] <4.13-maint>
+-
+-2011-11-16 Phil Thompson <phil@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@riverbankcomputing.com>
+-
+- * sipgen/parser.y:
+- Added support for void template arguments.
+- [1c699c672ed7] <4.13-maint>
+-
+-2011-10-24 Phil Thompson <phil@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@riverbankcomputing.com>
+-
+- * build.py:
+- Fixed the build system for MacOS as the development platform.
+- [fdd3cecee60d] <4.12-maint>
+-
+-2011-05-22 Phil Thompson <phil@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@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@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@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@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@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@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@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@riverbankcomputing.com>
+-
+- * NEWS:
+- Updated the news file.
+- [ec9807971e08] <4.12-maint>
+-
+-2011-03-27 Phil Thompson <phil@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@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@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@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@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@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@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@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@riverbankcomputing.com>
+-
+- * sipgen/gencode.c:
+- Fixed /KeepReference/ when used with ctors.
+- [1a5475b48b7c] <4.12-maint>
+-
+-2011-01-22 Phil Thompson <phil@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@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@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@riverbankcomputing.com>
+-
+- * NEWS:
+- Updated the NEWS file.
+- [fa100876a783] <4.12-maint>
+-
+-2011-01-07 Phil Thompson <phil@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@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@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@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@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@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@riverbankcomputing.com>
+-
+- * NEWS:
+- Fixed some errors in the NEWS file.
+- [44a6a3833477] <4.12-maint>
+-
+-2010-12-23 Phil Thompson <phil@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@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@riverbankcomputing.com>
+-
+- * sipgen/transform.c:
+- Fixed the inclusion of header files for init extenders.
+- [171d8f4e9f3a]
+-
+-2010-12-11 Phil Thompson <phil@riverbankcomputing.com>
+-
+- * siplib/voidptr.c:
+- sip.voidptr now uses PyLong_AsVoidPtr() for all versions of Python.
+- [3d4ccc59c9c3]
+-
+-2010-12-09 Phil Thompson <phil@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@riverbankcomputing.com>
+-
+- * NEWS:
+- Updated the NEWS file.
+- [ed3deec59b70] <4.11-maint>
+-
+-2010-10-09 Phil Thompson <phil@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@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@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@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@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@riverbankcomputing.com>
+-
+- * sphinx/c_api.rst:
+- A minor documentation fix.
+- [f6df40935e99] <4.11-maint>
+-
+-2010-09-24 Phil Thompson <phil@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@riverbankcomputing.com>
+-
+- * siputils.py:
+- Fixed rpaths for Qt v4.7.
+- [4d12df6526e5] <4.11-maint>
+-
+-2010-09-14 Phil Thompson <phil@riverbankcomputing.com>
+-
+- * siplib/sip.h.in:
+- Ensured that uint is always defined.
+- [b6508f053614] <4.11-maint>
+-
+-2010-09-06 Phil Thompson <phil@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@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@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@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@riverbankcomputing.com>
+-
+- * NEWS:
+- Updated the NEWS file.
+- [7cff86d70dc7]
+-
+-2010-08-20 Phil Thompson <phil@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@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@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@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@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@riverbankcomputing.com>
+-
+- * sipgen/gencode.c:
+- Fixed a code generation bug affecting inplace operators.
+- [6cddd9276220]
+-
+-2010-08-05 Phil Thompson <phil@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@riverbankcomputing.com>
+-
+- * siputils.py:
+- The build system now handles += in spec files properly.
+- [f292793d6c99] <4.10-maint>
+-
+-2010-05-28 Phil Thompson <phil@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@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@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@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@riverbankcomputing.com>
+-
+- * sphinx/using.rst:
+- Updated the PyQt example for PyQt4.
+- [275fa5a54910] <4.10-maint>
+-
+-2010-04-01 Phil Thompson <phil@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@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@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@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@riverbankcomputing.com>
+-
+- * NEWS:
+- Updated the NEWS file.
+- [752ab6580111] <4.10-maint>
+-
+-2010-02-26 Phil Thompson <phil@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@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@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@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@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@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@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@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@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@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@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@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@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@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@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@riverbankcomputing.com>
++ * Copyright (c) 2018 Riverbank Computing Limited <info@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@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@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@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@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@. 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;
++};