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-05 10:36:00 +0000 |
commit | f8c229b9d8f83dd47b6f64ed2a152f2e9bf21c39 (patch) | |
tree | 8fdb22f37aadf1566d786050bdd8b2785ca5fda1 | |
parent | 1e99e4fe37c0f2334b6de1c6bc3fcd3188bc2c92 (diff) | |
download | swig-f8c229b9d8f83dd47b6f64ed2a152f2e9bf21c39.tar.gz |
Bump version to 4.1.1 and migrate CHANGES to CHANGES.current
-rw-r--r-- | ANNOUNCE | 8 | ||||
-rw-r--r-- | CHANGES | 1274 | ||||
-rw-r--r-- | CHANGES.current | 1272 | ||||
-rw-r--r-- | Doc/Manual/Sections.html | 2 | ||||
-rw-r--r-- | README | 2 | ||||
-rw-r--r-- | configure.ac | 2 |
6 files changed, 1281 insertions, 1279 deletions
@@ -1,8 +1,8 @@ -*** ANNOUNCE: SWIG 4.1.0 (24 Oct 2022) *** +*** ANNOUNCE: SWIG 4.1.1 (in progress) *** https://www.swig.org -We're pleased to announce SWIG-4.1.0, the latest SWIG release. +We're pleased to announce SWIG-4.1.1, the latest SWIG release. What is SWIG? ============= @@ -25,11 +25,11 @@ Availability ============ The release is available for download on Sourceforge at - https://prdownloads.sourceforge.net/swig/swig-4.1.0.tar.gz + https://prdownloads.sourceforge.net/swig/swig-4.1.1.tar.gz A Windows version is also available at - https://prdownloads.sourceforge.net/swig/swigwin-4.1.0.zip + https://prdownloads.sourceforge.net/swig/swigwin-4.1.1.zip Please report problems with this release to the swig-devel mailing list, details at https://www.swig.org/mail.html. @@ -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) ========================== diff --git a/CHANGES.current b/CHANGES.current index 549a05c1e..5cba21e33 100644 --- a/CHANGES.current +++ b/CHANGES.current @@ -4,1276 +4,6 @@ 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) +Version 4.1.1 (in progress) =========================== -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==). diff --git a/Doc/Manual/Sections.html b/Doc/Manual/Sections.html index d06bb7120..6b5a42ec6 100644 --- a/Doc/Manual/Sections.html +++ b/Doc/Manual/Sections.html @@ -8,7 +8,7 @@ <H1><a name="Sections">SWIG-4.1 Documentation</a></H1> <p> -Last update : SWIG-4.1.0 (24 Oct 2022) +Last update : SWIG-4.1.1 (in progress) </p> <H2><a name="Sections_Sections">Sections</a></H2> @@ -1,7 +1,5 @@ SWIG (Simplified Wrapper and Interface Generator) -Version: 4.1.0 (24 Oct 2022) - Tagline: SWIG is a compiler that integrates C and C++ with languages including Perl, Python, Tcl, Ruby, PHP, Java, C#, D, Go, Lua, Octave, R, Scheme (Guile, MzScheme/Racket), Scilab, Ocaml. diff --git a/configure.ac b/configure.ac index f88004ab9..5535b8732 100644 --- a/configure.ac +++ b/configure.ac @@ -2,7 +2,7 @@ dnl Process this file with autoconf to produce a configure script. dnl The macros which aren't shipped with the autotools are stored in the dnl Tools/config directory in .m4 files. -AC_INIT([swig],[4.1.0],[https://www.swig.org]) +AC_INIT([swig],[4.1.1],[https://www.swig.org]) AC_PREREQ([2.60]) AC_CONFIG_SRCDIR([Source/Swig/swig.h]) |