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

2024-04-12: pfusik
            [Javascript] #2869 Fix JavaScript _wrap_getCPtr on 64-bit Windows

2024-04-12: wsfulton
            [Javascript, MzScheme, Python, Ruby] #202 Remove the vast majority of the
            /*@SWIG:...*/ locator strings in the generated wrappers for these 4 languages
            to help with reproducible builds.

2024-04-08: thewtex
            [Python] #2856 Include stdlib.h for more recent Python Stable ABI

2024-03-28: olly
	    Fix preprocessor to handle C-style comment ending **/ in macro argument.

2024-03-27: wsfulton
            [Python] #2844 Fix for using more than one std::string_view type in a method.

2024-03-27: wsfulton
            [R] #2847 Add missing std::vector<long> and std::vector<long long> typemaps
            which were missing depending on whether or not SWIGWORDSIZE64 was defined.

2024-03-25: wsfulton
            [Python] #2826 Stricter stable ABI conformance.
            1. Use Py_DecRef and Py_IncRef when Py_LIMITED_API is defined instead of
               macro equivalents, such as Py_INCREF.
            2. Don't use PyUnicode_GetLength from python-3.7 and later.
            3. Use PyObject_Free instead of deprecated equivalents.

2024-03-25: olly
	    #2848 Fix elision of comma before ##__VARARGS__ which we document
	    as supported but seems to have not worked since before 2009.

2024-03-11: wsfulton
            [C#] #2829 Improve handling and documentation of missing enum base type
            information.

2024-03-07: wsfulton
            [Ocaml] Fix SWIGTYPE MOVE 'in' typemap to fix compilation error.

2024-03-07: wsfulton
            Add SWIGTYPE MOVE 'typecheck' typemaps to remove warning 472 
            (SWIGWARN_TYPEMAP_TYPECHECK_UNDEF).

2024-03-06: wsfulton
            Add support for std::unique_ptr & typemaps. Non-const inputs implement
            move semantics from proxy class to C++ layer, otherwise const inputs
            and all reference returns behave like any other lvalue reference to a class.

2024-03-06: wsfulton
            [Javascript, MzScheme, Octave] Support NULL being passed into char* typemaps.

2024-03-06: christophe-calmejane,wsfulton
            #2650 Add support for movable std::unique_ptr by adding in std::unique_ptr &&
            input typemaps. The std::unique && output typemaps do not support move
            semantics by default and behave like lvalue references.

2024-03-06: wsfulton
            Add missing use of move constructor instead of copy constructor when
            passing movable types by value. This was previously implemented only for
            parameters passed to a global function or static member function and is
            now extended to parameters passed to member methods as well as constructors.

2024-03-01: olly
	    [Java] #2819 Suppress Java removal warnings for uses of
	    System.runFinalization().  SWIG will need to stop relying on
	    finalize methods, but we know that and meanwhile these warnings
	    make the testsuite output noisy.  Fix use of deprecated form
	    of Runtime.exec() in the doxygen example.

2024-02-28: wsfulton
            #1754 Fix compilation errors in generated code when instantiating a templated
            static method within a template (non-static methods and constructors were
            always okay). For example:

              template <typename T> class X {
                template <class InputIterator>
                  static void fn(InputIterator first, InputIterator last) { ... }
              };
              class SimpleIterator { ... };

              %extend X<int> {
                %template(fn) fn<SimpleIterator>;
              }
