diff options
author | Philip Balister <philip@balister.org> | 2018-09-24 20:39:41 -0400 |
---|---|---|
committer | Khem Raj <raj.khem@gmail.com> | 2018-09-24 18:10:43 -0700 |
commit | b82388509c68df69cc0e0199774be6a51641df01 (patch) | |
tree | f977a225c12fa14042d4fa18236b92692e6ba56b /meta-oe | |
parent | 7b427e1187b3ab3ac354a8eea969b2c91a99f0fb (diff) | |
download | meta-openembedded-contrib-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>
Diffstat (limited to 'meta-oe')
-rw-r--r-- | meta-oe/recipes-devtools/sip/files/sip.patch | 31325 |
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(¤tSpec->plugins, (yyvsp[(2) - (2)].plugin).name); ++ appendString(¤tSpec->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 = ¤tSpec->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(¤tMappedType->iff->hdrcode, (yyvsp[(1) - (1)].codeb)); ++ appendCodeBlock(¤tMappedType->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(¤tMappedType->typecode, (yyvsp[(1) - (1)].codeb)); ++ appendCodeBlock(¤tMappedType->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(¤tMappedType->convfromcode, (yyvsp[(2) - (2)].codeb)); ++ appendCodeBlock(¤tMappedType->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(¤tMappedType->convtocode, (yyvsp[(2) - (2)].codeb)); ++ appendCodeBlock(¤tMappedType->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(¤tMappedType->instancecode, (yyvsp[(1) - (1)].codeb)); ++ appendCodeBlock(¤tMappedType->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(¤tModule->copying, (yyvsp[(2) - (2)].codeb)); ++ appendCodeBlock(¤tModule->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(¤tSpec->exphdrcode, (yyvsp[(2) - (2)].codeb)); ++ appendCodeBlock(¤tSpec->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(¤tModule->hdrcode, (yyvsp[(2) - (2)].codeb)); ++ appendCodeBlock(¤tModule->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(¤tModule->cppcode, (yyvsp[(2) - (2)].codeb)); ++ appendCodeBlock(¤tModule->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(¤tModule->preinitcode, (yyvsp[(2) - (2)].codeb)); ++ appendCodeBlock(¤tModule->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(¤tModule->initcode, (yyvsp[(2) - (2)].codeb)); ++ appendCodeBlock(¤tModule->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(¤tModule->postinitcode, (yyvsp[(2) - (2)].codeb)); ++ appendCodeBlock(¤tModule->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(¤tModule->unitcode, (yyvsp[(2) - (2)].codeb)); ++ appendCodeBlock(¤tModule->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(¤tModule->unitpostinccode, (yyvsp[(2) - (2)].codeb)); ++ appendCodeBlock(¤tModule->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(¤tSpec->exptypehintcode, (yyvsp[(2) - (2)].codeb)); ++ appendCodeBlock(¤tSpec->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(¤tModule->typehintcode, (yyvsp[(2) - (2)].codeb)); ++ appendCodeBlock(¤tModule->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(¤tSpec->docs, (yyvsp[(2) - (2)].codeb)); ++ appendCodeBlock(¤tSpec->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(¤tSpec->docs, (yyvsp[(2) - (2)].codeb)); ++ appendCodeBlock(¤tSpec->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(¤tSupers, 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(¤tScope()->cppcode, (yyvsp[(1) - (1)].codeb)); ++ appendCodeBlock(¤tScope()->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(¤tScope()->iff->hdrcode, (yyvsp[(1) - (1)].codeb)); ++ appendCodeBlock(¤tScope()->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; ++}; |