Version 1.3.23 (in progress)
============================

10/06/2004: wuzzeb (John Lenz)
            [TCL]
            - Fix bug reported by William A. Hoffman propagating clientdata
            between modules.  Added clientdata_prop.multicpptest to check for
            this bug.  The fix involved the following changes:
                + SwigType_clientdata_collect does not need to check
                types in r_resolved because we only want to propagate clientdata
                to typedefed classes, and r_mangled already takes care of typedefs.

                + SWIG_TypeRegister now copies the clientdata field correctly

                + Move SWIG_Guile_PropagateClientData function from guile module
                into common.swg, because we need to call it from both guile and tcl.

                + Add base_names to swig_class to delay the lookup of bases.  SWIG
                now exports the base names and only when the base swig_class is
                needed is SWIG_TypeQuery(name)->clientdata looked up.

            - conversion_ns_template testsuite test was failing because
            the name of the wrapped constructor function was not calculated
            correctly for structs.  Fixed.

10/06/2004: wsfulton
            Fixes for default arguments used in directors - in virtual
            methods and director constructors.

10/06/2004: mmatus
	    Fix the __cplusplus macro, and bug 1041170.
	    Now it is working as supposed, ie, you can safetly use

	      #ifdef __cplusplus
	      ...
	    
	    all over swig, including inside %defines and %{ %} bodies.

	    
                      *** POTENTIAL INCOMPATIBILITY ***

	    The old trick of using

	      #if __cplusplus

	    doesn't work any more. So, if you have your own typemaps
	    using that syntax, you will need to migrate them use
	    "#ifdef __cplusplus".



10/05/2004: wuzzeb (John Lenz)
            - Reorganize how runtime type information is stored and shared
	    between modules.  For chicken and mzscheme, I removed
	    the ability to use runtime libraries, while perl, tcl, python, and
	    ruby default to using the new method but can go back to the old
	    method by declaring SWIG_ALLOW_RUNTIME.

	    - line 582 in mzscheme.cxx was generating a segfault on 
	    imports.multicpptest, so I fixed it.

10/05/2004: wsfulton
            Fixes for %extend and overloaded static methods with default
            arguments.

10/05/2004: mmatus
	    - [python] Fix director + method with 'empty' throw, ie

		    struct A {
		      virtual int foo() throw();
		    };
		    
	      other languages should also easy to fix, look for
	      Getattr(n,"throw") in python.cxx.

	    - Fix director + destructor with 'empty' throw

		    struct A {
		      virtual ~A() throw();
		    };

	    - Now SWIG_FEAUTURES parse all and the same  options you
              can pass to swig in the command line.
	      
	      Maybe we should rename it to SWIG_OPTIONS

	    - New command line flag: -features <list>, as in

	        swig -features autodoc=3,director

	      ie, any global feature can be initialized from the
	      command line. This is mainly for testing, but user
	      can also take advantage of it.

10/04/2004: mmatus
	    - Properly qualify type in syntax as 'long(2)' or 'Foo()',
	      this solve old problem with default args, and probably
	      other problems around. However, the default arg problem
	      was also already solved by William (see bellow).

	    - Fix feature_set and feature_get methods. Before
	      they look from particular to general and keep the first
	      feature found. This didn't work well with templates.
	      Now the methods look from general to particular, and
	      override any found feature.

	    - Fix missing features for default const/dest, by really
	      'creating' the methods and applying the features.

	    - Fix return_const_value.i case by adding SwigValueWrapper<const T>
	      specialization.

	    - Fix %extend + overload, including overloading actual
              class methods. 

	    - Adding more cases in related files in the test-suite.  

10/04/2004: wsfulton
            Changes to the way default arguments are wrapped. Previously a single
            method was generated for each method that had default arguments. If
            a method had 5 arguments, say, of which 1 had a default argument
            then the call to the wrapped method would pass 5 arguments. The default
            value was copied into the wrapper method and used if the scripting
            language passed just 4 arguments. However, this was flawed as the
            default argument sometimes does not have global access, for example
            SWIG would generate code that couldn't compile when wrapping:

              class Tricky {
              public:
                void foo(int val = privatevalue);
                void bar(int val = Tricky::getDefault());
              private:
                static int getDefault();
                enum { privatevalue = 200 };
              };

            Also bugs in resolving symbols generated code that wouldn't compile, for example
            (probably fixable though):

              namespace Space {
                class Klass {
                };
                Klass constructorcall(const Klass& k = Klass());
              }

            The approach also does not work for statically typed languages (C# and Java)
            as these languages do not allow methods to have variable number of arguments.
            Although C# has a mechanism to pass a variable number of arguments they
            must be of the same type and are more like varargs.

            The new approach solves the above problems and wraps methods with default
            arguments as if the method was overloaded. So SWIG will now treat

              void foo(int val=0);

            as if it had parsed:

              void foo(int);
              void foo();

            The code generated is then exactly the same as if SWIG had parsed the two
            overloaded methods. The scripting languages count the arguments passed and call
            the appropriate method, just like overloaded methods. C# and Java are now able
            to properly wrap methods with default arguments by generating extra methods,
            again as if the method was overloaded, so for:

              void bar(string s="hello", double d=10.0, int i=0);

            the following proxy methods are generated:

              void bar(string s, double d, int i);
              void bar(string s, double d);
              void bar(string s);
              void bar();

            The new approach comes with a couple of minor knock on effects.

            1) SWIG support for default arguments for C (not C++) code no longer works.
            Previously you could have this interface:

              %{
              void foo(int val);
              %}
              void foo(int val=0);

            and call the wrapped method from a scripting language and pass no arguments
            whereupon the default of 0 was used. You can get the same behaviour for C
            code by using the "default" typemap:

              %typemap(default) int val "$1 = 0;";
              %{
              void foo(int val);
              %}
              void foo(int val);

            or you could of course compile your code as C++ if you want C++ features :) :

              %{
              void foo(int val=0);
              %}
              void foo(int val=0);

            A couple of SWIG's libraries used this C extension and these have been modified
            to use the "default" typemap. The "default" typemap is thus unchanged (and still
            is not and is not fully supported by C# and Java, and is likely to remain so).


            2) All features (%feature, %rename, %ignore etc) no longer work as if the method
            with default arguments is just one method. For example, previously

              %ignore foo(int);

            would have ignored the method completely. Now it will only ignore foo(int) but
            not the extra foo() method. Instead use:

              %ignore foo;

            to ignore them all. or

              %ignore foo(int);
              %ignore foo();

            This of course allows one to fine tune the wrapping, for example one could use:

              %rename(fooint) foo(int);
              %rename(foodefaults) foo();
              void foo(int val=0);

            and call them from any language like so:

              fooint(200)
              foodefaults()

            or for example ignore the extra overloaded method, so the defaults cannot be used:

              %ignore foo();
              void foo(int val=0);

                      *** POTENTIAL INCOMPATIBILITY ***

10/2/2004: mmatus
	   [Python]
	   - More cleaning up and uniformation on the Python Lib

	   - Added Robin's docstring patch, plus some fixes, plus
	     some extensions, see autodoc.i example in the test-suite,
	     and try using %feature("autodoc","extended").
	    
	     This patch is not a complete solution for the
	     documentation problem, just enough to inform python about
	     the parameter list.

	     The expected swig documentation support is far far away yet.
	     

10/1/2004: mmatus
	   - Fix the %callback feature (only used in ruby and python examples,
	     by now, but it should be generic), now member callbacks
	     are working again
	     
	   - Fix wrapping of functions pointers like

		 std::ostream& std::endl(std::ostream&);

	     ie, the ones that return references or enums.
	 
	   [Python] Add the %pythoncallback directive, which is 
	   an improved version of %callback, ie,

	     %pythoncallback(1) foo;
	     %pythoncallback(1) A::bar;
	     %pythoncallback(1) A::barm;

	     int foo(int a) {
	         return a;
	     }
  
	     struct A 
	     {
	       static int bar(int a);
	       int barm(int a);

	     };

             int foobar(int a, int (*pf)(int a));

	   in python you can use

             foo(2)
	     foobar(2,foo)
             A.bar(2)
	     foobar(2,A.bar)
          
           ie, no additional pointer elements are created, and
	   the original 'foo' and 'A.bar' can be used as parameters.

	   In the case of member fucntion however, still you need
	   to use the special variable Class::<fnc_name>_cb_ptr, ie:

 	     foobarm(3, a, A.barm_cb_ptr)
	   
	   we will try to fix this situation also, but later.  

	   [Python] Add more elements from the STL library, now
	   you can use

	     import std
	     std.cout << "hello " << 123 << std.endl

	   [Python] Fix in/out return mechanism, now swig will behave
	   as 1.3.21 but using a python list when needed. The problem
	   is that the types std::pair,std::vector,etc, use tuples,
	   and they interfer with the previous inout tuple type.

	   By using lists we solve the conflicts, swig acts as before,
	   but returns a list when more than one parameter are using
	   the OUT typemap. See the new inout.i example in the
	   test-suite.

            *** POTENTIAL INCOMPATIBILITY FOR PYTHON MODULE ***
		   
           [Python] Much better error messages for bad arguments, now
	   you always get the argument number where the error occurred.

09/27/2004: wsfulton
            Patch from Bill Clarke -
            1) Warning emitted when -importall and -includeall is used together,
               with -includeall taking precedence.
            2) Ensure SWIGIMPORTED is always defined when a file is being
               imported with %import. Note that this is not the same as SWIGIMPORT,
               which gets defined in all generated wrapper files.

09/26/2004: mmatus

	    - add %feature("exceptionclass") to identify a class used
	      as exception. Before swig identified and marked a class
	      using the "cplus:exceptionclass" attribute. However, the
	      class needed to appear on an throw() statement.  Now
	      swig keeps trying to identify the exception classes, as
	      before, but it also allows the user to mark a class by
	      using the %feature explicitly. (mostly relevant for
	      python and chicken)

	    [Python]

	    - fix -modern option + exceptions, which mix old class
	      style with the new one. So, we always need to emit
	      the "nonmodern" python code.

	    - add the "python:nondynamic" feature and its handler

	      now if you have
	      
	      %pythonnondynamic(1) A;
	      
	      struct A {
	       int a;
	       int b;
	      };

	      then, in the python side
	      
	      aa = A()
	      
	      aa.a = 1 # ok
	      aa.b = 2 # ok
	      aa.c = 3 # error, the class can not be extended dynamically.

	    
	    Since this is a feature, you can use

	      %pythonnondynamic(1);

            or 

	      %pythondynamic(0);
   
	    to force all the wrapped classes to be "nondynamic" ones.

	    The default, as in regular python, is that all the wrapped
	    classes are dynamics. So, careful with your spelling.

09/14/2004: mmatus 
	    - Support the -I- option.

	    - Differentiate between %include <file> and %include "file".
	      This fix several corner cases.

	    
	    [Python] Several patches:

	    - Normalize the Lib file names: 
		*.swg internal files, 
		*.i   user files.

	    - Fix Char[ANY] typemaps, so they also delete any extra '\0' chars,
	      now they behave as before (1.3.21). Still, you can use
	      the SWIG_PRESERVE_CARRAY_SIZE macro if you need to
	      preserve the original size (see pystrbase.swg).

	    - Add the Char FIXSIZE[ANY] typemaps, to preserve the
              original C array sizes (see above). Though, you can't
              use them yet since %apply and arrays are not working
              together.

            - Add pyfragments.swg, now the user can add fragments
	      to override the default ones.


>>>>>>> 1.292
09/10/2004: wsfulton
            Patch from Bill Clarke which fixes spurious preprocessor bug which
            shows on Solaris and gcc, eg:
                Warning(202): Could not evaluate '!defined(SWIGJAVA) &&
                !(defined(SWIGCSHARP)'
            Also fixes a bug where '#if "a" == "b" == 1' wouldn't have worked 

09/10/2004: wsfulton
            Restored multiple build directories for the test-suite. Patch from
            Bill Clarke.

09/06/2004: wsfulton
            Added the missing runtime.dsp Visual Studio project files for the
            import examples to work.

