Recent commits ensure types are correctly stored in SwigType *. In
particular template parameters are enclosed within '<(' and ')>'.
Now we can confidently handle template parameters as really being
delimited as such to fix an infinite loop handling template expressions
containing '<' or '>'. The previous implementation only assumed
template parameters were delimited by '<' and '>'.
Issue #1037
108 lines
4.9 KiB
Text
108 lines
4.9 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.2.0 (in progress)
|
|
===========================
|
|
|
|
2022-11-22: wsfulton
|
|
#1037 Fix seg fault handling template parameter expressions containing '<='.
|
|
|
|
2022-11-18: wsfulton
|
|
Duplicate class template instantiations via %template now issue a warning and are ignored.
|
|
|
|
%template(Aint) A<int>;
|
|
%template(Aint2) A<int>; // Now ignored and issues a warning
|
|
|
|
example.i:7: Warning 404: Duplicate template instantiation of 'A< int >' with name 'Aint2' ignored,
|
|
example.i:6: Warning 404: previous instantiation of 'A< int >' with name 'Aint'.
|
|
|
|
A single empty template instantiation before a named instantiation is the one exception
|
|
for allowing duplicate template instantiations as the empty template instantation does not
|
|
create a wrapper for the template, it merely adds the instantiation into SWIG's internal
|
|
type system.
|
|
Duplicate empty template instantiations are quietly ignored.
|
|
|
|
%template() B<int>;
|
|
%template(Bint) B<int>; // OK
|
|
|
|
%template() C<int>;
|
|
%template() C<int>; // Quietly ignored now
|
|
%template(Cint) C<int>; // OK
|
|
|
|
Note that default template parameters are considered when looking for duplicates such as:
|
|
|
|
template <typename T, typename U = short> struct D {};
|
|
%template(Dint) D<int>;
|
|
%template(Dintshort) D<int, short>;
|
|
|
|
example.i:7: Warning 404: Duplicate template instantiation of 'D< int,short >' with name 'Dintshort' ignored,
|
|
example.i:6: Warning 404: previous instantiation of 'D< int >' with name 'Dint'.
|
|
|
|
Note that the following always was ignored, but that was because the chosen name was a
|
|
duplicate rather than the template being a duplicate:
|
|
|
|
%template(Eint) E<int>;
|
|
%template(Eint) E<int>; // Always has been ignored as a redefined identifier
|
|
|
|
The old warning was:
|
|
|
|
example.i:7: Warning 302: Identifier 'Eint' redefined (ignored) (Renamed from 'E< int >'),
|
|
example.i:6: Warning 302: previous definition of 'Eint' (Renamed from 'E< int >').
|
|
|
|
*** POTENTIAL INCOMPATIBILITY ***
|
|
|
|
2022-11-05: wsfulton
|
|
#2417 Fix -swiglib for Windows when building with CMake.
|
|
|
|
2022-11-02: wsfulton
|
|
#2418 Fix infinite loop handling non-type template parameters.
|
|
|
|
Fixes infinite loop due to () brackets in a non-type template
|
|
parameter containing an expression.
|
|
|
|
2022-10-28: wsfulton
|
|
[R] R rtypecheck typemaps
|
|
|
|
Further switch to use rtypecheck typemaps instead of hard coded logic.
|
|
The full switch to typemaps is deferred until swig-4.2 as it can't be fully
|
|
backwards compatible. For now a warning is provided to help the
|
|
transition. It provides the full typemap that should be placed into
|
|
a user's interface file, for example:
|
|
|
|
%typemap("rtype") int32_t * "integer"
|
|
void testmethod(int32_t * i);
|
|
void testmethod();
|
|
|
|
If there is no rtypecheck typemap for int32_t *, the warning shown is:
|
|
|
|
example.i:7: Warning 750: Optional rtypecheck code is deprecated. Add the
|
|
following typemap to fix as the next version of SWIG will not work without it:
|
|
%typemap("rtypecheck") int32_t * %{ (is.integer($arg) || is.numeric($arg)) %}
|
|
|
|
The warning is shown for any code that previously used "numeric", "integer" or
|
|
"character" for the rtype typemap. Copying the rtypecheck typemap as
|
|
shown into the user interface file will provide the appropriate fix and
|
|
the warning will disappear. This is important to do as swig-4.2 will
|
|
not be able to provide this helpful warning.
|
|
|
|
2022-10-27: wsfulton
|
|
[R] Allow NULL to be used in overloaded functions taking shared_ptr.
|
|
Also fixes special variable $argtype expansion in rtypecheck typemaps.
|
|
|
|
2022-10-26: wsfulton
|
|
[R] Improve R wrapper error message when calling overloaded methods
|
|
when incorrect types passed are passed to the overloaded methods.
|
|
|
|
Old unhelpful error message:
|
|
Error in f(...) : could not find function "f"
|
|
|
|
Example of new improved error message:
|
|
Error in use_count(k) :
|
|
cannot find overloaded function for use_count with argtypes (NULL)
|
|
|
|
2022-10-26: wsfulton
|
|
[R] #2386 Fix memory leak in R shared_ptr wrappers.
|
|
Fix leak when a cast up a class inheritance chain is required.
|