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.2 (in progress)
===========================

2020-02-13: ddurham2
            [Python] #1512 Fix memleak when using STL containers of shared_ptr objects.

2020-02-06: wsfulton
            [Python] #1673 #1674 Fix setting 'this' when extending a proxy class with __slots__.

2020-01-31: vadz
            [Ruby] #1651 Add std::auto_ptr<> typemaps.

2020-01-31: ZackerySpytz
            [Python] #1700 More robust error checking for failures in calls to Python C API:
            PyBytes_AsStringAndSize() and PyString_AsStringAndSize().

2020-01-31: vadz
            [Python] #1710 Fix crash parsing empty docstrings.

2020-01-30: Alzathar
            [R] #910 #914 Fix R memory leak on exception.

2020-01-30: richardbeare
            [R] #1511 Fix bug wrapping functions. These were previously incorrectly wrapped as if
            they were variables. This happened when 'get' or 'set' was in the name of the function
            or method, but sometimes also in some other circumstances. If you were using R
            attribute syntax to access these methods, you'll need to switch to calling them as R
            methods.

            *** POTENTIAL INCOMPATIBILITY ***

2020-01-24: etse-dignitas, wsfulton
            [C#, D, Java] #1533 Fix upcasting for shared_ptr's of templated types.

2020-01-16: mcfarljm
            #1643 #1654 When using -doxygen, fix segfault when nameless parameters or vararg parameters
            are used.

2020-01-16: mcfarljm
            #1632 #1659 Fix newline handling for doxygen "///" comments.

2020-01-14: mcfarljm
            #1647 #1656 Fix crash handling empty doxygen comments.

2020-01-14: mcfarljm
            #1608 Improve doxygen support.
            - Add support for \param[] commands such as: \param[in].
            - Optional arguments are marked as 'optional' in pydoc.
            - Improve support for \code commands so that other languages are supported as code blocks.
              Support added for java, c and py.  For example Python: \code{.py} ... \endcode
            - Fix doxygen handling of \em and \p tags for Python.

2020-01-13: wsfulton
            [Python] #1595 Python -builtin constructors silently ignored keyword arguments.
            Instead of silenty ignoring them, now a "TypeError: f() takes no keyword arguments"
            exception is thrown if keyword arguments are used. Hence constructors and normal methods/
            functions behave in the same way. Note, -keyword should be used with -builtin to obtain
            keyword argument support.

2020-01-05: jschueller shadchin
            [Python] #1670 #1696 Add missing field initializers introduced in python 3.8:
            tp_vectorcall and tp_print.

2020-01-05: friedrichatgc
            [Octave] #1688 Change swig_this() to use size_t instead of long for compatibility
            with Windows 64 bit.

2020-01-05: treitmayr
            [Ruby] #1692 #1689 Add support for Ruby 2.7

2019-12-30: treitmayr
            [Ruby] #1653 #1668 Fix code generated when using -globalmodule option.

2019-12-29: ZackerySpytz
            [OCaml] #1686 Fix compilation errors with OCaml 4.09.0.

2019-12-10: wsfulton
            #1679 Fix parsing of C++11 identifiers with special meaning (final and override) when
            they are used as part of the scope name of an identifier, such as a namespace name.

2019-11-26: wsfulton
            [C#] #1628 'out' or 'ref' used in a cstype typemap was not always stripped out in parts
            of director code generation.

2019-11-01: wsfulton
            [Python] #1595 Fix bug in support for keyword arguments (kwargs feature or -keyword)
            when using -builtin. The fix is in the argument error checking when wrapping zero
            argument constructors only.
