summaryrefslogtreecommitdiff
path: root/CHANGES.current
blob: ba8bc36ef9b3db1e7100d2c969cd25878c0e29c0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
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-25: olly
	    #2447 Fix undefined behaviour in swig's parser when handling
	    default parameter expressions containing method calls.

2022-11-22: wsfulton
            #1037 Fix seg fault handling template parameter expressions containing '<='
            or '>='.

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-13: olly
	    [PHP] #2419 Update the documentation to reflect that SWIG 4.1.0
	    dropped support for -noproxy when generating PHP wrappers.

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.