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 (8 Jun 2020)
==========================

2020-06-07  vigsterkr
            [Ruby] #1717 Nil fix mangling strings

2020-06-07  vadz
            #1748 Fix doxygen comments quoting issue

2020-06-07  munoah
            #1800 Escape spaces in file paths for dependencies (-M -MM etc)

2020-06-06  andreas-schwab
            [Ruby] #1801 Fix encoding on big endian systems when wrapping std::wstring.

2020-05-31  kwwette
            [Octave] #1789 error handling improvements and return error code on exit for SWIG wrapped modules.

2020-05-30  msteinbeck
            [D] #1593 Replace broken imports when using newer versions of D.

2020-05-29: ZackerySpytz
            [Python] #1716 Performance improvements converting strings when using Python >= 3.3.

2020-05-28: ZackerySpytz
            #1776 Quite dramatically decrease run times when generating very large interface files by changing
            some internal memory pool sizes.

2020-05-28: mcfarljm
            #1788 Fix handling of Doxygen \endlink command.

2020-05-24: vapier
            [Javascript] #1796 Fix pkg-config invocation in configure.

2020-04-30: kwwette
            [Octave] Fix exception raising for newer Octave versions
            Since (at least) Octave 5.1.0, the Octave error() function now raises a C++ exception,
            which if uncaught immediately exits a SWIG wrapper function, bypassing any cleanup code
            that may appear after a "fail:" label. This patch adds a "try { ... } catch(...) { }"
            block around the contents of SWIG wrapper functions to first execute the cleanup code
            before rethrowing any exception raised. It is backward compatible with earlier versions
            of Octave where error() does not raise an exception, which will still branch to the
            "fail:" block to execute cleanup code if an error is encountered.

            Note that the new "try { ... } catch(...) { }" block will localise any local variables
            used in typemaps that were NOT declared through SWIG's %typemap(...) syntax, so it's
            possible this could break existing SWIG wrappers which were implicitly sharing local
            variables between typemaps. This can be fixed, however, by declaring local variables
            which need to be shared between typemaps through SWIG's %typemap(...) syntax.

2020-02-18: ryannevell
            [Lua] #1728 Add support for LUA lightuserdata to SWIG_Lua_ConvertPtr.

2020-02-18: dmach
            [Ruby] #1725 Fix gcc -Wcatch-value warnings.

2020-02-14: treitmayr
            #1724 Fix wrapping of abstract user-defined conversion operators.

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.
