summaryrefslogtreecommitdiff
path: root/CHANGES
diff options
context:
space:
mode:
authorMarcelo Matus <mmatus@acms.arizona.edu>2004-11-15 23:00:40 +0000
committerMarcelo Matus <mmatus@acms.arizona.edu>2004-11-15 23:00:40 +0000
commit04b8c5968cfc600a276aa0cf3b8c0a9f7aec87f8 (patch)
treec4f7f62308ca4c809ce02376a924df447d34ed20 /CHANGES
parent0d9df55066a4b61e341d3dafd566cae3cc406fd0 (diff)
downloadswig-04b8c5968cfc600a276aa0cf3b8c0a9f7aec87f8.tar.gz
updates for 1.3.24
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@6742 626c5289-ae23-0410-ae9c-e8d60b6d4f22
Diffstat (limited to 'CHANGES')
-rw-r--r--CHANGES1141
1 files changed, 1141 insertions, 0 deletions
diff --git a/CHANGES b/CHANGES
index a777078ab..68056d19d 100644
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,1147 @@ SWIG (Simplified Wrapper and Interface Generator)
See CHANGES.current for current version.
+Version 1.3.23 (November 11, 2004)
+=================================
+
+12/05/2004: wsfulton
+ Patch #982753 from Fabrice Salvaire: Adds dependencies generation for
+ constructing makefiles. New command line options -MF -MD -MMD to work
+ with the current options -M and -MM. These options are named the same
+ and work the same as in gcc.
+
+12/05/2004: wsfulton
+ %ignore/%rename changes for methods with default arguments to mirror
+ %feature behaviour. See previous entry.
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+11/04/2004: wsfulton
+ %feature improvements for fine tuning when wrapping methods with
+ default arguments. Any %feature targeting a method with default arguments
+ will apply to all the extra overloaded methods that SWIG generates if the
+ default arguments are specified in the feature. If the default arguments are
+ not specified in the feature, then the feature will match that exact
+ wrapper method only and not the extra overloaded methods that SWIG generates.
+ For example:
+
+ %feature("except") void hello(int i=0, double d=0.0);
+ void hello(int i=0, double d=0.0);
+
+ will apply the feature to all three wrapper methods, that is:
+
+ void hello(int i, double d);
+ void hello(int i);
+ void hello();
+
+ If the default arguments are not specified in the feature:
+
+ %feature("except") void hello(int i, double d);
+ void hello(int i=0, double d=0.0);
+
+ then the feature will only apply to this wrapper method:
+
+ void hello(int i, double d);
+
+ and not these wrapper methods:
+
+ void hello(int i);
+ void hello();
+
+ This has been introduced to make %feature more powerful to ease the migration
+ to new default arguments wrapping approach.
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+ If you previously had a %feature and didn't specify the default arguments,
+ you will have to add them in now or you can obtain the original behaviour
+ by using %feature("compactdefaultargs").
+
+11/04/2004: wsfulton
+ [C#] Typemaps for std::vector added into std_vector.i. The proxy classes
+ generated are modelled on the .NET ArrayList class. This isn't quite
+ ready for general consumption yet, but will work with vectors of primitive
+ types and some classes.
+
+10/3/2004: wuzzeb (John Lenz)
+ [GUILE] The -scm interface is now the default. The old GH interface can
+ still be enabled by passing -gh to SWIG.
+
+10/2/2004: mmatus
+
+ - More fixes for namespace + class declarations.
+ As an extra bonus, we get %template support for static/members class
+ methods, ie, now you can say:
+
+ namespace space {
+ struct A
+ {
+ template <class Y>
+ static void fooT(Y y) { }
+ };
+ }
+
+ struct B
+ {
+ template <class Y>
+ void barT(Y y) {}
+ };
+
+ %template(foo) space::A::fooT<double>;
+ %template(foo) space::A::fooT<int>;
+ %template(foo) space::A::fooT<char>;
+
+ %template(bar) B::barT<double>;
+ %template(bar) B::barT<int>;
+ %template(bar) B::barT<char>;
+
+ and call
+
+ A.foo(1)
+ b = B()
+ b.bar(1)
+
+ note the the methods are emitted inside the classes,
+ and hence, the %template name refers to the 'member'
+ method name, not a global namespace name.
+
+10/31/2004: mmatus
+ - Solve namespace + class declarations, as in
+
+ namespace foo {
+ struct Bar;
+ struct Foo {
+ };
+ }
+
+ struct foo::Bar : Foo {
+ };
+
+ see namespace_class.i for more examples.
+
+ - Fix %template directive to properly use namespaces,
+ including the case:
+
+ namespace one
+ {
+ template <typename T>
+ struct Ptr {};
+ }
+
+ namespace one
+ {
+ struct Obj1 {};
+ typedef Ptr<Obj1> Obj1_ptr;
+ %template(Obj1_ptr) Ptr<Obj1>;
+ }
+
+ namespace two
+ {
+ struct Obj2 {};
+ typedef one::Ptr<Obj2> Obj2_ptr;
+ %template(Obj2_ptr) one::Ptr<Obj2>;
+ }
+
+ this is done by using the namespace name 'one' to create
+ a namespace node to emit the template instantiation,
+ just as before, but the template parameters are resolved
+ and qualified in the current namespace ('one' or 'two').
+ This is same way that typedef works.
+
+ This resolve the smart_pointer_namespace2.i case, and at
+ the same time, several other ones where before swig was
+ generating the
+
+ "Can't instantiate template 'xx' inside namespace 'yy'"
+
+ error message. In fact, that error doesn't exist
+ anymore. You can only get an error if you use a bad
+ namespace name or so.
+
+10/30/2004: mmatus
+ - [ruby] Directors fixes:
+ - enums and std::strings are working now (several
+ reports in bug track system)
+ - added patch 1025861 for director + exceptions
+
+ *** Attention ***: ruby with directors + protected
+ members work with version 1.7+. Older versions seems to
+ have a broken signature for'rb_protect'.
+
+ If you need to use an old version, look at
+
+ http://excruby.sourceforge.net/docs/html/ruby__hacks_8hpp-source.html
+ for workarounds.
+
+ - [ruby] Fix memory allocation problem in typemap (bug 1037259)
+
+ - [tcl] Fix (enums|constants) + namespace option
+ (reported by jason.m.surprise@intel.com).
+
+ - [perl] Add patch 962168 for multiple inheretance
+
+ - Fix 'defined' as variable name.
+
+10/29/2004: wsfulton
+ Seg fault fix for global scope operator used for friend methods:
+
+ class B {
+ friend void ::globalscope();
+ ...
+ };
+
+10/28/2004:mmatus
+ - Added module and swig option "templatereduce" to force swig
+ to reduce any type needed with templates, ie, in these cases
+
+ %module("templatereduce") test
+
+ template <class T> struct A { };
+
+ typedef int Int;
+ %template(A_Int) A<Int> ==> %template(A_Int) A<int>
+
+ typedef B* Bp;
+ %template(A_Bp) A<Bp> ==> %template(A_Bp) A<B*>
+
+ swig reduces the types Int and Bp to their primitives
+ int and B*. This is closer to the usual compiler
+ resolution mechanism, and it is really needed sometimes
+ when you mix templates + typedefs + specializations.
+
+ Don't use it if you don't have any problem already,
+ since the type reduction can interfere with some
+ user typemaps, specially if you defined something like
+
+ typedef int Int;
+ %typemap(in) Int ...;
+
+ in this case, when you use the "templatereduce" option,
+ swig will ignore the user typemap, since the "typedef int Int"
+ will take precedence, and the usual "int" typemap will be
+ applied.
+
+ Note that the previous case is not common, and should be
+ avoided, ie, is not recommended to use a typedef and a
+ typemap at the same time, specially if you are going to
+ use templates + specializations.
+
+ - Directors:
+
+ virtual destructor is always emitted now, this doesn't
+ cause any harm, and could solve some nasty and
+ mysterious errors, like the one mentioned by Scott.
+
+ also the destructor is not in-lined, so, that can solve
+ some other mysterious errors when mixing directors +
+ imports + embedded applications + some specific compilers.
+
+10/27/2004: wsfulton
+ [C#] typemaps.i library file with INPUT, OUTPUT and INOUT typemaps added.
+
+10/27/2004: wsfulton
+ [Java] std::wstring typemap fixes in std_string.i from Russell Keith-Magee.
+
+10/25/2004: mmatus
+
+ - Using + namespace is working now (using_namespace.i).
+
+ - Derived + nested classes is working now
+ (deriver_nested.i), but of course, we are still waiting
+ for the nested class support.
+
+ - Directors:
+ - unnamed parameters support,
+
+ - protected constructor support (automatic and with
+ dirprot mode),
+
+ - detection of really needed protected declarations
+ (members and constructors) now is done automatically.
+ Even if you don't use the 'dirprot' mode, swig will
+ wrap what is minimally needed (and protected) for the
+ code to compile.
+
+ what is public, as usual, is always wrapped, and if
+ you use the 'dirport'
+
+
+ - Final fixes for the OSS to compile with SWIG 1.3.23 (my
+ very very ugly C++ + templates + everything mounters wrap).
+
+10/25/2004: wsfulton
+ [C#] New commandline option -dllimport. This enables one to specify
+ the name of the DLL for the DllImport attribute. Normally this name
+ comes from the module name, so now it is possible to override this:
+
+ swig -csharp -dllimport xyz example.i
+
+ will generate for all the wrapped PInvoke methods:
+
+ [DllImport("xyz", EntryPoint="...")]
+ public static extern ...
+
+ The wrappers from many different SWIG invocations can thus be compiled
+ into one DLL.
+
+ A new special variable $dllimport can also be used in typemaps, pragmas,
+ features etc. This will get translated into the value specified by -dllimport
+ if specified, otherwise the module name.
+
+10/22/2004: wsfulton
+ [Java] Patch #1049496 from Scott Michel fixes directors methods with
+ enums when wrapped with typesafe or proper Java enums.
+
+10/21/2004: wsfulton
+ Fixes for default arguments in director constructors (Python, Ruby, Ocaml).
+
+10/21/2004: mmatus
+ - [Python] Add the '-cpluscast' option to enable the 'new'
+ C++ casting operators, such as 'static_cast', inside the
+ typemaps. By default swig use the old C cast style, even
+ when parsing C++.
+
+ - [Python] Add the '-new_vwm' option to enable the new
+ SwigValueWrapper mode. Now this is mainly for testing
+ that the typemaps are really safe for any future
+ solution, but you can use it if you have a very strange
+ error with default cosntructors missing + %apply +
+ %typemap, and if everything else fails (see
+ valuwrapper_opaque.i for alternative and current
+ solutions). If you are a user that don't know what is
+ SwigValueWrapper, don't even try it.
+
+ - [Python] Add the '-noh' option to be used with directors
+ and when you prefer to disable the generation of the
+ director header file. If not used, swig will work as
+ usual generating both the wrap.cxx and wrap.h files. If
+ you use it, swig will only generate wrap.cxx.
+
+10/21/2004: wuzzeb (John Lenz)
+ - If you define SWIG_TYPE_TABLE when compiling a wrapper file,
+ the runtime types will be stored in the given type table name.
+ Using this, you can seperate different modules to share their
+ own type systems. -DSWIG_TYPE_TABLE=Mytable
+
+ - [Python] If you define SWIG_STATIC_RUNTIME then the type information
+ will be static to this wrapper. Nothing will be shared with any
+ other modules
+
+ - [Python] If you define SWIG_LINK_RUNTIME, then instead of using
+ the new way of sharing type information, the wrapper will expect
+ to be linked against the Lib/linkruntime.c file. Any modules compiled
+ with SWIG_LINK_RUNTIME and linked against linkruntime.c will all
+ share type information.
+
+10/20/2004: mmatus
+ - [Python] Initial fix for python/import example. Please
+ update the Makefile (autoconf, configure, etc, expert),
+ since now probably is only working with g++, icc and a
+ few other compilers that have the -shared option.
+
+ We need to create additional shared libraries for the
+ virtual destructors. Old and usually forgotten C++
+ requirement.
+
+ Same fix need to be used in perl, I think.
+
+ - [Python] Fix generation of header file for directors,
+ now directors.swg is also included, so, it can be really
+ used from C++, and it solves some problem with compiler
+ that require that, even with the simple swig inclusion.
+
+ - [Python] Reordering the methods and moving some bodies
+ outside the class declaration. This is needed due to
+ some gcc-2.96 internal compiler errors. It seems the
+ PYTHON class is getting too large to been declared and
+ defined at the same time.
+
+ - Add the -oh option to change the output header file name
+ if needed:
+
+ swig -c++ -python test.i -o test.CC -oh test.HH
+
+ this is mainly needed when using directors, and if the
+ current default header file name is not good for you,
+ which is generated as follow:
+
+ swig -c++ -python test.i => test_wrap.h
+ swig -c++ -python test.i -o test.CC => test.h
+
+
+10/20/2004: wsfulton
+ 1) Compact default arguments feature added. This feature allows one
+ to use the default argument code generation that was used in
+ SWIG-1.3.22 and earlier versions. It produces more compact wrappers
+ as only one wrapper method is generated for any method with default
+ arguments. So the advantage is it generates less code but has the
+ original limitations, like it it does not work with all default arguments
+ and default arguments cannot be taken advantage of in the strongly typed
+ languages (C# and Java). It is implemented via the usual %feature mechanism:
+
+ %feature("compactdefaultargs");
+
+ 2) Keyword arguments (kwargs) are working again for default arguments
+ in the languages that support it, ie, Python and Ruby. The new default
+ argument wrapping approach using overloaded methods cannot support kwargs
+ so the compact default argument feature is automatically turned on when
+ kwargs are specified, by %feature("kwargs").
+
+ 3) Compact default arguments are also automatically turned on when wrapping
+ C (not C++) code. This is to support the bizarre notion of default arguments
+ for C code.
+
+10/20/2004: wsfulton
+ Overloaded templated functions in namespaces also working now.
+ Templated functions with default arguments in namespaces too.
+
+10/19/2004: mmatus
+
+ - Allow to disable the new SwigValueWrapper mechanism,
+ if you add the following line in your language main.
+
+ /* Turn on safe value wrapper use mode */
+ Swig_value_wrapper_mode(1);
+
+
+ Now is only active in python. All the other languages
+ are using the old resolution, but they can also use the
+ "valuewrapper"/"novaluewrapper" features to fix some
+ of the old broken cases. Note, however, that not all
+ the broken cases can be solved in that way.
+
+ The new mechanism seems to be working fine in perl, ruby
+ and tcl, but failing in some typemaps in java.
+
+ Hence, is upto the language maintainer to test it, and
+ decide to enable it or not.
+
+ Look at the valuewrapper_opaque.i for examples.
+
+ - Fix more SwigValueWrapper cases when the new mechanism
+ is active. Now it also check for local typemap
+ variables, see valuewrapper_opaque.i for an example when
+ this is needed. But again, this extra checking will only
+ be activated when using the new value wrapper mode.
+
+ - [Python] Fix variable wrapping of classes with private
+ assign operators. It should be easy to fix in all the
+ other modules, instead of checking
+
+ if (!Getattr(n,"immutable")) ...
+
+ you need to verify
+
+ if (is_assignable(n)) ...
+
+ Look at the private_assign.i for an example.
+
+10/18/2004: mmatus
+ - %features "director"/"nodirector" now work as expected.
+ - General fixes in %feature to resolve function decl
+ properly,
+
+ %feature("hello") foo();
+ char foo() -> f() // was working
+ char *foo() -> f().p // it wasn't
+
+
+ - Template + specialization + default template args now is
+ working, (don't confuse with template + default arg
+ values, that was solved before), now this ugly case is
+ working:
+
+ template <class T, class A = Alloc<T> >
+ struct Vector
+ {
+ Vector(T a){}
+ };
+
+ template <>
+ struct Vector<double>
+ {
+ Vector(){}
+ int foo() { return 0; }
+ };
+
+ %template(V_c) Vector<char, Alloc<char> >;
+ %template(V_i) Vector<int>; // picks Vector<int,Alloc<int> >
+ %template(V_d) Vector<double>; // picks the specialization
+
+ this is needed for automatic STL support (later will
+ be).
+
+ - Fix the template + typedef errors in test-suite, which
+ probably will fix another group of strange template +
+ namespaces + typedefs errors.
+
+ - %warnfilter is working better now, parser.y tries to use
+ them when needed.
+
+ - **** New default type resolution method (stype.c) *****
+
+ It preserves the original mixed types, then it goes
+ 'backward' first deleting the qualifier, then the inner
+ types, for example:
+
+ typedef A *Aptr;
+ const Aptr&;
+ r.q(const).Aptr -> r.q(const).p.SWIGTYPE
+ r.q(const).p.SWIGTYPE -> r.p.SWIGTYPE
+ r.p.SWIGTYPE -> r.SWIGTYPE
+ r.SWIGTYPE -> SWIGTYPE
+
+ enum Hello {};
+ const Hello& hi;
+ r.q(const).Hello -> r.q(const).enum SWIGTYPE
+ r.q(const).enum SWIGTYPE -> r.enum SWIGTYPE
+ r.enum SWIGTYPE -> r.SWIGTYPE
+ r.SWIGTYPE -> SWIGTYPE
+
+ int a[2][4];
+ a(2).a(4).int -> a(ANY).a(ANY).SWIGTYPE
+ a(ANY).a(ANY).SWIGTYPE -> a(ANY).a().SWIGTYPE
+ a(ANY).a().SWIGTYPE -> a(ANY).p.SWIGTYPE
+ a(ANY).p.SWIGTYPE -> a(ANY).SWIGTYPE
+ a(ANY).SWIGTYPE -> a().SWIGTYPE
+ a().SWIGTYPE -> p.SWIGTYPE
+ p.SWIGTYPE -> SWIGTYPE
+
+ before it always stops after finding ref/pointer/enum/array/etc.
+
+ Now, then, you can define (use and apply) 'higher' typemaps such as:
+
+ %typemap(in) SWIGTYPE* const&
+ %typemap(out) char FIXSIZE[ANY]
+ %typemap(in) SWIGTYPE* const&
+ %typemap(in) const enum SWIGTYPE&
+ %typemap(in) SWIGTYPE[ANY][ANY]
+ %typemap(in) const char (&)[ANY]
+
+ It is possible with this change that previous typemaps
+ that were defined (but ignored), now will start to work.
+
+ Also, it is necessary check for the '%typemap(varin) SWIGTYPE[]',
+ before it was usually not defined (but char[] was),
+ and that can produce some inconsistencies.
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+ This change was needed for STL, since std::vector<enum Hello>
+ std::vector<A*>, etc, will always generate methods that
+ mix const references with the vector type.
+
+ Now that is working, all the std::container<T*>
+ specialization will not be needed anymore, well, in
+ theory.
+
+ In the practice, everythin is working as before until
+ the proper mixed types are defined and the libraries
+ simplified to use them.
+
+ - Change the behavior of extern "java"/"fortran"/"etc",
+ now swig produces a warning, and use extern "C" instead.
+ The warning can also be disable with the "-w 313" flag.
+ (WARN_PARSE_UNDEFINED_EXTERN).
+
+ - SwigValueWrapper is now more selective (lang.cxx).
+
+ [Perl/Tcl]
+ - Fix some typemaps (perl/tcl) to work properly with
+ SwigValueWrapper. This was not a problem with
+ SwigValueWrapper, but with the typemaps that now are
+ safe to use with %apply.
+
+ [Python]
+
+ - Fix %callback/%pythoncallback work now as before after
+ the def args changes. Also, %callback now is an alias
+ for %pythoncallback, so, they do the same.
+
+ [Python/Ruby]
+ - %callback is more usable and uniform:
+
+ %callback("%s_cb") foo(); // for both, python/ruby
+ %callback("%s_cb"); // for both, python/ruby
+ %callback(1) foo(); // only in python.
+
+10/17/2004: arty
+ [OCAML]
+ - Tweak to enum typing for soundness in the presence of multiple
+ modules.
+ - global functions are now unambiguous in multiple loaded modules.
+ - Fixed test case code to build multimodule test cases correctly.
+ - There is no way to share overload resolution across modules
+ because of soundness issues. If the user wants to call some
+ function foo from an arbitrary module bar, they will have to
+ use Bar._foo to call it correctly. Later I will fix the
+ camlp4 module to do something clever in this case.
+ - Promided performance overhaul of class mechanism.
+ - Removed symbol hack for ocaml-3.07 and below which is not needed
+ for ocaml-3.08 and above.
+
+10/16/2004: wuzzeb (John Lenz)
+ [CHICKEN]
+ - Completly change how chicken.cxx handles CLOS and generic code.
+ chicken no longer exports -clos.scm and -generic.scm. The clos
+ code is exported directly into the module.scm file if -proxy is passed.
+ - The code now always exports a unit. Running the test-suite is now
+ majorly broken, and needs to be fixed.
+ - CLOS now generates virtual slots for member variables similar to how
+ GOOPS support works in the guile module.
+ - chicken no longer prefixes symbols by the module name, and no longer
+ forces all names to lower case. It now has -useclassprefix and -closprefix
+ similar to how guile handles GOOPS names.
+
+10/16/2004: wsfulton
+ Templated functions with default arguments working with new default argument
+ wrapping approach. The new approach no longer fails with the following default
+ argument pattern (previously failed with some primitive types, like
+ unsigned primitive types):
+
+ template<typename T> int foo(const T& u = T());
+ %template(foo) foo<unsigned int>;
+
+ This relies on the templated function overloading support just added, so all
+ the combinations of overloading by template parameters and normal parameters
+ as well as overloading with default parameters works.
+
+10/16/2004: wsfulton
+ Added support for the large range of templated function overloading that C++
+ supports.
+
+ - Overloaded templated functions, eg
+
+ template<typename T> int overload(T t);
+ template<typename T> int overload(T t, const T &r);
+
+ - Fixes where the templated type is not used in the parameter list, eg
+
+ template<typename T> void xyz();
+ template<> void xyz<double>();
+
+ - Fixes for overloading of plain functions by a templated function:
+
+ void abc(double d);
+ template<typename T> void abc(T t);
+
+ - Overloading by templated parameters fixed:
+
+ template<typename T> void foo(T t) {}
+ template<typename T, typename U> void foo(T t, U u) {}
+
+ %template(foo) foo<double, double>;
+
+ - All combinations of the above also working including specializations, eg:
+
+ void abc(double d);
+ template<typename T> void abc(T t);
+ template<> void abc<double>(double t);
+ template<> void abc(int t);
+
+10/16/2004: wuzzeb (John Lenz)
+ - Remove the ability to share type information by using c linking.
+ All type sharing happens through a global variable in the target language.
+ + Remove SWIG_NOIMPORT, SWIG_RUNTIME, and related defines.
+ + Depreciate -runtime, -noruntime command line options
+ + Update test-suite common.mk to correctly build multicpptest
+ + Remove reference to precommon.swg
+ + Update the guile_gh interface to share data by a global var instead
+ of c linkage.
+
+ - Remove Advanced.html, since everything in it is now obsolete
+
+10/09/2004: mmatus
+ - Split the python std/STL C++ library files, now
+ all the language independent definitions are under
+ the directory
+
+ Lib/std
+
+ and hence, can be used from other languages.
+
+ - Add more documentation to the Python STL, and
+ clean unnecessary code.
+
+ - Add initial C99 complex support, and some fixes
+ for long double.
+
+10/08/2004: mmatus
+ - Fix the SwigValueWrapper for opaque types, now it is
+ applied for opaque templates and classes, for which we
+ don't know if there is or not a default constructor, ie
+
+ struct A {
+ A(int);
+ };
+
+ Still, if you know that you class has a default
+ constructor, and for some very very particular reason
+ you want to avoid the SwigValueWrapper, and you don't
+ want or can't expose the class to swig, now you can
+ say
+
+ %feature("novaluewrapper") A;
+ class A;
+
+ or the other way around, if the class has a default
+ constructor, but you want to use the value wrapper, you
+ can say
+
+ %feature("valuewrapper") A;
+ struct A {
+ A();
+ ....
+ };
+
+ - Fix for char > 128, ie
+
+ const char tilde_a = '\341';
+
+ - Add patch 1041858 for $lextype, which carries the
+ literal type of a symbol. See lextype.i in the
+ test-suite for more details.
+
+
+
+
+10/07/2004: wsfulton
+ {Ruby, Java] Fix director + 'empty' throws
+
+ struct A {
+ A() throw();
+ virtual ~A() throw();
+ int foo() throw();
+ };
+
+
+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 safely 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 to 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_FEATURES parse all and the same options you
+ can pass to swig in the command line.
+
+ - 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 users
+ 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.
+
+ - Previously a feature could not be applied to constructors
+ or destructors that weren't explicitly declared in the class.
+ This is now fixed, for example:
+
+ %feature("featurename") Foo() "..."
+ %feature("featurename") ~Foo() "..."
+ class Foo {
+ // implicit Foo() and ~Foo()
+ };
+
+ - 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.
+
+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.
+
+
Version 1.3.22 (September 4, 2004)
==================================