diff options
author | William S Fulton <wsf@fultondesigns.co.uk> | 2022-11-04 20:09:13 +0000 |
---|---|---|
committer | William S Fulton <wsf@fultondesigns.co.uk> | 2022-11-04 20:09:13 +0000 |
commit | fe2d781b422372994491d414ae64a4ea24703d8c (patch) | |
tree | 0d75c028d355450e03a2bf1dccd2874f8b2b0f30 /CHANGES | |
parent | 1f40d38e56c79d5ba7b2442033297c8095e0cbe8 (diff) | |
download | swig-fe2d781b422372994491d414ae64a4ea24703d8c.tar.gz |
Bump version to 4.2.0 and migrate CHANGES to CHANGES.current
Diffstat (limited to 'CHANGES')
-rw-r--r-- | CHANGES | 1274 |
1 files changed, 1274 insertions, 0 deletions
@@ -5,6 +5,1280 @@ See the RELEASENOTES file for a summary of changes in each release. Issue # numbers mentioned below can be found on Github. For more details, add the issue number to the end of the URL: https://github.com/swig/swig/issues/ +Version 4.1.0 (24 Oct 2022) +=========================== + +2022-10-24: wsfulton, AndLLA + [R] #2386 Fix problems in shared_ptr wrappers where the class names + were not consistent when using the shared_ptr template or the actual + underlying type. + +2022-10-24: wsfulton + [R] Add support for special variable replacement in the $typemap() + special variable macro for R specific typemaps (rtype, rtypecheck, + scoercein, scoereout). + +2022-10-24: wsfulton + [R] Polymorphism in the wrappers was only working for C++ classes, + now this works for C++ structs too. + +2022-10-19: olly + [Lua] #2126 Fix type resolution between multiple SWIG-wrapped + modules. + +2022-10-17: wsfulton + [R] #2385 Add support for std::vector<std::vector<std::string>>. + +2022-10-14: murillo128 + [Javascript] #2109 Tweak unsigned long and unsigned long long typemaps + to create a v8::Number instead of v8::Integer if the value exceeds + the size of v8::Integer. Note that the v8::Number value will be + imprecise if the value is > MAX_SAFE_INTEGER. + +2022-10-14: olly + [R] Arrange that destructors of local C++ objects in the wrapper + function get run on SWIG_fail (which calls Rf_error() which calls + longjmp()). + +2022-10-14: olly + [Lua] Arrange that destructors of local C++ objects in the wrapper + function get run on SWIG_fail (which calls lua_error() which calls + longjmp()). + +2022-10-13: wsfulton + [R] Add missing SWIGTYPE *const& typemaps for supporting pointers + by const reference. + +2022-10-10: wsfulton + #2160 Fix compile error when using templates with more than one template + parameter and used as an input parameter in a virtual method in a + director class (problem affecting most of the scripting languages). + +2022-10-10: treitmayr, wsfulton + [Python, Ruby] #1811 #1823 Fix invalid code generated in some cases when + returning a pointer or reference to a director-enabled class instance. + This previously only worked in very simple cases, now return types are + resolved to fix. A bug in template instantiations using pointers also + works now. + +2022-10-06: wsfulton + [CFFI] #1966 #2200 Remove code for Common Lisp CFFI. We dropped support + for it in SWIG 4.0.0 by disabling it as the first stage. This is the + final stage for complete removal as there has been no meaningful + progress to revive it to the status of experimental language. + +2022-10-06: olly + [Python] #2390 Remove deprecated and apparently useless defarg.swg + + The only documentation is in the file itself and describes a Python + wrapper around the C function defined here, but digging though the + git history this Python wrapper doesn't seem to have ever actually + been generated by SWIG. + + This file was also marked as deprecated in 2005. + +2022-10-06: wsfulton + [Java] #2048 Fix quoting for doxygen \image command to quote the output + file name generated into the html src attribute. + +2022-10-05: benjamin-sch + [Python] added an interpreter counter to fix deinitialization + issues if multiple subinterpreters are used + +2022-10-05: olly, wsfulton + #672 Add support for parsing C++11 final classes such as: + + class X final {}; + + This no longer gives a syntax error. + +2022-10-05: wsfulton + [OCaml] Fix %rename for enum items. Previously the rename had no effect. + +2022-10-05: olly + #1465 Report errors in preprocessor expressions by default + + Until now SWIG quietly ignored such errors unless -Wextra (or -Wall + which implies -Wextra) was passed, but this is unhelpful as it tends + to hide genuine problems. To illustrate this point, enabling this + warning by default revealed a typo in the preproc_defined.i + testcase in SWIG's own testsuite. + + If you really don't want to see this warning, you can suppress it + with command line option -w202 or by using this in your interface + file: + + %warnfilter(SWIGWARN_PP_EVALUATION); + + Both will work with older versions of SWIG too. + +2022-10-04: olly + #1050 Consistently define SWIG_VERSION both at SWIG-time and in + the generated wrapper. Best practice remains to check at SWIG-time + where possible because that results in smaller generated wrapper + sources. + + SWIGGO and SWIGJAVASCRIPT are now defined in the generated wrappers + to match behaviour for all other target languages. + + The undocumented SWIGVERSION macro is no longer defined. + +2022-09-29: olly + #2303 SWIG's internal hash tables now use a better hash function. + + The old hash function only considerd the last five characters + plus the least significant bit of the last-but-sixth character, + which as you might guess generated a lot of many-way collisions. + + This change seems to give about a 4% reduction in wallclock time + for processing li_std_list_wrap.i from the testsuite for Python. + The hash collision rate for this example drops from 39% to 0! + +2022-09-29: wsfulton + #2303 Type tables are now output in a fixed order whereas previously + the order may change with any minor input code change. This shouldn't + affect users except SWIG_TypePrettyName may output a different C/C++ + typedef to a type - it's used mostly for showing errors when the type + passed to a function is wrong. + +2022-09-29: olly + [PHP] Dynamic class properties are no longer supported by default. + + Historically PHP has supported dynamic class properties and SWIG + has implemented them too (because we implement the magic __get(), + __set() and __isset() methods we need to include explicit + handling). + + PHP 8.2 deprecates dynamic class properties - initially they'll + warn, and apparently they'll not work by default in PHP 9.0: + https://wiki.php.net/rfc/deprecate_dynamic_properties + + In PHP code dynamic properties can be enabled for a class by + marking that class with the attribute `#[AllowDynamicProperties]`. + + To follow this PHP change, in SWIG you now need to specify + `%feature("php:allowdynamicproperties", 1) Foo;` (or + `%feature("php:allowdynamicproperties", 1)` to enable it for + all wrapped classes). Unknown features are ignored, so you can add + it unconditionally and it'll work with older SWIG too. + + *** POTENTIAL INCOMPATIBILITY *** + +2022-09-19: wsfulton + #1484 Fixes for class inheritance with the same name in different namespaces + such as: + + namespace A { class Bar {}; } + namespace B { template<typename T, typename U> class Bar : public A::Bar {}; } + +2022-09-19: wsfulton + #2316 Remove swig.spec file and srcrpm makefile target. These are very out of date + and don't seem to be used by RPM based Linux distributions which have their + own version of swig.spec. + +2022-09-17: wsfulton + [Go, Guile, Racket, Scilab] Add throws typemaps for std::string so that thrown + string exception messages can be seen. + +2022-09-17: wsfulton + [Racket] Add throws typemaps for char * so that thrown string exception + messages can be seen from Racket. + +2022-09-17: wsfulton + [Javascript, Octave, R] Improve exceptions for %catches and exception + specifications for native types. String exception messages are shown as + the exception message instead of just the type of the exception. + +2022-09-17: wsfulton + Add missing typecheck typemaps for std::auto_ptr and std::unique_ptr to + fix overloading when using these types. + +2022-09-17: wsfulton + [Guile] Add error checking to SWIGTYPE and SWIGTYPE & in typemaps to prevent + seg faults when passing #nil to these parameter types. + +2022-09-16: wsfulton + #999 Provide SWIGTYPE MOVE typemaps in swigmove.i for implementing full + move semantics when passing parameters by value. + +2022-08-31: wsfulton + #999 Improve move semantics when using rvalue references. + The SWIGTYPE && input typemaps now assume the object has been moved. + + These typemaps have been changed assuming that after the function call, + the rvalue reference parameter has been moved. The parameter's proxy class + that owns the C++ object thus has the underlying pointer set to null + so that the (moved from, but still valid) C++ object cannot be used again + and the object is additionally deleted. + + *** POTENTIAL INCOMPATIBILITY *** + +2022-08-28: wsfulton + [Octave] SWIG now marshals a C/C++ NULL pointer into the null matrix, []. + SWIG has always marshalled the null matrix into a NULL pointer; this remains + and now we have consistency in representing a NULL pointer. + +2022-08-26: wsfulton + [Racket] SWIG now marshals a C/C++ NULL pointer into a null value by calling + scheme_make_null(), so that scheme's null? is true for a NULL C/C++ pointer value. + +2022-08-18: wsfulton + [Racket] Add support for std::unique_ptr in std_unique_ptr.i. + Add support for std::auto_ptr in std_auto_ptr.i. + +2022-08-13: wsfulton + [Guile] Add support for std::unique_ptr in std_unique_ptr.i. + Add support for std::auto_ptr in std_auto_ptr.i. + +2022-08-11: wsfulton + [Lua] Add support for std::unique_ptr in std_unique_ptr.i. + Add support for std::auto_ptr in std_auto_ptr.i. + +2022-08-05: wsfulton + [D] Fix occasional undefined behaviour with inheritance hierarchies, particularly + when using virtual inheritance as the pointers weren't correctly upcast from derived + class to base class when stored in the base's proxy class. + +2022-08-05: wsfulton + [D] Add support for std::unique_ptr in std_unique_ptr.i. + Add support for std::auto_ptr in std_auto_ptr.i. + +2022-08-03: wsfulton + [Javascript] Add support for std::unique_ptr in std_unique_ptr.i. + Add support for std::auto_ptr in std_auto_ptr.i. + +2022-08-02: wsfulton + [Octave] Add support for std::unique_ptr in std_unique_ptr.i. + Add support for std::auto_ptr in std_auto_ptr.i. + +2022-08-01: wsfulton + [Python] Add initialisers for additional members in PyHeapTypeObject + (builtin mode) for Python-3.11 - _ht_tpname, _spec_cache. + +2022-07-30: wsfulton + C++20 has deprecated std::basic_string<>::reserve() and the C++11 method + std::basic_string<>::shrink_to_fit() is a replacement that can be used. + std_string.i and std_wstring.i provided wrappers for reserve with the following + template instantiations: + + %template(string) std::basic_string<char>; + %template(wstring) std::basic_string<wchar_t>; + + The reserve method is no longer wrapped, however the shrink_to_fit() method + can be used as an alternative from the target language (the generated wrappers + call reserve() instead if C++<=20). + + Note that std::basic_string<>::reserve(size_t n) is still wrapped unchanged. + + *** POTENTIAL INCOMPATIBILITY *** + +2022-07-30: wsfulton + [Tcl] Add support for std::unique_ptr in std_unique_ptr.i. + Add support for std::auto_ptr in std_auto_ptr.i. + +2022-07-27: ZackerySpytz, olly + #1678 Support parsing C++20 templated lambdas. + +2022-07-27: ZackerySpytz, olly + #1622 Add support for the C++20 spaceship operator (<=>). + +2022-07-26: olly + [Tcl] https://sourceforge.net/p/swig/bugs/977/ + Fix handling of long long on 32-bit platforms. This fix raises + SWIG's minimum supported Tcl version to 8.4.0 (which was released + just under 20 years ago). + +2022-07-26: olly + Fix incorrect operator precedence in preprocessor expressions. + +2022-07-25: olly + Support for C++14 binary integer literals in preprocessor expressions. + +2022-07-20: wsfulton + [C#, Java] Ensure the order of interfaces generated in proxy interfaces for the + %interface family of macros is the same as that parsed from the bases in C++. + +2022-07-20: jicks, Ingener74, olly + #422 [Python] Fix mishandling of a Python class inheriting from + multiple SWIG-wrapped director classes. + +2022-07-19: wsfulton + #692 [C#, Java, Perl, Python, Ruby] std::unique_ptr and std::auto_ptr typemaps + provided for inputs types in std_unique_ptr.i and std_auto_ptr.i. + + Now these smart pointers can be used as input parameters to functions. A proxy + class instance transfers memory ownership of the underlying C++ object from the + proxy class to a smart pointer instance passed to the wrapped function. + +2022-07-19: jschueller + [Python] #2314 Drop support for Python 3.2. + +2022-07-19: olly + Remove remaining support code for classic macos, which has not been + supported by Apple for over 20 years now. + +2022-07-12: wsfulton + #999 Performance optimisation for parameters passed by value that are C++11 movable. + The C++ wrappers create a temporary variable for a parameter to be passed to a + function. This is initially default constructed and then copy assigned from the + instance being passed in from the target language. This is unchanged, however, + when the temporary variable is passed to the wrapped function, it is now done using + std::move. If the type is move constructible, the move constructor will be used + instead of the copy constructor. + +2022-07-12: wsfulton + [Perl] Add std::auto_ptr support in std_auto_ptr.i library file. + +2022-07-12: erezgeva + [Perl] Add std::unique_ptr support in std_unique_ptr.i library file. + +2022-07-07: jmarrec + #1158 #2286 Add basic support for C++11 attributes. These are now + crudely ignored by SWIG's parser's tokeniser, which is better that + failing with a parse error. + +2022-07-05: ianlancetaylor + [Go] #2245 Handle NULL pointers for string* conversions. + Rearrange generation of director methods and rename + receiver argument from p to swig_p. + +2022-07-03: wsfulton + #999 Performance optimisation for directors for classes passed by value. The directorin + typemaps in the director methods now use std::move on the input parameter when + copying the object from the stack to the heap prior to the callback into the target + language, thereby taking advantage of move semantics if available. + +2022-07-02: wsfulton + #1722 [C#, Java, Python, Ruby] Add std::unique_ptr support. Ported from std::auto_ptr. + Use the %unique_ptr(T) macro as follows for usage std::unique_ptr<T>. For example, for + a class called Klass: + + %include "std_unique_ptr.i" + %unique_ptr(Klass) + + Support is currently limited to only returning a std::unique_ptr from a function. + +2022-06-29: wsfulton + #999 #1044 Enhance SWIGTYPE "out" typemaps to use std::move when copying + objects, thereby making use of move semantics when wrapping a function returning + by value if the returned type supports move semantics. + + Wrapping functions that return move only types 'by value' now work out the box + without having to provide custom typemaps. + + The implementation removed all casts in the "out" typemaps to allow the compiler to + appropriately choose calling a move constructor, where possible, otherwise a copy + constructor. The implementation also required modifying SwigValueWrapper to + change a cast operator from: + + SwigValueWrapper::operator T&() const; + + to + + #if __cplusplus >=201103L + SwigValueWrapper::operator T&&() const; + #else + SwigValueWrapper::operator T&() const; + #endif + + This is not backwards compatible for C++11 and later when using the valuewrapper feature + if a cast is explicitly being made in user supplied "out" typemaps. Suggested change + in custom "out" typemaps for C++11 and later code: + + 1. Try remove the cast altogether to let the compiler use an appropriate implicit cast. + 2. Change the cast, for example, from static_cast<X &> to static_cast<X &&>, using the + __cplusplus macro if all versions of C++ need to be supported. + + *** POTENTIAL INCOMPATIBILITY *** + +2022-06-15: wsfulton + #2039 Add move assignment operator to SwigValueWrapper used by the + valuewrapper feature. + +2022-06-04: sethrj + Enhance $typemap to support typemap attributes. + + $typemap(method:attribute, typepattern) + + For example: + + %typemap(cstype, out="object") XClass "XClass" + %typemap(cscode) BarClass %{ + $typemap(cstype:out, XClass) bar() { + return null; + } + + which expands to + + object bar() { + return null; + } + +2022-05-30: wsfulton + [C#, D] Add new special variable expansion: $imfuncname. + Expands to the function name called in the intermediary class. + +2022-05-30: LindleyF + [Java] #2042 Add new special variable expansion: $imfuncname. + Expands to the function name called in the intermediary class. + +2022-05-28: jkuebart + [Java] On some versions of Android, specifically Android 6, + detaching the current thread from the JVM after every invocation + causes a memory leak. + + Offer SWIG_JAVA_DETACH_ON_THREAD_END to configure a behaviour + where the JVM is only detached in the thread destructor. + + See https://developer.android.com/training/articles/perf-jni#threads. + +2022-05-27: xypron + [Python] #2277 Define PY_SSIZE_T_CLEAN macro before #include "Python.h" as + recommended in Python 3.7 and later. + + To avoid this macro definition, add the following to your interface file so + that SWIG_NO_PY_SSIZE_T_CLEAN is defined at the beginning of the C++ wrappers: + + %begin %{ + #define SWIG_NO_PY_SSIZE_T_CLEAN + %} + +2022-05-26: rokups + [C#] #1323 Modify SwigDerivedClassHasMethod for a more efficient director + implementation when calling virtual methods that are not overridden. + +2022-05-15: erezgeva, eiselekd + [Lua, Perl, Octave, PHP, Tcl] #2275 #2276 #2283 Add argcargv.i library containing + (int ARGC, char **ARGV) multi-argument typemaps. + + Document this library in Typemaps.html. + +2022-05-07: KrisThielemans + [Python] Fix "too many initializers for 'PyHeapTypeObject'" errors + using PyPy 3.8 and later. + +2022-05-04: wsfulton + [C#] Add C# wchar_t * director typemaps + +2022-04-20: cminyard + Fix an issue where newlines were not properly generated + for godirectorin typemaps. If you have a virtual function + not assigned to zero, in some cases it won't generate a + newline and you will see errors: + example.go:1508:3: expected ';', found swig_r + when compiling the go code. + + Also add an example of using goin and godirectorin and add + a test for this situation. + +2022-04-29: jason-daly, JerryJoyce, wsfulton + [C#] #1233 Add wchar_t * and std::wstring Unicode string support on Linux. + +2022-04-11: robinst + #2257 Fix new Ruby 3.2 warning "undefining the allocator of T_DATA + class swig_runtime_data". + +2022-04-07: olly + #1750 SWIG now recognises and ignores Doxygen group commands `@{` and `@}`. + +2022-04-06: wsfulton + ./configure now enables C++11 and later C++ standards testing by default (when + running: 'make check'). + + The options to control this testing are the same: + + ./configure --enable-cpp11-testing + ./configure --disable-cpp11-testing + + But the former is now the default and the latter can be used to turn off C++11 and + later C++ standards testing. + +2022-04-06: wsfulton + [Python] #1635 The "autodoc" feature no longer overrides Doxygen comments + in the generated docstring. + + If a "docstring" feature is present it will still override a Doxygen comment. + If the "autodoc" feature is also present, the combined "autodoc" and "docstring" + will override the Doxygen comment. If no "docstring" is present then the + "autodoc" feature will not be generated when there is a Doxygen comment. + + This way the "autodoc" feature can be specified and used to provide documentation + for 'missing' Doxygen comments. + + *** POTENTIAL INCOMPATIBILITY *** + +2022-04-01: olly + Remove undocumented and non-functional -browse command line option. + +2022-03-26: eltoder + [Python] #1684 Use different capsule names with and without -builtin + + Types generated with and without -builtin are not compatible. Mixing + them in a common type list leads to crashes. Avoid this by using + different capsule names: "type_pointer_capsule" without -builtin and + "type_pointer_capsule_builtin" with. + +2022-03-25: wsfulton + The debug command line options that display parse tree nodes + (-debug-module, -debug-top, -debug-symtabs) now display previously hidden + linked list pointers which are useful for debugging parse trees. + + Added new command line option -debug-quiet. This suppresses the display + of most linked list pointers and symbol table pointers in the parse tree nodes. + + The keys in the parse tree node are now shown in alphabetical order. + +2022-03-24: wsfulton + #2244 Fix using declaration in derived class bugs when all the base + class's overloaded methods were overridden in the derived class - + fixes "multiply defined" errors. + +2022-03-23: wsfulton + [Python] #1779 The -py3 option is deprecated and now has no effect on the + code generated. Use of this option results in a deprecated warning. + The related SWIGPYTHON_PY3 macro that this option defined is no longer generated. + + Note that %pythonnondynamic feature generates a metaclass that works on both + Python 2 and Python 3. + +2022-03-21: wsfulton + [Python] #1779 pyabc.i for abstract base classes now supports versions of + Python prior to 3.3 by using the collection module for these older versions. + Python-3.3 and later continue to use the collections.abc module. + The -py3 option no longer has any effect on the %pythonabc feature. + +2022-03-21: jschueller, jim-easterbrook, wsfulton + [Python] #2137 C++ static member functions no longer generate a "flattened" + name in the Python module. For example: + + s = example.Spam() + s.foo() # Spam::foo() via an instance + example.Spam.foo() # Spam::foo() using class method + example.Spam_foo() # Spam::foo() "flattened" name + + The "flattened" name is no longer generated, but can be generated + by using the new -flatstaticmethod option. + + *** POTENTIAL INCOMPATIBILITY *** + +2022-03-18: ianlancetaylor + [Go] #337 Implement %extend base methods in child classes. + +2022-03-17: olly + [Python] #1779 SWIG's Python test-suite and examples are now + run with Python 3 by default. To run them with Python 2, set + PY2 to a non-empty value, e.g.: + + make check-python-test-suite PY2=1 + +2022-03-16: olly + [Go] #683 -intgosize is now optional - if not specified the + generated C/C++ wrapper code will use ptrdiff_t for intgo and + size_t for uintgo. + +2022-03-15: ianlancetaylor + [Go] Add typemaps for std::string*. + +2022-03-15: ianlancetaylor + [Go] Don't convert arrays to pointers if there is a "gotype" + typemap entry. + +2022-03-15: ianlancetaylor + [Go] Add documentation note about Go and C++ exceptions. + +2022-03-12: wsfulton + #1524 %interface family of macros no longer contain the getter/setter + methods for wrapping variables. The interface only contains + virtual and non-virtual instance methods, that is, no static methods. + Enums are also no longer added to the interface (affects Java only where + they were missing from the proxy class, C# never had them in the interface). + + *** POTENTIAL INCOMPATIBILITY *** + +2022-03-12: wsfulton + #1277 Fixes for the family of %interface macros, %interface, + %interface_impl and %interface_custom fixes for overloaded methods + in an inheritance chain. + + When C++ methods are not able to be overloaded in a derived class, + such as when they differ by just const, or the target language + parameters types are identical even when the C++ parameter types + are different, SWIG will ignore one of the overloaded methods with + a warning. A %ignore is required to explicitly ignore one of the + overloaded methods to avoid the warning message. Methods added + in the derived classes due to one of the %interface macros are now + similarly ignored/not added to the derived class. + + The methods added to the derived classes can now also be modified + via %feature and %rename. + +2022-03-08: ianlancetaylor + [Go] Treat a nil argument as a NULL pointer. + +2022-03-08: ianlancetaylor + [Go] Add documentation notes about thread local storage. + +2022-03-08: olly + #1006 SWIG now copes with an interface filename specified on the + command line which contains a closing parenthesis `)`, and more + generally with attributes to `%include` and `%import` which + are quoted and contain parentheses. + +2022-03-07: Omar Medina + [Tcl] https://sourceforge.net/p/swig/bugs/1290/ + Fix SWIG_AsWCharPtrAndSize() to actually assign to result + variable. It looks like SWIG/Tcl wide character handling is + currently fundamentally broken except on systems which use wide + characters as the system encoding, but this should fix wrapping + functions which take a wide string as a parameter on Microsoft + Windows. + +2022-03-07: olly + [Javascript] #682 Fix handling of functions which take void*. + +2022-03-06: olly + SWIG should now reliably exit with status 0 if the run was + successful and status 1 if there was an error (or a warning and + -Werror was in effect). + + Previously in some situations SWIG would try to exit with the + status set to the number of errors encountered, but that's + problematic - for example if there were 256 errors this would + result in exit status 0 on most platforms. Also some error + statuses have special meanings e.g. those defined by <sysexits.h>. + Also SWIG/Javascript tried to exit with status -1 in a few places + (which typically results in exit status 255). + +2022-03-05: wsfulton + #1441 Fix using declaration in derived class incorrectly introducing a method + from a base class when the using declaration is declared before the method + declaration. Problem occurred when within a namespace and the parameter types + in the method signatures were not fully qualified. +2022-03-05: ianlancetaylor + [Go] Treat non-const references as pointers. + +2022-03-05: ianlancetaylor + In SWIG Go testsuite, fail test if "go build" fails. + +2022-03-03: olly + #1901 #2223 SWIG should now always exit cleanly if memory + allocation fails, including removing any output files created + during the current run. + + Previously most places in the code didn't check for a NULL return + from malloc()/realloc()/calloc() at all, typically resulting in + undefined behaviour; some places used assert() to check for a NULL + return (which is a misuse of assert() and such checks disappear if + built with NDEBUG defined leaving us back with undefined + behaviour). + +2022-03-03: olly + #891 Report errors for typemap attributes without a value + (previously SWIG segfaulted) and for typemap types with a value + (previously the value was quietly ignored). + + The old way of specifying a language name in the typemap attributes + is no longer supported (it has been deprecated for 16 years). + +2022-03-02: geographika, wsfulton + [Python] #1951 Add Python variable annotations support. + + Both function annotations and variable annotations are turned on using the + "python:annotations" feature. Example: + + %feature("python:annotations", "c"); + + struct V { + float val; + }; + + The generated code contains a variable annotation containing the C float type: + + class V(object): + val: "float" = property(_example.V_val_get, _example.V_val_set) + ... + + Python 3.5 and earlier do not support variable annotations, so variable + annotations can be turned off with a "python:annotations:novar" feature flag. + Example turning on function annotations but not variable annotations globally: + + %feature("python:annotations", "c"); + %feature("python:annotations:novar"); + + or via the command line: + + -features python:annotations=c,python:annotations:novar + + *** POTENTIAL INCOMPATIBILITY *** + +2022-02-27: wsfulton + [Python] #735 #1561 Function annotations containing C/C++ types are no longer + generated when using the -py3 option. Function annotations support has been + moved to a feature to provide finer grained control. It can be turned on + globally by adding: + + %feature("python:annotations", "c"); + + or by using the command line argument: + + -features python:annotations=c + + Also see entry dated 2022-03-02, regarding variable annotations. + + *** POTENTIAL INCOMPATIBILITY *** + +2022-02-26: wsfulton + #655 #1840 Add new warning WARN_LANG_USING_NAME_DIFFERENT to warn when a + method introduced by a using declaration in a derived class cannot + be used due to a conflict in names. + +2022-02-24: olly + #1465 An invalid preprocessor expression is reported as a pair of + warnings with the second giving a more detailed message from the + expression evaluator. Previously SWIG prefixed the second message + with "Error:" - that was confusing as it's actually only a warning + by default so we've now dropped this prefix. + + Before: + + x.i:1: Warning 202: Could not evaluate expression '1.2' + x.i:1: Warning 202: Error: 'Floating point constant in preprocessor expression' + + Now: + + x.i:1: Warning 202: Could not evaluate expression '1.2' + x.i:1: Warning 202: Floating point constant in preprocessor expression + +2022-02-23: olly + #1384 Fix a preprocessor expression evaluation bug. A + subexpression in parentheses lost its string/int type flag and + instead used whatever type was left in the stack entry from + previous use. In practice we mostly got away with this because + most preprocessor expressions are integer, but it could have + resulted in a preprocessor expression incorrectly evaluating as + zero. If -Wextra was in use you got a warning: + + Warning 202: Error: 'Can't mix strings and integers in expression' + +2022-02-21: davidcl + [Scilab] Improve 5.5.2, 6.0.0 and 6.1.0 support. + + For Scilab 5, long names are reduced to small names preserving the + class prefix and accessor suffix (get or set). + + For Scilab 6, long names with the class prefix and accessor suffix + should be used on the user code. + + The `-targetversion` option has been removed as the generated code + now detects the Scilab version in loader.sce or builder.sce. + + *** POTENTIAL INCOMPATIBILITY *** + +2022-02-20: wsfulton + Fix %warnfilter warning suppress for warning 315 SWIGWARN_PARSE_USING_UNDEF. + +2022-02-17: olly + [PHP] https://sourceforge.net/p/swig/bugs/1211/ + Fix to call cleanup code in exception situations and not to invoke + the freearg typemap twice in certain situations. + +2022-02-15: olly + #300 #368 Improve parser handling of % followed immediately by + an identifier. If it's not a recognised directive the scanner + now emits MODULO and then rescans what follows, and if the parser + then gives a syntax error we report it as an unknown directive. + This means that `a%b` is now allowed in an expression, and that + things like `%std::vector<std::string>` now give an error rather + than being quietly ignored. + +2022-02-11: adr26 + [Python] #2154 Fix memory leak. + + SWIG python objects were being freed after the corresponding SWIG + module information was destroyed in Python 3, causing leaks when as + a result the object destructor could not be invoked. To prevent this + misordering, SWIG python objects now obtain a reference to the + Python capsule wrapping the module information, so that the module + information is correctly destroyed after all SWIG python objects + have been freed (and corresponding destructors invoked). + +2022-02-10: olly + [Tcl] https://sourceforge.net/p/swig/bugs/1207/ + https://sourceforge.net/p/swig/bugs/1213/ + + Fix Tcl generic input typemap for std::vector. + +2022-02-07: sethrj + #2196 Add alternative syntax for specifying fragments in typemaps. + + New syntax: + %typemap("in", fragment="frag1", fragment="frag2", fragment="frag3") {...} + which is equivalent to: + %typemap(in, fragment="frag1,frag2,frag3") {...} + + +2022-02-07: olly + #1806 Remove support for the "command" encoder, which was mostly + intended for use in `%rename` - most uses can be achieved using + the "regex" encoder, so we recommend using that instead. + + The "command" encoder suffers from a number of issues - as the + documentation for it admitted, "[it] is extremely slow compared to + all the other [encoders] as it involves spawning a separate process + and using it for many declarations is not recommended" and that it + "should generally be avoided because of performance + considerations". + + But it's also not portable. The design assumes that `/bin/sh` + supports `<<<` but that's a bash-specific feature so it doesn't + work on platforms where `/bin/sh` is not bash - it fails on + Debian, Ubuntu and probably some other Linux distros, plus most + non-Linux platforms. Microsoft Windows doesn't even have a + /bin/sh as standard. + + Finally, no escaping of the passed string is done, so it has + potential security issues (though at least with %rename the input + is limited to valid C/C++ symbol names). + +2022-02-06: olly + #2193 -DFOO on the SWIG command line now sets FOO to 1 for + consistency with C/C++ compiler preprocessors. Previously + SWIG set FOO to an empty value. + + Existing invocations of SWIG with `-DFOO` where the empty value + matters can be updated to `-DFOO=` which should work with both + old and new releases of SWIG. + + *** POTENTIAL INCOMPATIBILITY *** + +2022-02-06: sethrj + #2194 Classes that are non-assignable due to const data or const + reference members are now automatically detected. + +2022-02-04: friedrichatgc + [Octave] #1672 Fix for isobject for Octave 4.4 - 6.0. + +2022-02-03: olly + [C#] #283 #998 Fix memory leak in directorin typemap for + std::string. + +2022-02-03: olly + [Python] #967 Make `self` parameter available to user typemaps. + +2022-02-03: teythoon + [Python] #801 Fix -Wunused-parameter warnings with builtin, + +2022-02-03: teythoon + #801 Fix -Wstrict-prototypes warnings in generated pointer + functions. + +2022-02-03: olly + #660 https://sourceforge.net/p/swig/bugs/1081/ + Default parameter values containing method calls are now parsed and + handled - e.g. `x->foo(3,4)` and `y.z()`. + +2022-02-02: olly + [Ruby] https://sourceforge.net/p/swig/bugs/1136/ Fix remove of prefix + from method name to only remove it at the start. + +2022-02-01: olly + #231 Handle returning an object by reference in a C++ trailing + return type. + +2022-02-01: davidcl + [Scilab] #745 use SWIG_<module>_Init() as a C module init function. + +2022-02-01: olly + [OCaml] #2083 Fix to work when CAML_SAFE_STRING is on, which it is + by default in recent Ocaml releases. + +2022-01-31: mreeez + https://sourceforge.net/p/swig/bugs/1147/ + Fix copyToR() generated for a struct in a namespace. + +2022-01-29: fschlimb + #655 Better handling of using declarations. + +2022-01-29: dontpanic92 + [Go] #676 Fix code generated for a C++ class with a non-capitalised + name. + +2022-01-26: trex58 + #1919 #1921 #1923 Various fixes for AIX portability. + +2022-01-26: olly + #1935 Don't crash on an unclosed HTML tag in a doxygen comment + when -doxygen is specified. + +2022-01-25: olly + Constant expressions now support member access with `.` such as + `foo.bar`. Previous this only worked in a case like `x->foo.bar`. + +2022-01-25: olly + #2091 Support most cases of `sizeof` applied to an expression + in constant expressions. Previously there was only support for + `sizeof(<type>)` and expressions which syntactically look like a + type (such as `sizeof(foo)`). + +2022-01-25: olly + #80 #635 https://sourceforge.net/p/swig/bugs/1139/ + Add support for parsing common cases of `<` and `>` comparisons + in constant expressions. Adding full support for these seems hard + to do without introducing conflicts into the parser grammar, but in + fact all reported cases have had parentheses around the comparison + and we can support that with a few restrictions on the left side of + `<`. + +2022-01-25: wsfulton + New warning 327 for extern templates, eg: + + extern template class std::vector<int>; + extern template void Func<int>(); + + results in warning + + example.i:3: Warning 327: Extern template ignored. + example.i:4: Warning 327: Extern template ignored. + + Extern template classes previously resulted in warning 320. + +2022-01-24: romintomasetti + #2131 #2157 C++11 extern function template parsing error fix. + +2022-01-21: wsfulton + #2120 #2138 Replace legacy PCRE dependency with PCRE2. + This requires changes for building SWIG from source. See updated + html documentation in Preface.html and Windows.html. Updated + instructions are also shown when running ./configure if PCRE2 is not + found. Note that debian based systems can install PCRE2 using: + + apt install libpcre2-dev + + Note that https://github.com/swig/swig/wiki/Getting-Started also has + updated information for building from source. + +2022-01-19: olly + [PHP] #2027 Automatically generate PHP type declarations for PHP 8. + The generate code still compiles for PHP 7.x, but without type + declarations since PHP 7.x has much more limited type declaration + support. + +2022-01-18: olly + [Perl] #1629 Perl 5.8.0 is now the oldest version we aim to support. + +2022-01-14: wsfulton + [Python] Fix %callback and specifying the callback function as a + static member function using Python staticmethod syntax, such as + Klass.memberfunction instead of Klass_memberfunction when using + -builtin and -fastproxy. + +2022-01-11: wsfulton + [Python] Accept keyword arguments accessing static member functions when + using -builtin and kwargs feature and Python class staticmethod syntax. + The missing keyword argument support was only when using the + class staticmethod syntax, such as Klass.memberfunction, and not when + using the flat static method syntax, such as Klass_memberfunction. + +2022-01-04: juierror + [Go] #2045 Add support for std::array in std_array.i. + +2021-12-18: olly + [PHP] Add PHP keyword 'readonly' (added in 8.1) to the list SWIG + knows to automatically rename. This keyword is special in that PHP + allows it to be used as a function (or method) name. + +2021-12-07: vstinner + [Python] #2116 Python 3.11 support: use Py_SET_TYPE() + +2021-12-05: rwf1 + [Octave] #2020 #1893 Add support for Octave 6 up to and including 6.4. + Also add support for compiling with -Bsymbolic which is used by default + by mkoctfile. + +2021-12-02: jsenn + [Python] #2102 Fixed crashes when using embedded Python interpreters. + +2021-11-12: wsfulton + [Javascript] v8 and node only. Fix mismatched new char[] and free() + when wrapping C code char arrays. Now calloc is now used instead of + new char[] in SWIG_AsCharPtrAndSize. + +2021-10-03: ajrh1 + [Perl] #2074: Avoid -Wmisleading-indentation in generated code + when using gcc11. + +2021-10-03: jschueller + [CMake] #2065: Add option to enable or disable PCRE support. + +2021-09-16: ianlancetaylor + [Go] Improved _cgo_panic implementation. + +2021-09-16: ianlancetaylor + [Go] Don't use crosscall2 for panicking. Instead rely on documented + and exported interfaces. + +2021-09-14: ianlancetaylor + [Go] Remove -no-cgo option (long unsupported in Go) + +2021-05-04: olly + [PHP] #2014 Throw PHP exceptions instead of using PHP errors + + PHP exceptions can be caught and handled if desired, but if they + aren't caught then PHP exits in much the same way as it does for a + PHP error. + + In particular this means parameter type errors and some other cases + in SWIG-generated wrappers now throw a PHP exception, which matches + how PHP's native parameter handling deals with similar situations. + + `SWIG_ErrorCode()`, `SWIG_ErrorMsg()`, `SWIG_FAIL()` and `goto thrown;` + are no longer supported (these are really all internal implementation + details and none are documented aside from brief mentions in CHANGES + for the first three). I wasn't able to find any uses in user interface + files at least in FOSS code via code search tools. + + If you are using these: + + Use `SWIG_PHP_Error(code,msg);` instead of `SWIG_ErrorCode(code); + SWIG_ErrorMsg(msg);` (which will throw a PHP exception in SWIG >= 4.1 + and do the same as the individual calls in older SWIG). + + `SWIG_FAIL();` and `goto thrown;` can typically be replaced with + `SWIG_fail;`. This will probably also work with older SWIG, but + please test with your wrappers if this is important to you. + + *** POTENTIAL INCOMPATIBILITY *** + +2021-05-17: adr26 + [Python] #1985 Fix memory leaks: + + 1. Python object references were being incorrectly retained by + SwigPyClientData, causing swig_varlink_dealloc() never to run / free + memory. SwigPyClientData_New() / SwigPyClientData_Del() were updated + to fix the object reference counting, causing swig_varlink_dealloc() + to run and the memory swig_varlink owns to be freed. + + 2. SwigPyClientData itself was not freed by SwigPyClientData_Del(), + causing another heap leak. The required free() was added to + SwigPyClientData_Del() + + 3. Fix reference counting/leak of python cached type query + + 4. Fix reference counting/leak of SwigPyObject dict (-builtin) + + 5. Python object reference counting fixes for out-of-memory + scenarios were added to: SWIG_Python_RaiseOrModifyTypeError(), + SWIG_Python_AppendOutput(), SwigPyClientData_New(), + SwigPyObject_get___dict__() and SwigPyObject_format() + + 6. Add error handling for PyModule_AddObject() to + SWIG_Python_SetModule() (failure could be caused by OOM or a name + clash caused by malicious code) + +2021-05-13: olly + [UFFI] #2009 Remove code for Common Lisp UFFI. We dropped support + for it in SWIG 4.0.0 and nobody has stepped forward to revive it in + over 2 years. + +2021-05-13: olly + [S-EXP] #2009 Remove code for Common Lisp S-Exp. We dropped + support for it in SWIG 4.0.0 and nobody has stepped forward to + revive it in over 2 years. + +2021-05-13: olly + [Pike] #2009 Remove code for Pike. We dropped support for it in + SWIG 4.0.0 and nobody has stepped forward to revive it in over 2 + years. + +2021-05-13: olly + [Modula3] #2009 Remove code for Modula3. We dropped support for it + in SWIG 4.0.0 and nobody has stepped forward to revive it in over 2 + years. + +2021-05-13: olly + [CLISP] #2009 Remove code for GNU Common Lisp. We dropped support + for it in SWIG 4.0.0 and nobody has stepped forward to revive it in + over 2 years. + +2021-05-13: olly + [Chicken] #2009 Remove code for Chicken. We dropped support for it + in SWIG 4.0.0 and nobody has stepped forward to revive it in over 2 + years. + +2021-05-13: olly + [Allegrocl] #2009 Remove code for Allegro Common Lisp. We dropped + support for it in SWIG 4.0.0 and nobody has stepped forward to + revive it in over 2 years. + +2021-05-04: olly + [PHP] #1982 #1457 https://sourceforge.net/p/swig/bugs/1339/ + SWIG now only use PHP's C API to implement its wrappers, and no + longer generates PHP code to define classes. The wrappers should + be almost entirely compatible with those generated before, but + faster and without some previously hard-to-fix bugs. + + The main notable difference is SWIG no longer generates a .php + wrapper at all by default (only if %pragma(php) code=... or + %pragma(php) include=... are specified in the interface file). + This also means you need to load the module via extension=... + in php.ini, rather than letting the dl() in the generated + .php wrapper load it (but dl() has only worked for command-line + PHP for some years now). + + *** POTENTIAL INCOMPATIBILITY *** + +2021-04-30: olly + #1984 Remove support for $source and $target. + These were officially deprecated in 2001, and attempts to use them have + resulted in a warning (including a pointer to what to update them to) + for most if not all of that time. + +2021-04-27: wsfulton + #1987 [Java] Fix %interface family of macros for returning by const + pointer reference. + +2021-04-19: olly + Fix use of uninitialised variable in the generated code for an + empty typecheck typemap, such as the dummy one we include for + std::initializer_list. + +2021-04-12: olly + #1777 [Python] Specifying -py3 now generates a check for Python + version >= 3.0. + +2021-03-26: olly + [PHP] Add PHP keywords 'fn' (added in 7.4) and 'match' (added in + 8.0) to the list SWIG knows to automatically rename. + +2021-03-23: wsfulton + #1942 [Python] Fix compilation error in wrappers when using -builtin + and wrapping varargs in constructors. + +2021-03-22: goto40 + #1977 Fix handling of template template parameters. + +2021-03-21: olly + #1929, #1978 [PHP] Add support for PHP 8. + +2021-03-19: wsfulton + #1610 Remove -ansi from default compilation flags. + +2021-03-19: dot-asm + #1934 [Java] Clean up typemaps for long long arrays. + +2021-03-19: olly + #1527 [PHP] Improve PHP object creation in directorin case. + Reportedly the code we were using in this case gave segfaults in + PHP 7.2 and later - we've been unable to reproduce these, but the + new approach is also simpler and should be bit faster too. + +2021-03-18: olly + #1655 [PHP] Fix char* typecheck typemap to accept PHP Null like the + corresponding in typemap does. + +2021-03-18: olly + #1900, #1905 [PHP] Fix wrapping of overloaded directed methods with + non-void return. + +2021-03-11: murillo128 + #1498 [Javascript] Support type conversion. + +2021-03-06: nshmyrev + #872 [Javascript] Various typemap issues in arrays_javascript.i fixed. + +2021-03-03: vaughamhong + #577 [Javascript] Implemented SetModule/GetModule for JSC to allow type sharing + across modules. + +2021-03-01: xantares, Oliver Buchtala, geographika + #1040 Add support for building SWIG with CMake. See documentation in Windows.html. + +2021-03-01: vadz + #1952 Fix incorrect warning "Unknown Doxygen command: ." + +2021-02-28: p2k + #969 [Javascript] v8/node - prevent crash calling a constructor without new keyword. + +2021-02-28: alecmev + #405 #1121 [Javascript] Fix OUTPUT typemaps on methods that don't return void. + The output value is appended to the return value. + +2021-02-26: murillo128, wsfulton + #1269 [Javascript] Fix handling of large positive unsigned long and + unsigned long long values. + +2021-02-24: tomleavy, yegorich, tungntpham + #1746 [Javascript] Add support for Node v12, v14 and v16. + SWIG support for Node is now for v6 and later only. + +2020-02-09: ZackerySpytz + #1872 Fix typos in attribute2ref macros. + +2020-10-10: wsfulton + [Javascript] Fix so that ccomplex.i interface to file can be used. + +2020-10-10: wsfulton + #252 complex can now be used as a C identifier and doesn't give a syntax error. + +2020-10-10: lpsinger + #1770 Correct C complex support. + _Complex is now parsed as a keyword rather than complex as per the C99 standard. + The complex macro is available in the ccomplex.i library file along with other + complex number handling provided by the complex.h header. + +2020-10-07: ZackerySpytz + [Python] #1812 Fix the error handling for the PyObject_GetBuffer() calls in + pybuffer.i. + +2020-10-07: treitmayr + #1824 Add missing space in director method declaration returning + const pointer. + +2020-10-07: adelva1984 + #1859 Remove all (two) exceptions from SWIG executable. + +2020-09-25: wsfulton + [C#, Java] #1874 Add ability to change the modifiers for the interface + generated when using the %interface macros. + + For C# use the 'csinterfacemodifiers' typemap. + For Java use the 'javainterfacemodifiers' typemap. + + For example: + + %typemap(csinterfacemodifiers) X "internal interface" + +2020-09-24: geefr + [C#] #1868 Fix wchar_t* csvarout typemap for member variable wrappers. + +2020-08-28: wsfulton + [Java] #1862 Fix crashes in swig_connect_director during director class construction + when using the director class from multiple threads - a race condition initialising + block scope static variables. The fix is guaranteed when using C++11, but most + compilers also fix it when using C++03/C++98. + +2020-08-16: wsfulton + [Python] Add missing initializer for member '_heaptypeobject::ht_module' when using + -builtin to complete Python 3.9 support. + +2020-08-16: wsfulton + [Python] Remove PyEval_InitThreads() call for Python 3.7 and later as Python calls + it automatically now. This removes a deprecation warning when using Python 3.9. + +2020-08-15: wsfulton + [Python] All Python examples and tests are written to be Python 2 and Python 3 + compatible, removing the need for 2to3 to run the examples or test-suite. + +2020-08-13: wsfulton + [C#] Add support for void *VOID_INT_PTR for member variables. + +2020-07-29: chrisburr + #1843 [Python] Compilation error fix in SwigPyBuiltin_SetMetaType when using PyPy. + +2020-06-14: ZackerySpytz + #1642 #1809 Fix virtual comparison operators in director classes by removing an + incorrect space in the function name (for example, operator= = is now operator==). + Version 4.0.2 (8 Jun 2020) ========================== |