Fix when using -builtin and wrapping std::map, std::set, std::unordered_map or std::unordered_set to ensure __contains__ is called. This is a wrapper for the STL container's find method. Without it, Python will do its own slower sequence search.
865 lines
36 KiB
Text
865 lines
36 KiB
Text
Below are the changes for the current release.
|
|
See the CHANGES file for changes in older releases.
|
|
See the RELEASENOTES file for a summary of changes in each release.
|
|
Issue # numbers mentioned below can be found on Github. For more details, add
|
|
the issue number to the end of the URL: https://github.com/swig/swig/issues/
|
|
|
|
Version 4.0.0 (in progress)
|
|
===========================
|
|
|
|
2018-09-21: wsfulton
|
|
[Python] Fix when using -builtin and wrapping std::map, std::set, std::unordered_map or
|
|
std::unordered_set to ensure __contains__ is called. This is a wrapper for the STL
|
|
container's find method. Without it, Python will do its own slower sequence search.
|
|
|
|
2018-09-19: wsfulton
|
|
[Python] Fix functors (wrapped as __call__) when using -builtin -modern -fastunpack.
|
|
|
|
2018-09-02: andreas.gaeer,tkrasnukha
|
|
[Python] #1321 Fix assert in PyTuple_GET_SIZE in debug interpreter builds of python-3.7
|
|
when calling tp_new.
|
|
|
|
2018-09-01: ChristopherHogan
|
|
[Guile] #1288 Fix garbage collection for guile >= 2.0.12.
|
|
|
|
2018-08-31: wsfulton
|
|
[Python] #1319 C++11 hash tables support:
|
|
std::unordered_map
|
|
std::unordered_set
|
|
std::unordered_multimap
|
|
std::unordered_multiset
|
|
is now compiling and working (sorting using -builtin not fully functional yet though).
|
|
|
|
2018-08-20: wkalinin
|
|
#1305 Fix nested structure symbol tables in C mode to fix member name conflicts
|
|
in different structs with the same nested struct member name.
|
|
|
|
2018-08-18: wsfulton
|
|
[Python] #688 Fix makefile recursion when running python test-suite.
|
|
|
|
2018-08-18: wsfulton
|
|
[Python] #1310 Re-implement Python -fastproxy option.
|
|
|
|
The previous implementation failed with Python 3 and abstract base clases.
|
|
The new implementation replaces the Python 2 implementation using
|
|
new.instancemethod with the C API PyMethod_New to match the equivalent Python 3
|
|
implementation which uses PyInstanceMethod_New.
|
|
|
|
The new approach runs slightly faster. See #1310.
|
|
2018-08-12: gmazzamuto
|
|
[Python] #1283 Update pybuffer.i library to use new-style Python buffer C API.
|
|
|
|
2018-08-12: brianhatwood,wsfulton
|
|
[Java] #1303 #1304 Fix crash in directors when using OUTPUT and INOUT typemaps in typemaps.i and
|
|
passing NULL pointers in C++ to director method overloaded and implemented in Java.
|
|
|
|
2018-08-10: wsfulton
|
|
[Python] #1293 Improve TypeError message inconsistencies between default and fastdispatch
|
|
mode when handling overloaded C++ functions. Previously the error message did not always
|
|
display the possible C/C++ prototypes in fastdispatch mode.
|
|
|
|
2018-08-02: furylynx,jacobwgillespie,p2k
|
|
[Javascript] #1290, #968. Add support for NodeJS versions 2-10.
|
|
|
|
2018-07-31: wsfulton
|
|
[Python] #1293 Overloaded C++ function wrappers now raise a TypeError instead
|
|
of NotImplementedError when the types passed are incorrect. This change means
|
|
there is now consistency with non-overloaded function wrappers which have always
|
|
raised TypeError when the incorrect types are passed. The error message remains
|
|
the same and is for example now:
|
|
|
|
TypeError: Wrong number or type of arguments for overloaded function 'f'.
|
|
Possible C/C++ prototypes are:
|
|
f(int)
|
|
f(char const *)
|
|
|
|
instead of:
|
|
|
|
NotImplementedError: Wrong number or type of arguments for overloaded function 'f'.
|
|
Possible C/C++ prototypes are:
|
|
f(int)
|
|
f(char const *)
|
|
|
|
*** POTENTIAL INCOMPATIBILITY ***
|
|
|
|
2018-06-23: wsfulton
|
|
[Python] #718 Fix pythonnondynamic feature for modern classes
|
|
|
|
Fixes nondynamic mode when an instance variable is set with the same
|
|
name as a class variable in a class derived from a SWIG proxy class.
|
|
This corner case set an instance variable instead of raising an AttributeError.
|
|
|
|
Also fix %pythonnondynamic in Python 3 with -modern. The metaclass
|
|
containing the implementation was previously not being applied in Python 3.
|
|
|
|
2018-07-17: petrmitrichev,wsfulton
|
|
[Python] #1275 #1279 Initialize function-local statics (singletons) that call Python
|
|
code during Python module initialization in order to avoid deadlocks with subsequent
|
|
multi-threaded usage.
|
|
|
|
2018-06-15: wsfulton
|
|
[Python] Fix seg fault using Python 2 when passing a Python string, containing
|
|
invalid utf-8 content, to a wstring or wchar * parameter. A TypeError is thrown instead, eg:
|
|
|
|
%include <std_wstring.i>
|
|
void instring(const std::wstring& s);
|
|
|
|
instring(b"h\xe9llooo") # Python
|
|
|
|
2018-06-15: wsfulton
|
|
[Python] Python 3.7 support: Replace use of deprecated PyUnicode_GetSize with
|
|
PyUnicode_GetLength to remove deprecated warnings compiling the C/C++ wrappers.
|
|
|
|
2018-06-12: wsfulton
|
|
[Python] Python 3.7 support: The %pythonabc feature in pyabc.i now uses base classes
|
|
collections.abc.MutableSequence
|
|
collections.abc.MutableMapping
|
|
collections.abc.MutableSet
|
|
instead of
|
|
collections.MutableSequence
|
|
collections.MutableMapping
|
|
collections.MutableSet
|
|
as the latter are deprecated in Python 3.7 and are due to be removed in Python 3.8.
|
|
The classes in collections.abc.* are available from Python 3.3 onwards. If you
|
|
require support for Python 3.2, then copy the pyabc.i file and modify by removing
|
|
the few instances of the .abc sub-module.
|
|
|
|
*** POTENTIAL INCOMPATIBILITY ***
|
|
|
|
2018-06-12: olly,wsfulton
|
|
[Python] #701 Remove support for Python versions < 2.7 and 3.0 and 3.1.
|
|
|
|
*** POTENTIAL INCOMPATIBILITY ***
|
|
|
|
2018-06-11: olly
|
|
[Python] Fix new GCC8 warnings in generated code by avoiding casts
|
|
between incompatible function types where possible (when keyword
|
|
args are in use, it is not possible to avoid such warnings as they
|
|
are inherent in the design of Python's C API in that particular
|
|
case). Fixes #1259.
|
|
|
|
2018-06-08: philippkraft
|
|
[Python] Stop exposing <CLASS>_swigregister to Python. It's not
|
|
useful for user Python code to call this, and it just clutters the
|
|
API unnecessarily. Fixes #1225.
|
|
|
|
2018-06-07: cmfoil, kabbi, Jamie Kirkpatrick, markok314, vadz, wsfulton, Yann Diorcet
|
|
#170 Doxygen documentation support added. This allows translation of Doxygen comments
|
|
into JavaDoc and PyDoc documentation. It is enabled via the -doxygen command line
|
|
option. See the Doxygen.html chapter in the documentation for further information.
|
|
|
|
2018-06-07: olly
|
|
[PHP] We've finally removed support for %pragma(php4) which was
|
|
deprecated back in 2008. Use %pragma(php) instead, which has been
|
|
supported since at least 2005.
|
|
|
|
*** POTENTIAL INCOMPATIBILITY ***
|
|
|
|
2018-06-07: olly
|
|
[PHP5] Support for PHP5 has been removed. PHP5 is no longer
|
|
actively supported by the PHP developers and security support for
|
|
it ends completely at the end of 2018, so it doesn't make sense
|
|
to include support for it in the upcoming SWIG 4.0.0 release.
|
|
|
|
*** POTENTIAL INCOMPATIBILITY ***
|
|
|
|
2018-06-06: olly
|
|
[Lua] Improve configure probes for Lua headers and libs used in testsuite.
|
|
|
|
2018-05-15: kwwette
|
|
[Octave] add support for version 4.4
|
|
- Should not introduce any user-visible incompatibilities
|
|
|
|
2018-05-15: wsfulton
|
|
[C#, D, Java] Fix lookup of csconstruct, dconstruct and javaconstruct typemaps.
|
|
The C++ namespace was previously ignored when looking up the typemap.
|
|
|
|
2018-05-15: wsfulton
|
|
[Javascript] Fix generated C++ code when using %nspace on namespaces that are more
|
|
than two levels deep.
|
|
|
|
2018-05-14: wsfulton
|
|
Issue #1251 Add support for C++17 nested namespace definitions,
|
|
for example:
|
|
namespace A::B { ... }
|
|
|
|
2018-05-11: wsfulton
|
|
[C#, D, Java] Add support so that the %csmethodmodifiers, %dmethodmodifiers,
|
|
%javamethodmodifiers can modify the method modifiers for the destructor wrappers
|
|
in the proxy class: dispose, Dispose, delete. With this feature, it is now possible
|
|
to make a C# proxy class sealed, eg when wrapping a class X, the virtual method modifiers
|
|
can be removed using:
|
|
|
|
%typemap(csclassmodifiers) X "public sealed class"
|
|
%csmethodmodifiers X::~X "public /*virtual*/";
|
|
|
|
2018-04-18: olly
|
|
[Python] Suppress new pycodestyle warning:
|
|
E252 missing whitespace around parameter equals
|
|
|
|
2018-04-07: goatshriek
|
|
[Ruby] #1213 Fix ruby %alias directive for global C/C++ functions.
|
|
|
|
2018-04-03: olly
|
|
[Ruby] Fix to pass Qnil instead of NULL to rb_funcall(), which silences GCC
|
|
-Wconversion-null warning (on by default with recent GCC).
|
|
|
|
2018-03-09: fultonwi
|
|
[Java] #1184 Fix swigReleaseOwnership() and swigTakeOwnership() regression
|
|
for non-director classes. Restores a dynamic_cast which was previously removed.
|
|
|
|
2018-03-07: llongi
|
|
Github PR #1166 - Fix preprocessor handling of macros with commas
|
|
in a // comment.
|
|
|
|
2018-02-18: JPEWdev
|
|
Patch #1164 - Add support for a command-line options file, also sometimes
|
|
called a response file. This is useful if the command-line options exceed
|
|
the system command-line length limit. To use, put the command-line options
|
|
into a file, then provide the file name prefixed with @, for example using
|
|
a file called args.txt:
|
|
|
|
swig @args.txt
|
|
|
|
2018-02-11: wsfulton
|
|
[Javascript] #1187 Fix compilation error wrapping std::complex via
|
|
std_complex.i.
|
|
|
|
2018-01-30: smarchetto
|
|
[Scilab] add type name argument in SWIG_ptr() function to cast from pointer address to typed pointers
|
|
|
|
2018-01-16: wsfulton
|
|
Expressions following a preprocessor directive must now be separated by whitespace
|
|
or non-numeric characters. This syntax change makes the SWIG preprocessor work like
|
|
the C preprocessor in this area.
|
|
|
|
For example, the following code used be accepted as valid syntax:
|
|
#if1
|
|
#define ABC 123
|
|
#endif
|
|
|
|
Now you get an error:
|
|
example.h:1: Error: Unknown SWIG preprocessor directive: if1 (if this is a block of
|
|
target language code, delimit it with %{ and %})
|
|
example.h:3: Error: Extraneous #endif.
|
|
|
|
The following is the correct syntax:
|
|
#if 1
|
|
#define ABC 123
|
|
#endif
|
|
|
|
The following of course also works:
|
|
#if(1)
|
|
#define ABC 123
|
|
#endif
|
|
|
|
*** POTENTIAL INCOMPATIBILITY ***
|
|
|
|
2018-01-15: wsfulton
|
|
Fix issue #1183. Floating point exception evaluating preprocessor expressions
|
|
resulting in division by zero.
|
|
|
|
2018-01-14: wsfulton
|
|
Fix issue #1172. Seg fault parsing invalid exponents in the preprocessor.
|
|
|
|
2018-01-12: Liryna
|
|
[C#] Patch #1128. Add ToArray function to std::vector wrappers.
|
|
|
|
2018-01-12: wsfulton
|
|
[Java] Fix issue #1156. Add missing throws clause for interfaces when using the
|
|
%interface family of macros.
|
|
|
|
2018-01-05: wsfulton
|
|
Fix default arguments using expressions containing -> syntax error. Problem reported on
|
|
swig-user mailing list.
|
|
|
|
2017-12-30: wsfulton
|
|
[Python] Replace pep8 with pycodestyle for checking the Python code style when
|
|
running Python tests.
|
|
|
|
2017-12-30: davedissian
|
|
Fixed a symbol lookup issue when encountering a typedef of a symbol from the tag
|
|
namespace to the global namespace when the names are identical, such as 'typedef
|
|
struct Foo Foo;'.
|
|
|
|
2017-12-13: wsfulton
|
|
[Perl] add missing support for directorfree typemaps.
|
|
|
|
2017-12-13: wsfulton
|
|
Issue #1167 Fix directorout typemaps which were causing undefined behaviour when
|
|
returning pointers by reference.
|
|
|
|
2017-12-08: olly
|
|
[PHP] Use ZEND_MODULE_GLOBALS_ACCESSOR to access globals - this
|
|
should make the generated code work with PHP 7.2.0.
|
|
|
|
2017-12-04: wsfulton
|
|
[Python] Add missing checks for failures in calls to PyUnicode_AsUTF8String. Previously a
|
|
seg fault could occur when passing invalid UTF8 strings (low surrogates), eg passing
|
|
u"\udcff" to the C layer (Python 3).
|
|
|
|
2017-11-24: joequant
|
|
Fix #1124 and return R_NilValue for null pointers
|
|
|
|
2017-11-29: wsfulton
|
|
[Java] director exception handling improvements.
|
|
|
|
When a director method throws an exception and it is caught by DirectorException
|
|
and passed back to Java using Swig::DirectorException::throwException, the Java
|
|
stack trace now contains the original source line that threw the exception.
|
|
|
|
Deprecate Swig::DirectorException::raiseJavaException, please replace usage with
|
|
Swig::DirectorException::throwException.
|
|
|
|
*** POTENTIAL INCOMPATIBILITY ***
|
|
|
|
2017-10-26: wsfulton
|
|
Add support for C++11 ref-qualifiers when using directors.
|
|
|
|
2017-10-26: wsfulton
|
|
Fix generated code when using directors and methods returning const ref pointers.
|
|
|
|
2017-10-26: wsfulton
|
|
[C#, D, Java, Octave, R, Scilab] Port director typemaps to these additional languages.
|
|
Issue #700.
|
|
|
|
2017-10-26: radarsat1
|
|
[Ruby Python] Patch #1029 - Correct handling of null using directors and shared_ptr.
|
|
|
|
2017-10-10: joequant
|
|
[R] pass enum expressions to R. This will generate
|
|
incorrect files when there is an arithmetic expression
|
|
in the enum, but this is better than silently generating
|
|
incorrect code
|
|
|
|
2017-10-09: olly
|
|
[PHP] Fix incorrect wrapper code generated when there's a
|
|
combination of overloading, parameters with a default value
|
|
and %newobject. Fixes https://sourceforge.net/p/swig/bugs/1350/
|
|
|
|
2017-10-09: olly
|
|
Remove GCJ support. It isn't in a good state and doesn't seem to
|
|
be used, and GCC7 dropped GCJ. Closes
|
|
https://sourceforge.net/p/swig/bugs/823/
|
|
|
|
2017-10-07: olly
|
|
Fix preprocessor handling of empty macro arguments to match that of
|
|
C/C++ compilers. Fixes https://github.com/swig/swig/pull/1111 and
|
|
https://sourceforge.net/p/swig/bugs/826/
|
|
|
|
2017-10-06: wsfulton
|
|
[Python] Issue #1108. Fix platform inconsistency in Python default argument handling.
|
|
32 bit and 64 bit compiled versions of SWIG generated different Python files
|
|
when default arguments were outside the range of 32 bit signed integers.
|
|
The default arguments specified in Python are now only those that are in the
|
|
range of a 32 bit signed integer, otherwise the default is obtained from C/C++ code.
|
|
|
|
2017-10-02: wsfulton
|
|
[C#] Fix std::complex types passed by value.
|
|
|
|
2017-10-02: wsfulton
|
|
[Javascript, Python, Ruby] Issue #732 - Missing type information for std::complex
|
|
in std_complex.i meant that previously std::complex always had to be fully qualified
|
|
in order to be wrapped with the appropriate typemaps.
|
|
|
|
2017-10-01: joequant
|
|
allow R package names with docs
|
|
allowing multiple get accessors in R
|
|
fix smrt-pointer and NAMESPACE support
|
|
constructors now returning smart pointers (if class
|
|
declared as such)
|
|
smart-pointer classes deriving from parent smart-pointers
|
|
|
|
2017-09-29: wsfulton
|
|
Issue #1100 - Allow an instantiated template to have the same name in the target
|
|
language as the C++ template name, for example, this is now possible:
|
|
|
|
template<typename T> struct X { ... };
|
|
%template(X) X<int>;
|
|
|
|
2017-09-23: wsfulton
|
|
Issue #1098. Fix overloading of shared_ptr with underlying pointer types, eg:
|
|
|
|
void m(std::shared_ptr<T> p);
|
|
void m(T &p);
|
|
void m(T *p);
|
|
|
|
Only the first method is wrapped and the others are ignored/shadowed.
|
|
The implementation is done via a new attribute in the 'typecheck' typemap called
|
|
'equivalent'. If specified, it must contain the equivalent pointer type for overloading
|
|
and can only be used for the special SWIG_TYPECHECK_POINTER precedence level.
|
|
The shared_ptr 'typecheck' typemaps have been modified accordingly.
|
|
Here is a simplified version:
|
|
|
|
%typemap(typecheck, precedence=SWIG_TYPECHECK_POINTER, equivalent="T *")
|
|
T,
|
|
T CONST &,
|
|
T CONST *,
|
|
T *CONST&,
|
|
std::shared_ptr< T >,
|
|
std::shared_ptr< T > &,
|
|
std::shared_ptr< T > *,
|
|
std::shared_ptr< T > *&
|
|
{ ... }
|
|
|
|
Overloading with any of these types will result in SWIG ignoring all but the first
|
|
overloaded method by default. Without the 'equivalent' attribute, wrapping the overloaded
|
|
methods resulted in types being shadowed (scripting languages) or code that did not
|
|
compile (statically typed languages).
|
|
|
|
2017-09-19: futatuki
|
|
[Python] #1003 Add --with-2to3=/path/to/2to3 option to configure.
|
|
|
|
2017-09-18: wsfulton
|
|
Fix type promotion wrapping constant expressions of the form:
|
|
# define EXPR_MIXED1 (0x80 + 11.1) - 1
|
|
This was previously an integral type instead of a floating point type.
|
|
|
|
2017-09-17: wsfulton
|
|
Fix generated code for constant expressions containing wchar_t L literals such as:
|
|
# define __WCHAR_MAX (0x7fffffff + L'\0')
|
|
# define __WCHAR_MIN (-__WCHAR_MAX - 1)
|
|
|
|
2017-09-10: mlamarre
|
|
[Python] Patch #1083. Define_DEBUG to 1 to do exactly like Visual Studio
|
|
/LDd, /MDd or /MTd compiler options.
|
|
|
|
2017-08-25: wsfulton
|
|
Issue #1059. Add support for C++11 ref-qualifiers on non-static member functions.
|
|
Members with lvalue ref-qualifiers such as:
|
|
|
|
struct RQ {
|
|
void m1(int x) &;
|
|
void m2(int x) const &;
|
|
};
|
|
|
|
are wrapped like any other member function. Member functions with rvalue ref-qualifiers
|
|
are ignored by default, such as:
|
|
|
|
struct RQ {
|
|
void m3(int x) &&;
|
|
void m4(int x) const &&;
|
|
};
|
|
|
|
example.i:7: Warning 405: Method with rvalue ref-qualifier m3(int) && ignored.
|
|
example.i:8: Warning 405: Method with rvalue ref-qualifier m4(int) const && ignored.
|
|
|
|
These can be unignored and exposed to the target language, see further documentation in
|
|
CPlusPlus11.html.
|
|
|
|
2017-08-16: wsfulton
|
|
Fix #1063. Add using declarations to templates into typedef table.
|
|
|
|
Using declarations to templates were missing in SWIG's internal typedef tables.
|
|
This led to a few problems, such as, templates that did not instantiate and generated
|
|
C++ code that did not compile as SWIG did not know what scope the template was
|
|
in. This happened mostly when a using declaration was used on a template type in a
|
|
completely unrelated namespace.
|
|
|
|
2017-08-16: wsfulton
|
|
Fix type lookup in the presence of using directives and using declarations.
|
|
|
|
Fix some cases of type lookup failure via a combination of both using directives and
|
|
using declarations resulting in C++ code that did not compile as the generated type was
|
|
not fully qualified for use in the global namespace. Example below:
|
|
|
|
namespace Space5 {
|
|
namespace SubSpace5 {
|
|
namespace SubSubSpace5 {
|
|
struct F {};
|
|
}
|
|
}
|
|
using namespace SubSpace5;
|
|
using SubSubSpace5::F;
|
|
void func(SubSubSpace5::F f);
|
|
}
|
|
|
|
2017-08-16: wsfulton
|
|
Issue #1051. %template scope enforcement and class definition fixes.
|
|
|
|
The scoping rules around %template have been specified and enforced.
|
|
The %template directive for a class template is the equivalent to an
|
|
explicit instantiation of a C++ class template. The scope for a valid
|
|
%template instantiation is now the same as the scope required for a
|
|
valid explicit instantiation of a C++ template. A definition of the
|
|
template for the explicit instantiation must be in scope where the
|
|
instantiation is declared and must not be enclosed within a different
|
|
namespace.
|
|
|
|
For example, a few %template and C++ explicit instantiations of std::vector
|
|
are shown below:
|
|
|
|
// valid
|
|
namespace std {
|
|
%template(vin) vector<int>;
|
|
template class vector<int>;
|
|
}
|
|
|
|
// valid
|
|
using namespace std;
|
|
%template(vin) vector<int>;
|
|
template class vector<int>;
|
|
|
|
// valid
|
|
using std::vector;
|
|
%template(vin) vector<int>;
|
|
template class vector<int>;
|
|
|
|
// ill-formed
|
|
namespace unrelated {
|
|
using std::vector;
|
|
%template(vin) vector<int>;
|
|
template class vector<int>;
|
|
}
|
|
|
|
// ill-formed
|
|
namespace unrelated {
|
|
using namespace std;
|
|
%template(vin) vector<int>;
|
|
template class vector<int>;
|
|
}
|
|
|
|
// ill-formed
|
|
namespace unrelated {
|
|
namespace std {
|
|
%template(vin) vector<int>;
|
|
template class vector<int>;
|
|
}
|
|
}
|
|
|
|
// ill-formed
|
|
namespace unrelated {
|
|
%template(vin) std::vector<int>;
|
|
template class std::vector<int>;
|
|
}
|
|
|
|
When the scope is incorrect, an error now occurs such as:
|
|
|
|
cpp_template_scope.i:34: Error: 'vector' resolves to 'std::vector' and
|
|
was incorrectly instantiated in scope 'unrelated' instead of within scope 'std'.
|
|
|
|
Previously SWIG accepted the ill-formed examples above but this led to
|
|
numerous subtle template scope problems especially in the presence of
|
|
using declarations and using directives as well as with %feature and %typemap.
|
|
|
|
Actually, a valid instantiation is one which conforms to the C++03
|
|
standard as C++11 made a change to disallow using declarations and
|
|
using directives to find a template.
|
|
|
|
// valid C++03, ill-formed C++11
|
|
using std::vector;
|
|
template class vector<int>;
|
|
|
|
Similar fixes for defining classes using forward class references have
|
|
also been put in place. For example:
|
|
|
|
namespace Space1 {
|
|
struct A;
|
|
}
|
|
namespace Space2 {
|
|
struct Space1::A {
|
|
void x();
|
|
}
|
|
}
|
|
|
|
will now error out with:
|
|
|
|
cpp_class_definition.i:5: Error: 'Space1::A' resolves to 'Space1::A' and
|
|
was incorrectly instantiated in scope 'Space2' instead of within scope 'Space1'.
|
|
|
|
Previously some symbols would have been instantiated in the wrong scope and led
|
|
to lots of scope problems involving SWIG typemaps, features, renames etc.
|
|
You will need to correct the scope used in other SWIG directives which do not
|
|
support 'using declarations' and 'using directives'. For example, if you previously had:
|
|
|
|
%rename(Zap) vector<int>::clear;
|
|
using namespace std;
|
|
%template(VectorInt) vector<int>;
|
|
|
|
Prior versions of SWIG incorrectly instantiated vector<int> in the global namespace
|
|
and so the %rename matched. Now the template is instantiated in the correct namespace,
|
|
so is fully qualified as std::vector<int>. The other SWIG directives need correcting as
|
|
they do not follow 'using declarations' and 'using directives'. Change it to:
|
|
|
|
%rename(Zap) std::vector<int>::clear;
|
|
using namespace std;
|
|
%template(vin) vector<int>;
|
|
|
|
|
|
*** POTENTIAL INCOMPATIBILITY ***
|
|
|
|
2017-08-16: wsfulton
|
|
Fix scope lookup for template parameters containing unary scope operators.
|
|
|
|
Fixes cases like:
|
|
|
|
namespace Alloc {
|
|
template<typename T> struct Rebind {
|
|
typedef int Integer;
|
|
};
|
|
}
|
|
%template(RebindBucket) Alloc::Rebind< Bucket >;
|
|
OR
|
|
%template(RebindBucket) Alloc::Rebind< ::Bucket >;
|
|
|
|
Alloc::Rebind< Bucket >::Integer Bucket1();
|
|
Alloc::Rebind< ::Bucket >::Integer Bucket2();
|
|
Alloc::Rebind<::template TemplateBucket<double>>::Integer Bucket3();
|
|
|
|
2017-08-16: wsfulton
|
|
For templates only, the template parameters are fully resolved when
|
|
handling typemaps. Without this, it is too hard to have decent rules
|
|
to apply typemaps when parameter types are typedef'd and template
|
|
parameters have default values.
|
|
|
|
Fixes %clear for typedefs in templates, eg:
|
|
|
|
%typemap("in") XXX<int>::Long "..."
|
|
template typename<T> struct XXX {
|
|
typedef long Long;
|
|
};
|
|
%clear XXX<int>::Long;
|
|
|
|
as the typemap was previously incorrectly stored as a typemap for long
|
|
instead of XXX<int>::Long.
|
|
|
|
2017-08-05: olly
|
|
[C++11] Allow static_assert at the top level (and disallow it right
|
|
after template<T>). Fixes https://github.com/swig/swig/issues/1031
|
|
reported by Artem V L.
|
|
|
|
2017-08-02: wsfulton
|
|
Fix incorrectly shown warning when an empty template instantiation was used on a
|
|
class used as a base class and that base class was explicitly ignored with %ignore.
|
|
Example of the warning which will no longer appear:
|
|
|
|
Warning 401: Base class 'Functor< int,int >' has no name as it is an empty
|
|
template instantiated with '%template()'. Ignored.
|
|
|
|
2017-07-17: fflexo
|
|
[Java] #674 Add std_list.i to add support for std::list containers. The Java proxy
|
|
extends java.util.AbstractSequentialList and makes the C++ std::list container look
|
|
and feel much like a java.util.LinkedList from Java.
|
|
|
|
2017-07-07: wsfulton
|
|
[Python] Fix display of documented template types when using the autodoc
|
|
feature. For example when wrapping:
|
|
|
|
%feature("autodoc");
|
|
template<typename X> struct T {};
|
|
%template(TInteger) T<int>;
|
|
|
|
the generated documentation contains:
|
|
"""Proxy of C++ T< int > class."""
|
|
instead of:
|
|
"""Proxy of C++ T<(int)> class."""
|
|
and
|
|
"""__init__(TInteger self) -> TInteger"""
|
|
instead of
|
|
"""__init__(T<(int)> self) -> TInteger"""
|
|
|
|
2017-06-27: nihaln
|
|
[PHP] Update the OUTPUT Typemap to add return statement to the
|
|
PHP Wrapper.
|
|
|
|
2017-06-27: nihaln
|
|
[PHP] Update the enum and value examples to use the OO wrappers
|
|
rather than the flat functions produced with -noproxy. There's
|
|
not been a good reason to use -noproxy for since PHP5 OO wrapping
|
|
was fixed back in 2005.
|
|
|
|
2017-06-23: m7thon
|
|
[Python] fix and improve default argument handling:
|
|
|
|
1. Fix negative octals. Currently not handled correctly by `-py3`
|
|
(unusual case, but incorrect).
|
|
2. Fix arguments of type "octal + something" (e.g. `0640 | 04`).
|
|
Currently drops everything after the first octal. Nasty!
|
|
3. Fix bool arguments "0 + something" (e.g. `0 | 1`) are always
|
|
"False" (unusual case, but incorrect).
|
|
4. Remove special handling of "TRUE" and "FALSE" from
|
|
`convertValue` since there's no reason these have to match
|
|
"true" and "false".
|
|
5. Remove the Python 2 vs. Python 3 distinction based on the
|
|
`-py3` flag. Now the same python code is produced for default
|
|
arguments for Python 2 and Python 3. For this, octal default
|
|
arguments, e.g. 0644, are now wrapped as `int('644', 8)`. This
|
|
is required, as Python 2 and Python 3 have incompatible syntax
|
|
for octal literals.
|
|
|
|
Fixes #707
|
|
|
|
2017-06-21: futatuki
|
|
#1004 - Fix ccache-swig executable name to respect configure's --program-prefix and
|
|
--program-suffix values if used.
|
|
|
|
2017-06-21: tamuratak
|
|
[Ruby] #911 - Add std::wstring support.
|
|
|
|
2017-06-19: wsfulton
|
|
[Python] Fix handling of rich comparisons when wrapping overloaded operators:
|
|
|
|
operator< operator<= operator> operator>= operator== operator!=
|
|
|
|
Previously a TypeError was always thrown if the type was not correct. NotImplemented
|
|
is now returned from these wrapped functions if the type being compared with is
|
|
not correct. The subsequent behaviour varies between different versions of Python
|
|
and the comparison function being used, but is now consistent with normal Python
|
|
behaviour. For example, for the first 4 operator overloads above, a TypeError
|
|
'unorderable types' is thrown in Python 3, but Python 2 will return True or False.
|
|
NotImplemented should be returned when the comparison cannot be done, see PEP 207 and
|
|
https://docs.python.org/3/library/constants.html#NotImplemented
|
|
|
|
Note that the bug was only present when overloaded operators did not also have a
|
|
function overload.
|
|
|
|
Fixes SF bug #1208 (3441262) and SF patch #303.
|
|
|
|
*** POTENTIAL INCOMPATIBILITY ***
|
|
|
|
2017-06-17: fabrice102
|
|
[Go] Fix Go callback example. Fixes github #600, #955, #1000.
|
|
|
|
2017-06-16: wsfulton
|
|
Make sure warning and error messages are not split up by other processes writing to
|
|
stdout at the same time.
|
|
|
|
2017-06-16: wsfulton
|
|
[R] Fix wrapping function pointers containing rvalue and lvalue reference parameters.
|
|
|
|
2017-06-13: olly
|
|
[Perl] Fix testsuite to work without . in @INC - it was removed in
|
|
Perl 5.26 for security reasons, and has also been removed from
|
|
older versions in some distros. Fixes
|
|
https://github.com/swig/swig/issues/997 reported by lfam.
|
|
|
|
2017-06-03: wsfulton
|
|
Fix %import on a file containing a file scope %fragment forced inclusion to not
|
|
generate the fragment contents as %import should not result in code being generated.
|
|
The behaviour is now the same as importing code insertion blocks.
|
|
Wrapping FileC.i in the following example will result in no generated code, whereas
|
|
previously "#include <limits.h>" was generated:
|
|
|
|
// FileA.i
|
|
%fragment("<limits.h>", "header") %{
|
|
#include <limits.h>
|
|
%}
|
|
|
|
%{
|
|
#include <stdio.h>
|
|
%}
|
|
%fragment("<limits.h>");
|
|
|
|
// FileC.i
|
|
%import "FileA.i"
|
|
|
|
*** POTENTIAL INCOMPATIBILITY ***
|
|
|
|
2017-05-26: Volker Diels-Grabsch, vadz
|
|
[Java] #842 Extend from java.util.AbstractList<> and implement java.util.RandomAccess for
|
|
std::vector wrappers. This notably allows to iterate over wrapped vectors in a natural way.
|
|
|
|
2017-05-30: davidcl
|
|
[Scilab] #994 Undefined symbol error when loading in Scilab 6
|
|
|
|
2017-05-25: asibross
|
|
[Java] #370 #417 Missing smart pointer handling in Java director extra methods
|
|
swigReleaseOwnership() and swigTakeOwnership().
|
|
|
|
2017-05-23: wsfulton
|
|
[Java] #230 #759 Fix Java shared_ptr and directors for derived classes java compilation
|
|
error.
|
|
|
|
For shared_ptr proxy proxy classes, add a protected method swigSetCMemOwn for modifying
|
|
the swigCMemOwn and swigCMemOwnDerived member variables which are used by various other
|
|
methods for controlling memory ownership.
|
|
|
|
2017-05-21: Sghirate
|
|
[Java, C#, D] #449 Remove unnecessary use of dynamic_cast in directors to enable
|
|
non-RTTI compilation.
|
|
|
|
2017-05-21: wsfulton
|
|
[Python] #993 Fix handling of default -ve unsigned values, such as:
|
|
void f(unsigned = -1U);
|
|
|
|
2017-05-20: jschueller
|
|
[Python] #991 Fix E731 PEP8 warning: do not assign a lambda expression
|
|
|
|
2017-05-16: nihal95
|
|
[PHP] Add %pragma version directive to allow the version of the
|
|
extension to be set. Patch #970, fixes #360.
|
|
|
|
2017-05-13: yag00
|
|
Patch #975 - Add support for noexcept on director methods.
|
|
|
|
2017-04-27: redbrain
|
|
Issue #974, Patch #976 - Fix preprocessor handling of macros with commas in a comment.
|
|
|
|
2017-04-25: jleveque
|
|
[Lua] #959 - Fix Visual Studio C4244 conversion warnings in Lua wrappers.
|
|
|
|
2017-04-21: tamuratak
|
|
[Ruby] #964 - Add shared_ptr director typemaps.
|
|
|
|
2017-04-20: wsfulton
|
|
[Ruby] #586, #935 Add assert for invalid NULL type parameter when calling SWIG_Ruby_NewPointerObj.
|
|
|
|
2017-04-20: tamuratak
|
|
[Ruby] #930, #937 - Fix containers of std::shared_ptr.
|
|
Upcasting, const types (eg vector<shared_ptr<const T>>) and NULL/nullptr support added.
|
|
|
|
2017-04-12: smarchetto
|
|
[Scilab] New parameter targetversion to specify the Scilab target version (5, 6, ..) for code generation
|
|
With Scilab 6 target specified, identifier names truncation is disabled (no longer necessary)
|
|
|
|
2017-03-24: tamuratak
|
|
[Ruby] Fix #939 - Wrapping std::vector<bool> fix due to incorrect null checks
|
|
on VALUE obj.
|
|
|
|
2017-03-17: vadz
|
|
[C#] #947 Add support for std::complex<T>
|
|
|
|
2017-03-17: wsfulton
|
|
[Go] Fix handling of typedef'd function pointers and typedef'd member function pointers
|
|
such as:
|
|
|
|
typedef int (*FnPtr_td)(int, int);
|
|
int do_op(int x, int y, FnPtr_td op);
|
|
|
|
2017-03-16: wsfulton
|
|
Add support for member const function pointers such as:
|
|
|
|
int fn(short (Funcs::* parm)(bool)) const;
|
|
|
|
Also fix parsing of references/pointers and qualifiers to member
|
|
pointers such as:
|
|
|
|
int fn(short (Funcs::* const parm)(bool));
|
|
int fn(short (Funcs::* & parm)(bool));
|
|
|
|
2017-03-10: wsfulton
|
|
Extend C++11 alternate function syntax parsing to support const and noexcept, such as:
|
|
|
|
auto sum1(int x, int y) const -> int { return x + y; }
|
|
auto sum2(int x, int y) noexcept -> int { return x + y; }
|
|
|
|
2017-02-29: tamuratak
|
|
[Ruby] #917 - Add Enumerable module to all container class wrappers. It was missing
|
|
for std::list, std::multiset, std::unordered_multiset and std::unordered_map.
|
|
|
|
2017-02-27: assambar
|
|
[C++11] Extend parser to support throw specifier in combination
|
|
with override and/or final.
|
|
|
|
2017-02-10: tamuratak
|
|
[Ruby] #883 - Add support for C++11 hash tables:
|
|
std::unordered_map
|
|
std::unordered_set
|
|
std::unordered_multimap
|
|
std::unordered_multiset
|
|
|
|
2017-02-08: jcsharp
|
|
[C#] #887 Improve std::vector<T> wrapper constructors -
|
|
Replace constructor taking ICollection with IEnumerable and also add IEnumerable<T>
|
|
constructor to avoid the boxing and unboxing overhead of the original constructor,
|
|
when the type parameter is a value type.
|