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

2021-05-04: olly
	    [PHP] #2014 Throw exceptions instead of using errors

	    Parameter type errors and some other cases in SWIG-generated wrappers
	    now throw a PHP exception, which is how PHP's native parameter handling
	    deals with similar situations.

2021-05-17: adr26
            [Python] #1985 Fix memory leaks:

            1. Python object references were being incorrectly retained by
            SwigPyClientData, causing swig_varlink_dealloc() never to run / free
            memory. SwigPyClientData_New() / SwigPyClientData_Del() were updated
            to fix the object reference counting, causing swig_varlink_dealloc()
            to run and the memory swig_varlink owns to be freed.

            2. SwigPyClientData itself was not freed by SwigPyClientData_Del(),
            causing another heap leak. The required free() was added to
            SwigPyClientData_Del()

            3. Fix reference counting/leak of python cached type query

            4. Fix reference counting/leak of SwigPyObject dict (-builtin)

            5. Python object reference counting fixes for out-of-memory
            scenarios were added to: SWIG_Python_RaiseOrModifyTypeError(),
            SWIG_Python_AppendOutput(), SwigPyClientData_New(),
            SwigPyObject_get___dict__() and SwigPyObject_format()

            6. Add error handling for PyModule_AddObject() to
            SWIG_Python_SetModule() (failure could be caused by OOM or a name
            clash caused by malicious code)

2021-05-13: olly
	    [UFFI] #2009 Remove code for Common Lisp UFFI.  We dropped support
	    for it in SWIG 4.0.0 and nobody has stepped forward to revive it in
	    over 2 years.

2021-05-13: olly
	    [S-EXP] #2009 Remove code for Common Lisp S-Exp.  We dropped
	    support for it in SWIG 4.0.0 and nobody has stepped forward to
	    revive it in over 2 years.

2021-05-13: olly
	    [Pike] #2009 Remove code for Pike.  We dropped support for it in
	    SWIG 4.0.0 and nobody has stepped forward to revive it in over 2
	    years.

2021-05-13: olly
	    [Modula3] #2009 Remove code for Modula3.  We dropped support for it
	    in SWIG 4.0.0 and nobody has stepped forward to revive it in over 2
	    years.

2021-05-13: olly
	    [CLISP] #2009 Remove code for GNU Common Lisp.  We dropped support
	    for it in SWIG 4.0.0 and nobody has stepped forward to revive it in
	    over 2 years.

2021-05-13: olly
	    [Chicken] #2009 Remove code for Chicken.  We dropped support for it
	    in SWIG 4.0.0 and nobody has stepped forward to revive it in over 2
	    years.

2021-05-13: olly
	    [Allegrocl] #2009 Remove code for Allegro Common Lisp.  We dropped
	    support for it in SWIG 4.0.0 and nobody has stepped forward to
	    revive it in over 2 years.

2021-05-04: olly
	    [PHP] #1982 #1457 https://sourceforge.net/p/swig/bugs/1339/
	    SWIG now only use PHP's C API to implement its wrappers, and no
	    longer generates PHP code to define classes.  The wrappers should
	    be almost entirely compatible with those generated before, but
	    faster and without some previously hard-to-fix bugs.

	    The main notable difference is SWIG no longer generates a .php
	    wrapper at all by default (only if %pragma(php) code=... or
	    %pragma(php) include=... are specified in the interface file).
	    This also means you need to load the module via extension=...
	    in php.ini, rather than letting the dl() in the generated
	    .php wrapper load it (but dl() has only worked for command-line
	    PHP for some years now).

	    *** POTENTIAL INCOMPATIBILITY ***

2021-04-30: olly
	    #1984 Remove support for $source and $target.
	    These were officially deprecated in 2001, and attempts to use them have
	    resulted in a warning (including a pointer to what to update them to)
	    for most if not all of that time.

2021-04-27: wsfulton
            #1987 [Java] Fix %interface family of macros for returning by const
            pointer reference.

2021-04-19: olly
	    Fix use of uninitialised variable in the generated code for an
	    empty typecheck typemap, such as the dummy one we include for
	    std::initializer_list.

2021-04-12: olly
	    #1777 [Python] Specifying -py3 now generates a check for Python
	    version >= 3.0.

2021-03-26: olly
	    [PHP] Add PHP keywords 'fn' (added in 7.4) and 'match' (added in
	    8.0) to the list SWIG knows to automatically rename.

2021-03-23: wsfulton
            #1942 [Python] Fix compilation error in wrappers when using -builtin
            and wrapping varargs in constructors.

2021-03-22: goto40
            #1977 Fix handling of template template parameters.

2021-03-21: olly
	    #1929, #1978 [PHP] Add support for PHP 8.

2021-03-19: wsfulton
            #1610 Remove -ansi from default compilation flags.

2021-03-19: dot-asm
            #1934 [Java] Clean up typemaps for long long arrays.

2021-03-19: olly
	    #1527 [PHP] Improve PHP object creation in directorin case.
	    Reportedly the code we were using in this case gave segfaults in
	    PHP 7.2 and later - we've been unable to reproduce these, but the
	    new approach is also simpler and should be bit faster too.

2021-03-18: olly
	    #1655 [PHP] Fix char* typecheck typemap to accept PHP Null like the
	    corresponding in typemap does.

2021-03-18: olly
	    #1900, #1905 [PHP] Fix wrapping of overloaded directed methods with
	    non-void return.

2021-03-11: murillo128
            #1498 [Javascript] Support type conversion.

2021-03-06: nshmyrev
            #872 [Javascript] Various typemap issues in arrays_javascript.i fixed.

2021-03-03: vaughamhong
            #577 [Javascript] Implemented SetModule/GetModule for JSC to allow type sharing
            across modules.

2021-03-01: xantares, Oliver Buchtala, geographika
            #1040 Add support for building SWIG with CMake. See documentation in Windows.html.

2021-03-01: vadz
            #1952 Fix incorrect warning "Unknown Doxygen command: ."

2021-02-28: p2k
            #969 [Javascript] v8/node - prevent crash calling a constructor without new keyword.

2021-02-28: alecmev
            #405 #1121 [Javascript] Fix OUTPUT typemaps on methods that don't return void.
            The output value is appended to the return value.

2021-02-26: murillo128, wsfulton
            #1269 [Javascript] Fix handling of large positive unsigned long and
            unsigned long long values.

2021-02-24: tomleavy, yegorich, tungntpham
            #1746 [Javascript] Add support for Node v12, v14 and v16.
            SWIG support for Node is now for v6 and later only.

2020-02-09: ZackerySpytz
            #1872 Fix typos in attribute2ref macros.

2020-10-10: wsfulton
            [Javascript] Fix so that ccomplex.i interface to file can be used.

2020-10-10: wsfulton
            #252 complex can now be used as a C identifier and doesn't give a syntax error.

2020-10-10: lpsinger
            #1770 Correct C complex support.
            _Complex is now parsed as a keyword rather than complex as per the C99 standard.
            The complex macro is available in the ccomplex.i library file along with other
            complex number handling provided by the complex.h header.

2020-10-07: ZackerySpytz
            [Python] #1812 Fix the error handling for the PyObject_GetBuffer() calls in
            pybuffer.i.

2020-10-07: treitmayr
            #1824 Add missing space in director method declaration returning
            const pointer.

2020-10-07: adelva1984
            #1859 Remove all (two) exceptions from SWIG executable.

2020-09-25: wsfulton
            [C#, Java] #1874 Add ability to change the modifiers for the interface
            generated when using the %interface macros.

            For C# use the 'csinterfacemodifiers' typemap.
            For Java use the 'javainterfacemodifiers' typemap.

            For example:

              %typemap(csinterfacemodifiers) X "internal interface"


2020-09-24: geefr
            [C#] #1868 Fix wchar_t* csvarout typemap for member variable wrappers.

2020-08-28: wsfulton
            [Java] #1862 Fix crashes in swig_connect_director during director class construction
            when using the director class from multiple threads - a race condition initialising
            block scope static variables. The fix is guaranteed when using C++11, but most
            compilers also fix it when using C++03/C++98.

2020-08-16: wsfulton
            [Python] Add missing initializer for member ‘_heaptypeobject::ht_module’ when using
            -builtin to complete Python 3.9 support.

2020-08-16: wsfulton
            [Python] Remove PyEval_InitThreads() call for Python 3.7 and later as Python calls
            it automatically now. This removes a deprecation warning when using Python 3.9.

2020-08-15: wsfulton
            [Python] All Python examples and tests are written to be Python 2 and Python 3
            compatible, removing the need for 2to3 to run the examples or test-suite.

2020-08-13: wsfulton
            [C#] Add support for void *VOID_INT_PTR for member variables.

2020-07-29: chrisburr
            #1843 [Python] Compilation error fix in SwigPyBuiltin_SetMetaType when using PyPy.

2020-06-14: ZackerySpytz
            #1642 #1809 Fix virtual comparison operators in director classes - remove incorrect
            space in the function name, for example, operator= = is now operator==.
