| Below are the changes for the current release. |
| See the CHANGES file for changes in older releases. |
| 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.4.0 (in progress) |
| =========================== |
| |
| 2025-04-18: akorobka |
| #103 Thread safety bugfix in the runtime type system. |
| |
| Replaces the casting linked list with a list of arrays that does not get |
| modified at runtime. The content of the cast arrays is sorted during the |
| initialization so that subsequent lookups can use binary search over the |
| entries obtaining O(log n) performance. |
| |
| Bump SWIG_RUNTIME_VERSION to 5 due to associated changes in runtime type |
| system. |
| |
| *** POTENTIAL INCOMPATIBILITY *** |
| |
| 2025-04-17: klausspanderen |
| [Python] #3137 Add support for free threading Python (aka no-gil) where the |
| GIL can be disabled. |
| |
| 2025-04-02: wsfulton |
| [Java] #3156 Support JDK 21 and std::list. Fixes removeFirst() and removeLast() |
| incompatibilities with methods of the same name in the base class, |
| AbstractSequentialList, which were added in JDK 21 with a different |
| return type. The addFirst() and addLast() methods were also added, all part |
| of JEP-431 Sequenced Collections, see https://openjdk.org/jeps/431. |
| |
| If these 4 methods are needed, as SWIG previously generated them, then add |
| the following to your interface file after %include <std_list.i>: |
| |
| %extend std::list { |
| void removeLast() { $self->pop_back(); } |
| void removeFirst() { $self->pop_front(); } |
| void addLast(const T &value) { $self->push_back(value); } |
| void addFirst(const T &value) { $self->push_front(value); } |
| } |
| |
| But note that this will give javac compiler errors when using JDK 21 and |
| later for removeFirst() and removeLast(). |
| |
| 2025-04-02: wsfulton |
| [Java] Fix javac -Xlint warning [this-escape] - JDK 21 |
| |
| [this-escape] possible 'this' escape before subclass is fully initialized |
| |
| Add @WarningSuppressions("this-escape") annotation to all director |
| constructors as the warning is a false positive. Similarly for |
| std::list, std::vector, std::set, std::unordered_set constructors. |
| |
| 2025-04-02: wsfulton |
| [Java] Fix javac -Xlint warnings: |
| |
| - [cast] redundant cast in std::unordered_map wrappers put method |
| - [rawtypes] found raw type in std::list constructor wrapper |
| |
| 2025-04-02: olly |
| #3152 Remove typemaps for `signed wchar_t` and `unsigned wchar_t` |
| in C++ mode. These types aren't specified by the C++ standard and |
| give an error with modern versions of GCC, clang or MSVC. Older |
| GCC and clang did allow them (tested with GCC 8 and clang 8), but |
| our typemap code used `UWCHAR_MAX` which doesn't seem to have ever |
| been defined by any compiler. |
| |
| 2025-04-01: olly |
| #920 #2830 [MzScheme/Racket] Remove support for MzScheme/Racket. |
| It's a long time since SWIG's support was actively maintained and |
| a major overhaul would be needed to support Racket 8, for which |
| nobody has stepped forward in over 3 years. |
| |
| 2025-03-03: olly |
| [Guile] The typemaps in ports.i now generate code which compiles |
| even if the wrapper is compiled with in a strict standards |
| conformance mode such as -std=c11. |
| |
| 2025-02-28: olly |
| #3127 Fix bad generated code in some cases when a constant |
| expression is split over multiple lines and used as part of a type. |
| This manifested in cases where SWIG's parser gets the expression |
| text by skipping to the matching closing parenthesis and grabbing |
| the skipped program text. |
| |
| 2025-02-19: wsfulton |
| Add support for $n special variable expansion in the names of typemap |
| local variables, such as: |
| |
| %typemap(in) int MYINT (int $1_temp) { ... } |
| |
| $1_temp is typically expanded to arg1_temp, arg2_temp etc depending on |
| which argument the typemap is applied to. |
| |
| 2025-02-05: wsfulton |
| #3075 Regression fix when using -keyword, kwargs or compactdefaultargs |
| option. Restore generating a non-const cast to the default value when |
| wrapping const pointer default arguments. |
| |
| 2024-12-07: arbrauns |
| [Lua] #3083 Fix "unsigned long long" being interpreted as "signed |
| long long". |
| |
| 2024-11-22: wsfulton |
| Use new <errno.h> fragment for including this header when needed instead |
| of either always including it or relying on it being included elsewhere. |
| Fixes the removal of errno.h when defining PY_LIMITED_API for python-3.11 |
| and later. |
| |
| 2024-11-09: wsfulton |
| #3064 Perform repeated typedef lookups instead of a single typedef |
| lookup on the type being applied in %apply when looking for a family |
| of typemaps to apply. |
| |
| 2024-11-01: wsfulton |
| Fix internal error handling parameters that are typedefs to references |
| when using the compactdefaultargs feature. |
| |
| 2024-10-30: wsfulton |
| #1851 Fix handling of parameters with default arguments that are |
| initializer lists when using -keyword or the compactdefaultargs option. |
| |
| 2024-10-25: olly |
| [Guile] Allow wrapping anything with a `varout` typemap as a |
| constant. |
| |
| 2024-10-24: olly |
| [Perl] https://sourceforge.net/p/swig/bugs/1134/ Ensure C++ |
| local variables get destroyed before throwing a Perl exception. |
| |
| 2024-10-22: olly |
| #3034 SWIG's testsuite is now free of SWIG warnings for all target |
| languages and the SWIG -Werror option is now enabled automatically |
| to ensure this doesn't regress. |
| |
| 2024-10-22: olly |
| #2998 Drop support for specifying SWIG's internal type string |
| representation in interface files. This "secret developer feature" |
| was only documented in developer documentation, and had no test |
| coverage. |
| |
| It allowed specifying an SWIG internal syntax type string, e.g.: |
| |
| `p.a(10).p.f(int, p.f(int).int)` foo(int, int (*x)(int)); |
| |
| In the unlikely event that anyone was using this, we recommend you |
| use the standard C/C++ type syntax instead, which will work with |
| previous SWIG releases too, e.g.: |
| |
| (*(*foo(int, int (*)(int)))[10])(int, int (*)(int)); |
| |
| The C/C++ syntax has the major advantage of being the same syntax |
| that C/C++ compilers use. |