Version 1.3.34 (27 February 2008)
=================================

02/13/2008: wsfulton
            [R] Fix wrapping of global function pointer variables.

02/13/2008: wsfulton
            Add new special variables for use within %exception:
              $wrapname - language specific wrapper name
              $overname - if a method is overloaded this contains the extra mangling used on 
                          the overloaded method
              $decl     - the fully qualified C/C++ declaration of the method being wrapped 
                          without the return type
              $fulldecl - the fully qualified C/C++ declaration of the method being wrapped 
                          including the return type

02/12/2008: drjoe
            [R] Now setting S4 flag in SWIG created objects.  This
            fixes R-SWIG for 2.6 and warning for 2.6 failure has been removed.

02/11/2008: mgossage
            [Lua] Added a patch by Torsten Landschoff to fix the unary minus issue
            Ran 'astyle --style=kr -2' across lua.cxx to neaten it up

02/10/2008: wsfulton
            Bump SWIG_RUNTIME_VERSION to 4. This is because of the recently introduced API 
            change in the conversion functions, ie change in definition of swig_converter_func.
            Anyone calling SWIG_TypeCast must pass in a valid value for the new additional
            (third) parameter and then handle the newly created memory if the returned value
            is set to SWIG_CAST_NEW_MEMORY else a memory leak will ensue.

02/09/2008: wsfulton
            [Python] Experimental shared_ptr typemaps added. Usage is the same as the recently
            added Java and C# shared_ptr typemaps. Two macros are available, although these
            may well change in a future version:

            For base classes or classes not in an inheritance chain:
              SWIG_SHARED_PTR(PROXYCLASS, TYPE)
            For derived classes:
              SWIG_SHARED_PTR_DERIVED(PROXYCLASS, BASECLASSTYPE, TYPE)

            The PROXYCLASS is the name of the proxy class, but is only required for Java/C#.
            Example usage:

              %include "boost_shared_ptr.i"

              SWIG_SHARED_PTR(Klass, Space::Klass)
              SWIG_SHARED_PTR_DERIVED(KlassDerived, Space::Klass, Space::KlassDerived)

              namespace Space {
                struct Klass { ... };
                struct KlassDerived : Klass { ... };
              }

            Further details to follow in future documentation, but the following features
            should be noted:

            - Not restricted to boost::shared_ptr, eg std::tr1::shared_ptr can also be used.
            - Available typemap groups:
              (a) Typemaps for shared_ptr passed by value, reference, pointer and pointer 
                  reference.
            - (b) Typemaps for passing by raw value, raw pointer, raw reference, raw pointer
                  reference. 
            - The code being wrapped does not even have to use shared_ptr, SWIG can use
              shared_ptr as the underlying storage mechanism instead of a raw pointer due to 
              the typemaps in group (b) above.
            - No array support as shared_ptr does not support arrays.
            - This works quite differently to the usual SWIG smart pointer support when
              operator-> is parsed by SWIG:
              - An additional smart pointer class is not generated reducing code bloat in
                the wrappers.
              - Using smart pointers and raw pointers can be mixed seamlessly.
              - Missing constructors for the smart pointers is no longer a problem and so
                separate factory type functions do not have to be written and wrapped.
              - The implicit C++ shared_ptr< derived class > to shared_ptr< base class >
                cast also works in the target language. This negates the necessity to write
                an explicit helper cast function providing the upcast which would need
                calling prior to passing a derived class to a method taking a shared_ptr to
                a base class.

02/09/2008: wsfulton
            [Python] Add support for overriding the class registration function via a new
            "smartptr" feature. This is a very low level of customisation most users
            would never need to know. The feature will typically be used for intrusive 
            smart pointers along with additional typemaps. Example usage of the feature:

              %feature("smartptr", noblock=1) Foo { boost::shared_ptr< Foo > }
              class Foo {};

            The generated Foo_swigregister function will then register boost::shared < Foo >
            (SWIGTYPE_p_boost__shared_ptrTFoo_t instead of SWIGTYPE_p_Foo) as the underlying
            type for instantiations of Foo.

02/09/2008: wsfulton
            Features now supports the optional 'noblock' attribute for all usage of %feature. 
            When specified, the { } braces are removed from the feature code. This is identical
            in behaviour to usage of 'noblock' in typemaps and is used when the preprocessor
            is required to operate on the code in the feature and the enclosing { } braces
            are not required. Example:

              #define FOO foo
              %feature("smartptr", noblock="1") { FOO::bar }

            The preprocessor then reduces this as if this had been used instead:

              %feature("smartptr") "foo::bar"

02/01/2008: olly
	    [Python] Fix format string bug (SF#1882220).

01/31/2008: wsfulton
            Additions to the %types directive. Now the conversion / casting code can be
            overridden to some custom code in the %types directive, like so:

              %types(fromtype = totype) %{
                ... code to convert fromtype to totype and return ...
              %}

            The special variable $from will be replaced by the name of the parameter of the
            type being converted from. The code must return the totype cast to void *. Example:

              class Time;
              class Date;
              Date &Time::dateFromTime();

              %types(Time = Date) %{
                Time *t = (Time *)$from;
                Date &d = t->dateFromTime();
                return (void *) &d;
              %}

            resulting in the conversion / casting code looking something like:

              static void *_p_TimeTo_p_Date(void *x) {
                Time *t = (Time *)x;
                Date &d = t->dateFromTime();
                return (void *) &d;
              }

            This is advanced usage, please use only if you understand the runtime type system.

01/30/2008: mgossage
	    Small update to documentation in Typemaps.html, to warn about use of local 
	    variables in typemaps for multiple types.

01/25/2008: wsfulton
	    [Java] Fix bug reported by Kevin Mills in ARRAYSOFCLASSES typemaps where any
            changes made to an array element passed from Java to C are not reflected back
            into Java.

01/24/2008: mgossage
	    More updates to the configure script for detecting lua.
	    Also looks in /usr/include/lua*
	    Also changed typemaps.i not to check for NULL before freeing a pointer

01/21/2008: wsfulton
	    [Python] For STL containers, SWIG no longer attempts to convert from one
            STL container to another, eg from std::vector<int> to std::vector<double>
            or std::list<int> to std::vector<int> or even std::vector<Foo> to
            std::vector<Bar> as it previously did. In fact SWIG no longer attempts to
            convert any SWIG wrapped C++ proxy class that is also a Python sequence,
            whereas previously it would. Any non-SWIG Python sequence will still be
            accepted wherever an STL container is accepted. Overloaded methods using
            containers should be faster.

01/18/2008: wsfulton
	    [C#] Add 'directorinattributes' and 'directoroutattributes' typemap attributes
            for the imtype typemap. These should contain C# attributes which will
            be generated into the C# director delegate methods.

01/18/2008: olly
	    Fix handling of byte value 255 in input files on platforms where
	    char is signed (it was getting mapped to EOF).  Fixes SF#1518219.

01/16/2008: wsfulton
	    Fix template member variables wrapped by a smart pointer. Bug reported 
            by Robert Lupton.

01/14/2008: mgossage
	    Substantial changes to configure script for detecting lua.
	      Code can now link to liblua.a, liblua50.a or liblua51.a
	      It's also a lot neater now.

12/16/2007: wsfulton
	    [Perl] Backed out #1798728 - numbers can be passed to functions taking char *

12/16/2007: wsfulton
	    Fix #1832613 - Templates and some typedefs involving pointers or function pointers

12/12/2007: wsfulton
	    [Java] Fix #1632625 - Compilation errors on Visual C++ 6 when using directors.

12/12/2007: wsfulton
	    [Perl] Fix #1798728 - numbers can be passed to functions taking char *.

12/12/2007: wsfulton
	    Fix #1819847 %template with just one default template parameter 

              template<typename T = int> class Foo {...};
              %template(FooDefault) Foo<>;

12/12/2007: mgossage
	    [Lua] Small correction on Lua.html

12/09/2007: wsfulton
	    Apply patch #1838248 from Monty Taylor for vpath builds of SWIG.

12/08/2007: wsfulton
	    [Lua] Fixes to remove gcc-4.2 warnings

12/06/2007: wsfulton
	    Fix #1734415 - template template parameters with default arguments such as:

              template<typename t_item, template<typename> class t_alloc = pfc::alloc_fast >
                class list_t : public list_impl_t<t_item,pfc::array_t<t_item,t_alloc> > { ... };

12/04/2007: mgossage
	    [lua] Fix a bug in the class hierachy code, where the methods were not propagated, 
	    if the name ordering was in a certain order.
	    Added new example programs (dual, embed) and runtime tests for test-suite.

11/30/2007: wsfulton
	    Fix using statements using a base class method where the methods were overloaded.
            Depending on the order of the using statements and method declarations, these
            were previously generating uncompileable wrappers, eg:

              struct Derived : Base {
                virtual void funk();
                using Base::funk;
              };

