summaryrefslogtreecommitdiff
path: root/CHANGES
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@baserock.org>2009-08-18 20:56:02 +0000
committerLorry <lorry@roadtrain.codethink.co.uk>2012-09-25 16:59:08 +0000
commit9f8a09ed743cedd9547bf0661d518647966ab114 (patch)
tree9c7803d3b27a8ec22e91792ac7f7932efa128b20 /CHANGES
downloadswig-tarball-master.tar.gz
Imported from /srv/lorry/lorry-area/swig-tarball/swig-1.3.40.tar.gz.HEADswig-1.3.40master
Diffstat (limited to 'CHANGES')
-rw-r--r--CHANGES20309
1 files changed, 20309 insertions, 0 deletions
diff --git a/CHANGES b/CHANGES
new file mode 100644
index 0000000..d942651
--- /dev/null
+++ b/CHANGES
@@ -0,0 +1,20309 @@
+SWIG (Simplified Wrapper and Interface Generator)
+
+See CHANGES.current for current version.
+
+Version 1.3.39 (21 March 2009)
+==============================
+
+2009-03-19: bhy
+ [Python] Fix the memory leak related to Python 3 unicode and C char* conversion,
+ which can be shown in the following example before this fix:
+
+ from li_cstring import *
+ i=0
+ while True:
+ i += 1
+ n = str(i)*10
+ test3(n)
+
+ This fix affected SWIG_AsCharPtrAndSize() so you cannot call this function with
+ a null alloc and non-null cptr argument in Python 3, otherwise a runtime error
+ will be raised.
+
+2009-03-18: wsfulton
+ [C#] std::vector<T> wrapper improvements for .NET 2 and also providing the
+ necessary machinery to use the std::vector<T> wrappers with more advanced features such
+ as LINQ - the C# proxy class now derives from IEnumerable<>. The default is now to
+ generate code requiring .NET 2 as a minimum, although the C# code can be compiled
+ for .NET 1 by defining the SWIG_DOTNET_1 C# preprocessor constant. See the
+ std_vector.i file for more details.
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2009-03-12: wsfulton
+ [Ruby] Fix #2676738 SWIG generated symbol name clashes.
+
+2009-03-01: bhy
+ [Python] Some fixes for Python 3.0.1 and higher support. In 3.0.1, the C API function
+ PyObject_Compare is removed, so PyObject_RichCompareBool is used for replacement.
+ Struct initilization of SwigPyObject and SwigPyObject_as_number changed to reflect
+ the drop of tp_compare and nb_long.
+
+2009-03-01: bhy
+ [Python] Fix SF#2583160. Now the importer in Python shadow wrapper take care of the
+ case that module already imported at other place.
+
+2009-02-28: bhy
+ [Python] Fix SF#2637352. Move struct declaration of SWIG_module in pyinit.swg before
+ the method calls, since some C compiler don't allow declaration in middle of function
+ body.
+
+2009-02-21: wsfulton
+ [Allegrocl] Fix seg fault wrapping some constant variable (%constant) types.
+
+2009-02-20: wsfulton
+ [CFFI] Fix seg faults when for %extend and using statements.
+
+2009-02-20: wsfulton
+ Fix SF #2605955: -co option which broke in 1.3.37.
+
+2009-02-20: wsfulton
+ New %insert("begin") section added. Also can be used as %begin. This is a new
+ code section reserved entirely for users and the code within the section is generated
+ at the top of the C/C++ wrapper file and so provides a means to put custom code
+ into the wrapper file before anything else that SWIG generates.
+
+2009-02-17: wsfulton
+ 'make clean-test-suite' will now run clean on ALL languages. Previously it only
+ ran the correctly configured languages. This way it is now possible to clean up
+ properly after running 'make partialcheck-test-suite'.
+
+2009-02-14: wsfulton
+ Extend attribute library support for structs/classes and the accessor functions use
+ pass/return by value semantics. Two new macros are available and usage is identical
+ to %attribute. These are %attributeval for structs/classes and %attributestring for
+ string classes, like std::string. See attribute.swg for more details.
+
+2009-02-13: wsfulton
+ Add support for %extend and memberin typemaps. Previously the memberin typemaps were
+ ignored for member variables within a %extend block.
+
+2009-02-12: wsfulton
+ Remove unnecessary temporary variable when wrapping return values that are references.
+ Example of generated code for wrapping:
+
+ struct XYZ {
+ std::string& refReturn();
+ };
+
+ used to be:
+
+ std::string *result = 0 ;
+ ...
+ {
+ std::string &_result_ref = (arg1)->refReturn();
+ result = (std::string *) &_result_ref;
+ }
+
+ Now it is:
+
+ std::string *result = 0 ;
+ ...
+ result = (std::string *) &(arg1)->refReturn();
+
+2009-02-08: bhy
+ Change the SIZE mapped by %pybuffer_mutable_binary and %pybuffer_binary in pybuffer.i from
+ the length of the buffer to the number of items in the buffer.
+
+2009-02-08: wsfulton
+ Fix %feature not working for conversion operators, reported by Matt Sprague, for example:
+ %feature("cs:methodmodifiers") operator bool "protected";
+
+2009-02-07: wsfulton
+ [MzScheme] Apply #2081967 configure changes for examples to build with recent PLT versions.
+ Also fixes Makefile errors building SWIG executable when mzscheme package is installed
+ (version 3.72 approx and later).
+
+2009-02-04: talby
+ [Perl] Fix SF#2564192 reported by David Kolovratnk.
+ SWIG_AsCharPtrAndSize() now handles "get" magic.
+
+Version 1.3.38 (31 January 2009)
+================================
+
+2009-01-31: bhy
+ [Python] Fix SF#2552488 reported by Gaetan Lehmann. Now %pythonprepend
+ and %pythonappend have correct indentation.
+
+2009-01-31: bhy
+ [Python] Fix SF#2552048 reported by Gaetan Lehmann. The parameter list
+ of static member function in generated proxy code should not have the
+ 'self' parameter.
+
+2009-01-29: wsfulton
+ Fix regression introduced in 1.3.37 where the default output directory
+ for target language specific files (in the absence of -outdir) was no
+ longer the same directory as the generated c/c++ file.
+
+2009-01-28: wsfulton
+ [Java, C#] Fix proxy class not being used when the global scope operator
+ was used for parameters passed by value. Reported by David Piepgrass.
+
+2009-01-15: wsfulton
+ [Perl] Fix seg fault when running with -v option, reported by John Ky.
+
+Version 1.3.37 (13 January 2009)
+================================
+
+2009-01-13: mgossage
+ [Lua] Added contract support for requiring that unsigned numbers are >=0
+ Rewrote much of Examples/Lua/embed3.
+ Added a lot to the Lua documentation.
+
+2009-01-13: wsfulton
+ Fix compilation error when using directors on protected virtual overloaded
+ methods reported by Sam Hendley.
+
+2009-01-12: drjoe
+ [R] Fixed handling of integer arrays
+
+2009-01-10: drjoe
+ [R] Fix integer handling in r to deal correctly with signed
+ and unsigned issues
+
+2009-01-10: wsfulton
+ Patch #1992756 from Colin McDonald - %contract not working for classes
+ in namespace
+
+2009-01-05: olly
+ Mark SWIGPERL5, SWIGPHP5, and SWIGTCL8 as deprecated in the source
+ code and remove documentation of them.
+
+2008-12-30: wsfulton
+ Bug #2430756. All the languages now define a macro in the generated C/C++
+ wrapper file indicating which language is being wrapped. The macro name is the
+ same as those defined when SWIG is run, eg SWIGJAVA, SWIGOCTAVE, SWIGCSHARP etc
+ and are listed in the "Conditional Compilation" section in the documentation.
+
+2008-12-23: wsfulton
+ [Java] Fix #2153773 - %nojavaexception was clearing the exception feature
+ instead of disabling it. Clearing checked Java exceptions also didn't work.
+ The new %clearjavaexception can be used for clearing the exception feature.
+
+2008-12-22: wsfulton
+ Fix #2432801 - Make SwigValueWrapper exception safe for when copy constructors
+ throw exceptions.
+
+2008-12-21: wsfulton
+ Apply patch #2440046 which fixes possible seg faults for member and global
+ variable char arrays when the strings are larger than the string array size.
+
+2008-12-20: wsfulton
+ The ccache compiler cache has been adapted to work with SWIG and
+ named ccache-swig. It now works with C/C++ compilers as well as SWIG
+ and can result in impressive speedups when used to recompile unchanged
+ code with either a C/C++ compiler or SWIG. Documentation is in CCache.html
+ or the installed ccache-swig man page.
+
+2008-12-12: wsfulton
+ Apply patch from Kalyanov Dmitry which fixes parsing of nested structs
+ containing comments.
+
+2008-12-12: wsfulton
+ Fix error message in some nested struct and %inline parsing error situations
+ such as unterminated strings and comments.
+
+2008-12-07: olly
+ [PHP] Fix warnings when compiling generated wrapper with GCC 4.3.
+
+2008-12-06: wsfulton
+ [PHP] Deprecate %pragma(php4). Please use %pragma(php) instead.
+ The following two warnings have been renamed:
+ WARN_PHP4_MULTIPLE_INHERITANCE -> WARN_PHP_MULTIPLE_INHERITANCE
+ WARN_PHP4_UNKNOWN_PRAGMA -> WARN_PHP_UNKNOWN_PRAGMA
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2008-12-04: bhy
+ [Python] Applied patch SF#2158938: all the SWIG symbol names started with Py
+ are changed, since they are inappropriate and discouraged in Python
+ documentation (from http://www.python.org/doc/2.5.2/api/includes.html):
+
+ "All user visible names defined by Python.h (except those defined by
+ the included standard headers) have one of the prefixes "Py" or "_Py".
+ Names beginning with "_Py" are for internal use by the Python implementation
+ and should not be used by extension writers. Structure member names do
+ not have a reserved prefix.
+
+ Important: user code should never define names that begin with "Py" or "_Py".
+ This confuses the reader, and jeopardizes the portability of the user
+ code to future Python versions, which may define additional names beginning
+ with one of these prefixes."
+
+ Here is a brief list of what changed:
+
+ PySwig* -> SwigPy*
+ PyObject_ptr -> SwigPtr_PyObject
+ PyObject_var -> SwigVar_PyObject
+ PySequence_Base, PySequence_Cont, PySequence_Ref ->
+ SwigPySequence_Base, SwigPySequence_Cont, SwigPySequence_Ref
+ PyMap* -> SwigPyMap*
+
+ We provided a pyname_compat.i for backward compatibility. Users whose code having
+ these symbols and do not want to change it could simply include this file
+ at front of your code. A better solution is to run the converting tool on
+ your code, which has been put in SWIG's SVN trunk (Tools/pyname_patch.py) and
+ you can download it here:
+ https://swig.svn.sourceforge.net/svnroot/swig/trunk/Tools/pyname_patch.py
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2008-12-02: wsfulton
+ [Python] Apply patch #2143727 from Serge Monkewitz to fix importing base classes
+ when the package option is specified in %module and that module is %import'ed.
+
+2008-11-28: wsfulton
+ [UTL] Fix #2080497. Some incorrect acceptance of types in the STL, eg a double * element
+ passed into a vector<int *> constructor would be accepted, but the ensuing behaviour
+ was undefined. Now the type conversion correctly raises an exception.
+
+2008-11-24: wsfulton
+ Add -outcurrentdir option. This sets the default output directory to the current
+ directory instead of the path specified by the input file. This option enables
+ behaviour similar to c/c++ compilers. Note that this controls the output directory,
+ but only in the absence of the -o and/or -outdir options.
+
+2008-11-23: wsfulton
+ [ruby] Apply patch #2263850 to fix ruby/file.i ... rubyio.h filename change in
+ ruby 1.9.
+
+2008-11-23: wsfulton
+ Apply patch #2319790 from Johan Hake to fix shared_ptr usage in std::tr1 namespace.
+
+2008-11-21: wsfulton
+ The use of the include path to find the input file is now deprecated.
+ This makes the behaviour of SWIG the same as C/C++ compilers in preparation
+ for use with ccache.
+
+2008-11-16: wsfulton
+ Fix -nopreprocess option to:
+ - correctly report file names in warning and error messages.
+ - use the original input filename that created the preprocessed output when
+ determining the C++ wrapper file name (in the absence of -o). Previously
+ the name of the input file containing the preprocessed output was used.
+
+2008-11-11: wsfulton
+ [Java] Add patch #2152691 from MATSUURA Takanori which fixes compiles using the
+ Intel compiler
+
+2008-11-01: wsfulton
+ Add patch #2128249 from Anatoly Techtonik which corrects the C/C++ proxy
+ class being reported for Python docstrings when %rename is used.
+
+2008-11-01: wsfulton
+ Add the strip encoder patch from Anatoly Techtonik #2130016. This enables an
+ easy way to rename symbols by stripping a commonly used prefix in all the
+ function/struct names. It works in the same way as the other encoders, such as
+ title, lower, command etc outlined in CHANGES file dated 12/30/2005. Example
+ below will rename wxAnotherWidget to AnotherWidget and wxDoSomething to
+ DoSomething:
+
+ %rename("%(strip:[wx])s") "";
+
+ struct wxAnotherWidget {
+ void wxDoSomething();
+ };
+
+2008-09-26: mutandiz
+ [allegrocl]
+ Lots of test-suite work.
+ - Fix ordering of wrapper output and %{ %} header output.
+ - Fix declarations of local vars in C wrappers.
+ - Fix declaration of defined constants in C wrappers.
+ - Fix declaration of EnumValues in C wrappers.
+ - add some const typemaps to allegrocl.swg
+ - add rename for operator bool() overloads.
+
+2008-09-25: olly
+ [PHP5] Fill in typemaps for SWIGTYPE and void * (SF#2095186).
+
+2008-09-22: mutandiz (Mikel Bancroft)
+ [allegrocl]
+ - Support wrapping of types whose definitions are not seen by
+ SWIG. They are treated as forward-referenced classes and if a
+ definition is not seen are treated as (* :void).
+ - Don't wrap the contents of unnamed namespaces.
+ - More code cleanup. Removed some extraneous warnings.
+ - start work on having the allegrocl mod pass the cpp test-suite.
+
+2008-09-19: olly
+ [PHP5] Add typemaps for long long and unsigned long long.
+
+2008-09-18: wsfulton
+ [C#] Added C# array typemaps provided by Antti Karanta.
+ The arrays provide a way to use MarshalAs(UnmanagedType.LPArray)
+ and pinning the array using 'fixed'. See arrays_csharp.i library file
+ for details.
+
+2008-09-18: wsfulton
+ Document the optional module attribute in the %import directive,
+ see Modules.html. Add a warning for Python wrappers when the
+ module name for an imported base class is missing, requiring the
+ module attribute to be added to %import, eg
+
+ %import(module="FooModule") foo.h
+
+2008-09-18: olly
+ [PHP5] Change the default input typemap for char * to turn PHP
+ Null into C NULL (previously it was converted to an empty string).
+ The new behaviour is consistent with how the corresponding output
+ typemap works (SF#2025719).
+
+ If you want to keep the old behaviour, add the following typemap
+ to your interface file (PHP's convert_to_string_ex() function does
+ the converting from PHP Null to an empty string):
+
+ %typemap(in) char * {
+ convert_to_string_ex($input);
+ $1 = Z_STRVAL_PP($input);
+ }
+
+2008-09-18: olly
+ [PHP5] Fix extra code added to proxy class constructors in the case
+ where the only constructor takes no arguments.
+
+2008-09-18: olly
+ [PHP5] Fix wrapping of a renamed enumerated value of an enum class
+ member (SF#2095273).
+
+2008-09-17: mutandiz (Mikel Bancroft)
+ [allegrocl]
+ - Fix how forward reference typedefs are handled, so as not to conflict
+ with other legit typedefs.
+ - Don't (for now) perform an ffitype typemap lookup when trying to
+ when calling compose_foreign_type(). This is actually a useful thing
+ to do in certain cases, the test cases for which I can't currently
+ locate :/. It's breaking some wrapping behavior that is more commonly
+ seen, however. I'll readd in a more appropriate way when I can
+ recreate the needed test case, or a user complains (which means
+ they probably have a test case).
+ - document the -isolate command-line arg in the 'swig -help' output.
+ It was in the html docs, but not there.
+ - small amount of code cleanup, removed some unused code.
+ - some minor aesthetic changes.
+
+2008-09-12: bhy
+ [Python] Python 3.0 support branch merged into SWIG trunk. Thanks to
+ Google Summer of Code 2008 for supporting this project! By default
+ SWIG will generate interface files compatible with both Python 2.x
+ and 3.0. And there's also some Python 3 new features that can be
+ enabled by passing a "-py3" command line option to SWIG. These
+ features are:
+
+ - Function annotation support
+ Also, the parameter list of proxy function will be generated,
+ even without the "-py3" option. However, the parameter list
+ will fallback to *args if the function (or method) is overloaded.
+ - Buffer interface support
+ - Abstract base class support
+
+ For details of Python 3 support and these features, please see the
+ "Python 3 Support" section in the "SWIG and Python" chapter of the SWIG
+ documentation.
+
+ The "-apply" command line option and support of generating codes
+ using apply() is removed. Since this is only required by very old
+ Python.
+
+ This merge also patched SWIG's parser to solve a bug. By this patch,
+ SWIG features able to be correctly applied on C++ conversion operator,
+ such like this:
+
+ %feature("shadow") *::operator bool %{ ... %}
+
+2008-09-02: richardb
+ [Python] Commit patch #2089149: Director exception handling mangles
+ returned exception. Exceptions raised by Python code in directors
+ are now passed through to the caller without change. Also, remove
+ the ": " prefix which used to be added to other director exceptions
+ (eg, those due to incorrect return types).
+
+2008-09-02: wsfulton
+ [Python] Commit patch #1988296 GCItem multiple module linking issue when using
+ directors.
+
+2008-09-02: wsfulton
+ [C#] Support for 'using' and 'fixed' blocks in the 'csin' typemap is now
+ possible through the use of the pre attribute and the new terminator attribute, eg
+
+ %typemap(csin,
+ pre=" using (CDate temp$csinput = new CDate($csinput)) {",
+ terminator=" } // terminate temp$csinput using block",
+ ) const CDate &
+ "$csclassname.getCPtr(temp$csinput)"
+
+ See CSharp.html for more info.
+
+2008-09-01: wsfulton
+ [CFFI] Commit patch #2079381 submitted by Boris Smilga - constant exprs put into
+ no-eval context in DEFCENUM
+
+2008-08-02: wuzzeb
+ [Chicken,Allegro] Commit Patch 2019314
+ Fixes a build error in chicken, and several build errors and other errors
+ in Allegro CL
+
+2008-07-19: wsfulton
+ Fix building of Tcl examples/test-suite on Mac OSX reported by Gideon Simpson.
+
+2008-07-17: wsfulton
+ Fix SF #2019156 Configuring with --without-octave or --without-alllang
+ did not disable octave.
+
+2008-07-14: wsfulton
+ [Java, C#] Fix director typemaps for pointers so that NULL pointers are correctly
+ marshalled to C#/Java null in director methods.
+
+2008-07-04: olly
+ [PHP] For std_vector.i and std_map.i, rename empty() to is_empty()
+ since "empty" is a PHP reserved word. Based on patch from Mark Klein
+ in SF#1943417.
+
+2008-07-04: olly
+ [PHP] The deprecated command line option "-make" has been removed.
+ Searches on Google codesearch suggest that nobody is using it now
+ anyway.
+
+2008-07-04: olly
+ [PHP] The SWIG cdata.i library module is now supported.
+
+2008-07-03: olly
+ [PHP] The deprecated command line option "-phpfull" has been
+ removed. We recommend building your extension as a dynamically
+ loadable module.
+
+2008-07-02: olly
+ [PHP4] Support for PHP4 has been removed. The PHP developers are
+ no longer making new PHP4 releases, and won't even be providing
+ patches for critical security issues after 2008-08-08.
+
+2008-07-02: olly
+ [Python] Import the C extension differently for Python 2.6 and
+ later so that an implicit relative import doesn't produce a
+ deprecation warning for 2.6 and a failure for 2.7 and later.
+ Patch from Richard Boulton in SF#2008229, plus follow-up patches
+ from Richard and Haoyu Bai.
+
+Version 1.3.36 (24 June 2008)
+=============================
+
+06/24/2008: wsfulton
+ Remove deprecated -c commandline option (runtime library generation).
+
+06/24/2008: olly
+ [PHP] Fix assertion failure when handling %typemap(in,numinputs=0)
+ (testcase ignore_parameter).
+
+06/24/2008: olly
+ [PHP] Fix segfault when wrapping a non-class function marked with
+ %newobject (testcase char_strings).
+
+06/22/2008: wsfulton
+ [Java] Add a way to use AttachCurrentThreadAsDaemon instead of AttachCurrentThread
+ in director code. Define the SWIG_JAVA_ATTACH_CURRENT_THREAD_AS_DAEMON macro, see
+ Lib/java/director.swg.
+
+06/21/2008: wsfulton
+ [Ruby] Fix crashing in the STL wrappers (reject! and delete_if methods)
+
+06/19/2008: wsfulton
+ [Java, C#] C# and Java keywords will be renamed instead of just issuing a warning
+ and then generating uncompileable code. Warning 314 gives the new name when a
+ keyword is found.
+
+06/19/2008: wsfulton
+ [R] Keyword handling added. R Keywords will be renamed as necessary.
+ Warning 314 gives the new name when a keyword is found.
+
+06/17/2008: mgossage
+ [Lua] Added missing support for bool& and bool*. Added runtest for li_typemaps testcase.
+ (Bug #1938142)
+
+06/07/2008: bhy
+ Added test case keyword_rename, then made the keyword renaming works properly
+ by fixing Swig_name_make() for a incomplete condition checking.
+
+06/02/2008: wsfulton
+ [Java, C#] Fix enum wrappers when using -noproxy.
+
+05/30/2008: bhy
+ Added std::wstring into Lib/typemaps/primtypes.swg, since it is also a primitive
+ type in SWIG - fixed SF #1976978.
+
+05/29/2008: wsfulton
+ [Java, C#] Fix variable wrappers when using -noproxy.
+
+05/29/2008: bhy
+ [Python] Fixed a typo of %#ifdef in Lib/python/pycontainer.swg, which is related
+ to -extranative SWIG option - SF #1971977.
+
+05/20/2008: wsfulton
+ New partialcheck makefile targets for partial testing of the test-suite. These
+ just invoke SWIG, ie no compilation and no runtime testing. It can be faster
+ when developing by just doing a directory diff of the files SWIG generates
+ against those from a previous run. Example usage from the top level directory:
+
+ make partialcheck-test-suite
+ make partialcheck-java-test-suite
+
+ This change also encompasses more flexibility in running the test-suite, eg
+ it is possible to prefix the command line which runs any target language test
+ with a tool. See the RUNTOOL, COMPILETOOL and SWIGTOOL targets in the common.mk
+ file and makefiles in the test-suite directory. For example it is possible to
+ run the runtime tests through valgrind using:
+
+ make check RUNTOOL="valgrind --leak-check=full"
+
+ or invoke SWIG under valgrind using:
+
+ make check SWIGTOOL="valgrind --tool=memcheck"
+
+05/19/2008: drjoe
+ [R] Fixed define that was breaking pre-2.7. Checked in
+ patch from Soren Sonnenburg that creates strings in
+ version independent way
+
+05/15/2008: wsfulton
+ [Java] Fix variable name clash in directors - SF #1963316 reported by Tristan.
+
+05/14/2008: wsfulton
+ Add an optimisation for functions that return objects by value, reducing
+ the number of copies of the object that are made. Implemented using an
+ optional attribute in the "out" typemap called "optimal". Details in
+ Typemaps.html.
+
+05/11/2008: olly
+ [PHP] Check for %feature("notabstract") when generating PHP5 class
+ wrapper.
+
+05/11/2008: wsfulton
+ Fix SF #1943608 - $self substitution in %contract, patch submitted by
+ Toon Verstraelen.
+
+05/09/2008: olly
+ [PHP] Fix char * typemaps to work when applied to signed char * and
+ unsigned char * (uncovered by testcase apply_strings).
+
+05/09/2008: wsfulton
+ Fix wrapping of char * member variables when using allprotected mode.
+ Bug reported by Warren Wang.
+
+05/09/2008: olly
+ [PHP] Fix bad PHP code generated when wrapping an enum in a
+ namespace (uncovered by testcase arrays_scope).
+
+05/09/2008: olly
+ [PHP] SWIG now runs the PHP testsuite using PHP5, not PHP4. PHP4
+ is essentially obsolete now, so we care much more about solid PHP5
+ support.
+
+05/07/2008: wsfulton
+ STL fixes when using %import rather than %include and the Solaris Workshop
+ compiler and the Roguewave STL.
+
+05/07/2008: wsfulton
+ Fix wrapping of overloaded protected methods when using allprotected mode.
+ Bug reported by Warren Wang.
+
+05/03/2008: wsfulton
+ Commit patch #1956607 to add -MT support from Richard Boulton.
+ This patch mirrors the gcc -MT option which allows one to change the default
+ Makefile target being generated when generating makefiles with the -M family
+ of options. For example:
+
+ $ swig -java -MM -MT overiddenname -c++ example.i
+ overiddenname: \
+ example.i \
+ example.h
+
+04/30/2008: mgossage
+ [Lua] Removed generation of _wrap_delete_XXXXX (wrappered destructor)
+ which was unused and causing warning with g++ -Wall.
+ Removed other unused warning in typemaps.i and other places.
+ Added Examples/lua/embed3, and run tests a few test cases.
+
+04/24/2008: olly
+ [Python] Fix generated code for IBM's C++ compiler on AIX (patch
+ from Goeran Uddeborg in SF#1928048).
+
+04/24/2008: olly
+ Rename BSIZE in Examples/test-suite/arrays_scope.i to BBSIZE to
+ avoid a clash with BSIZE defined by headers on AIX with Perl
+ (reported in SF#1928048).
+
+04/20/2008: wsfulton
+ Add the ability to wrap all protected members when using directors.
+ Previously only the virtual methods were available to the target language.
+ Now all protected members, (static and non-static variables, non-virtual methods
+ and static methods) are wrapped when using the allprotected mode. The allprotected
+ mode is turned on in the module declaration:
+
+ %module(directors="1", allprotected="1") modulename
+
+Version 1.3.35 (7 April 2008)
+=============================
+
+04/07/2008: wsfulton
+ [Lua] Add missing pointer reference typemaps
+
+04/06/2008: wsfulton
+ Fix stack overflow when using typemap warning suppression, eg
+ %warnfilter(SWIGWARN_TYPEMAP_CHARLEAK_MSG)
+
+04/05/2008: wsfulton
+ [Python] Fix shared_ptr typemaps so that %pythonnondynamic can be used. Also corrects
+ display of the proxy class type. Reported by Robert Lupton.
+
+04/04/2008: olly
+ [Python] Add %newobject reference to python memory management subsection of manual
+ (patch from mdbeachy in SF#1894610).
+
+03/27/2008: wsfulton
+ [Python] Fix shared_ptr typemaps where the pointer type is a templated type with
+ with more than one parameter. Reported by Robert Lupton.
+
+03/27/2008: mgossage
+ [Lua] Added a typemap DISOWN for SWIGTYPE* and SWIGTYPE[], and support for %delobject feature.
+ Added Examples/lua/owner which demonstrates the use of the memory management.
+
+03/26/2008: wsfulton
+ [Java] Apply patch #1844301 from Monty Taylor to suppress enum constructor
+ unused warnings.
+
+03/26/2008: wsfulton
+ [Python] Apply patch #1924524 from Casey Raymondson which ensures the
+ "No constructor defined" message is displayed when attempting to call a
+ constructor on a class that doesn't have a constructor wrapper, eg if
+ the C++ class is abstract.
+
+03/26/2008: wsfulton
+ [Python] Apply patch #1925702 from Casey Raymondson which removes warning 512
+ for std::vector wrappers.
+
+03/26/2008: olly
+ [Python] Apply GCC 4.3 warnings patch from Philipp Thomas
+ (SF#1925122).
+
+03/21/2008: wsfulton
+ [Python] Thread safety patch for STL iterators from Abhinandan Jain.
+
+03/17/2008: mgossage
+ [Lua] Added %luacode feature to add source code into wrappers.
+ Updated documentation to document this.
+ Added Examples/lua/arrays to show its use (and typemaps)
+
+03/17/2008: olly
+ Fix nonportable sed usage which failed on Mac OS X (and probably
+ other platforms). Fixes SF#1903612.
+
+03/17/2008: olly
+ Fix memory leak in SWIG's parser (based on patch from Russell
+ Bryant in SF#1914023).`
+
+03/12/2008: wsfulton
+ Fix bug #1878285 - unnecessary cast for C struct creation wrappers.
+
+03/12/2008: wsfulton
+ [Python] Remove debugging info when using shared_ptr support
+
+03/06/2008: mgossage
+ [Lua] Updated documentation for Lua exceptions.
+ Added Examples/lua/exception and Examples/lua/embed2.
+ Small updates to the typemaps.
+
+03/04/2008: wsfulton
+ [Java, C#] Add char *& typemaps.
+
+03/04/2008: wsfulton
+ Fix occasional seg fault when attempting to report overloaded methods as being ignored.
+
+02/29/2008: wsfulton
+ [Perl] Fix #1904537 Swig causes a Perl warning "x used only once" in Perl 5.10
+ reported by Ari Jolma
+
+02/29/2008: wsfulton
+ [Python] Add shared_ptr varin/varout typemaps for wrapping global variables.
+
+02/25/2008: wsfulton
+ Fix $wrapname to work in %exception (fixes some wrap:name assertions)
+
+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;
+ };
+
+Version 1.3.33 (November 23, 2007)
+==================================
+
+11/21/2007: mikel
+ [allegrocl] omit private slot type info in the classes/types
+ defined on the lisp side. Fix bug in mapping of C/++ types
+ to lisp types. Fix typo in modules generated defpackage form.
+ Have std::string *'s automatically marshalled between foreign
+ and lisp strings.
+
+11/20/2007: olly
+ [Python] Fill in Python Dictionary functions list (patch from
+ Jelmer Vernooij posted to swig-devel).
+
+11/20/2007: beazley
+ Fixed a bug in the C scanner related to backslash characters.
+
+11/19/2007: wsfulton
+ [Perl] Fix broken compilation of C++ wrappers on some compilers.
+
+11/16/2007: olly
+ [Python] Don't pass Py_ssize_t for a %d printf-like format as
+ that's undefined behaviour when sizeof(Py_ssize_t) != sizeof(int).
+
+Version 1.3.32 (November 15, 2007)
+==================================
+
+11/14/2007: wsfulton
+ [R] Package name and dll name is now the same as the SWIG module
+ name. It used to be the module name with _wrap as a suffix. The package
+ and dll names can be modified using the -package and -dll commandline
+ options.
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+11/11/2007: wsfulton
+ [R] Add support for Windows (Visual C++ 8 tested)
+
+11/10/2007: olly
+ [php] Fix makefile generated by -make (SF#1633679). Update
+ documentation to mark "-make" as deprecated (none of the other
+ SWIG backends seem to offer such a feature, it can't realistically
+ generate a fully portable makefile, and the commands to build an
+ extension are easy enough to write for the user's preferred build
+ tool). Also recommend against the use of "-phpfull" (it's only
+ really useful when static linking, and a dynamically loadable
+ module is virtually always the better approach).
+
+11/09/2007: olly
+ Fix --help output to note that `export SWIG_FEATURES' is required.
+
+10/29/2007: wsfulton
+ [R] Fix seg fault on Windows
+ [R] Examples R scripts are now platform independent
+
+10/30/2007: mgossage
+ [lua] fixed bug in template classes which cases template_default2
+ and template_specialization_defarg to fail.
+ Added several warning filters into the overload's test cases.
+ Added runtime tests for several codes.
+ You can now make check-lua-test-suite with no errors and only a few warnings.
+
+10/30/2007: olly
+ [guile] Fix the configure test to put GUILELINK in LIBS not LDFLAGS
+ (SF#1822430).
+
+10/30/2007: olly
+ [guile] Fix the guile examples on 64-bit platforms.
+
+10/29/2007: wsfulton
+ [C#] Fix member pointers on 64 bit platforms.
+
+10/28/2007: olly
+ [lua] Fix swig_lua_class instances to be static to allow multiple
+ SWIG wrappers to be compiled into the same executable statically.
+ Patch from Andreas Fredriksson (posted to the swig mailing list).
+
+10/28/2007: olly
+ [lua] Fix Examples/lua to pass SRCS for C tests rather than CXXSRCS.
+ The code as it was happened to work on x86, but broke on x86_64 (and
+ probably any other platforms which require -fPIC).
+
+10/28/2007: wsfulton
+ [Java, C#] New approach for fixing uninitialised variable usage on error in director
+ methods using the new templated initialisation function SwigValueInit().
+
+10/28/2007: wsfulton
+ [Perl] Use more efficient SvPV_nolen(x) instead of SvPV(x,PL_na) if SvPV_nolen is
+ supported.
+
+10/26/2007: wuzzeb
+ [Chicken] Fix global variables of class member function pointers.
+ Other minor fixes, so all tests in the chicken test suite now pass
+
+10/25/2007: olly
+ Fix UTL typecheck macro for a function taking char[] or const
+ char[] (SF#1820132).
+
+10/22/2007: mkoeppe
+ [Guile] Filter out -ansi -pedantic from CFLAGS while compiling test programs for Guile
+ in configure. This enables running the test suite for Guile if it is installed and
+ usable.
+
+10/22/2007: mkoeppe
+ [Guile -scm] Fix testcases apply_signed_char and apply_strings
+ by adding explicit casts to the appropriate $ltype.
+
+10/22/2007: wsfulton
+ [Java, C#] Fix uninitialised variable usage on error in director methods.
+
+10/19/2007: wsfulton
+ [Java, C#] Bug #1794247 - fix generated code for derived classes when csbase or javabase
+ typemaps are used with the replace="1" attribute.
+
+10/19/2007: wsfulton
+ [Python] Docs updated to suggest using distutils. Patch #1796681 from Christopher Barker.
+
+10/19/2007: olly
+ [perl5] Clear errno before calls to strtol(), strtoul(), strtoll()
+ and strtoull() which we check errno after to avoid seeing a junk
+ value of errno if there isn't an error in the call.
+
+10/16/2007: wsfulton
+ Deprecate %attribute_ref and replace with %attributeref. There is just an argument
+ order change in order to maintain consistency with %attribute, from:
+
+ %attribute_ref(Class, AttributeType, AccessorMethod, AttributeName)
+ to
+ %attributeref(Class, AttributeType, AttributeName, AccessorMethod)
+
+10/16/2007: olly
+ [Tcl] Fix several ocurrences of "warning: deprecated conversion
+ from string constant to 'char*'" from GCC 4.2 in generated C/C++
+ code.
+
+10/16/2007: olly
+ [PHP] Fix many occurrences of "warning: deprecated conversion from
+ string constant to 'char*'" from GCC 4.2 in generated C/C++ code
+ when compiling with a new enough version of PHP 5 (tested with
+ PHP 5.2.3, but PHP 5.2.1 is probably the minimum requirement).
+
+10/15/2007: wsfulton
+ Patch #1797133 from David Piepgrass fixes %attribute when the getter has the same name
+ as the attribute name and no longer generate non-functional setter for read-only attributes.
+
+10/15/2007: olly
+ [Tcl] Prevent SWIG_Tcl_ConvertPtr from calling the unknown proc.
+ Add Examples/tcl/std_vector/ which this change fixes. Patch
+ is from "Cliff C" in SF#1809819.
+
+10/12/2007: wsfulton
+ [Java] Add DetachCurrentThread back in for directors. See entry dated 08/11/2006 and
+ search for DetachCurrentThread on the mailing lists for details. The crashes on Solaris
+ seem to be only present in jdk-1.4.2 and lower (jdk-1.5.0 and jdk-1.6.0 are okay), so
+ anyone using directors should use a recent jdk on Solaris, or define (see director.swg)
+ SWIG_JAVA_NO_DETACH_CURRENT_THREAD to the C++ compiler to get old behaviour.
+
+10/12/2007: wsfulton
+ [Java] Ensure the premature garbage collection prevention parameter (pgcpp) is generated
+ when there are C comments in the jtype and jstype typemaps.
+
+10/12/2007: wuzzeb
+ Added a testsuite entry for Bug #1735931
+
+10/09/2007: olly
+ Automatically rerun autogen.sh if configure.in is modified.
+
+10/09/2007: olly
+ Enhance check-%-test-suite rule and friends to give a more helpful
+ error message if you try them for a language which doesn't exist
+ (e.g. "make check-php-test-suite" rather than the correct
+ "make check-php4-test-suite").
+
+10/09/2007: olly
+ Add make rule to regenerate Makefile from Makefile.in if it has
+ changed.
+
+10/09/2007: olly
+ [php] Fix long-standing memory leak in wrapped constructors and
+ wrapped functions/methods which return an object.
+
+10/08/2007: olly
+ Fix Makefile.in to read check.list files correctly in a VPATH
+ build.
+
+10/07/2007: wsfulton
+ [C#, Java] Experimental shared_ptr typemaps added
+
+09/27/2007: mgossage
+ [lua] added more verbose error messages for incorrect typechecks.
+ Added a routine which checks the exact number of parameters passed to a function
+ (breaks operator_overloading for unary minus operator, currently disabled).
+ Reorganised the luatypemaps.swg to tidy it up.
+ Added a lot of %ignores on the operators not supported by lua.
+ Added support for constant member function pointers & runtest for member_pointer.i
+ Added first version of wchar.i
+
+09/25/2007: wsfulton
+ [C#, Java] throws typemaps for std::wstring using C# patch #1799064 from David Piepgrass
+
+09/24/2007: wsfulton
+ [Tcl] Apply #1771313 to fix bug #1650229 - fixes long long and unsigned long long
+ handling.
+
+09/20/2007: olly
+ [Java] Eliminate some unnecessary uses of a temporary buffer
+ allocated using new[]. SF#1796609.
+
+09/19/2007: wsfulton
+ [C#] The $csinput special variable can be used in the csvarin typemap where it is always
+ expanded to 'value'.
+
+09/19/2007: wsfulton
+ [C#] Fix bug reported by Glenn A Watson and #1795260 where the cstype typemap used the 'ref'
+ keyword in the typemap body, it produced uncompilable C# properties (variable wrappers).
+ The type for the property now correctly comes from the 'out' attribute in the cstype typemap.
+
+09/19/2007: wsfulton
+ [Java] Fix const std::wstring& typemaps
+
+09/19/2007: wsfulton
+ [Java] Ensure the premature garbage collection prevention parameter (pgcpp) is generated
+ where a parameter is passed by pointer reference, eg in the std::vector wrappers. The pgcpp
+ is also generated now when user's custom typemaps use a proxy class in the jstype typemap
+ and a 'long' in the jtype typemap.
+
+09/18/2007: olly
+ [php] Add typemaps for handling parameters of type std::string &
+ which are modified by the wrapped function.
+
+09/17/2007: olly
+ [python] Split potentially long string literals to avoid hitting
+ MSVC's low fixed limit on string literal length - patch from
+ SF#1723770, also reported as SF#1630855.
+
+09/17/2007: olly
+ [ocaml] Fix renaming of overloaded methods in the method_table -
+ my patch from SF#940399.
+
+09/17/2007: olly
+ [python] Simpler code for SWIG_AsVal_bool() which fixes a "strict
+ aliasing" warning from GCC - patch from SF#1724581 by Andrew
+ Baumann.
+
+09/17/2007: olly
+ [perl5] Use sv_setpvn() to set a scalar from a pointer and length
+ - patch from SF#174460 by "matsubaray".
+
+09/17/2007: olly
+ When wrapping C++ code, generate code which uses
+ std::string::assign(PTR, LEN) rather than assigning
+ std::string(PTR, LEN). Using assign generates more efficient code
+ (tested with GCC 4.1.2).
+
+09/07/2007: wsfulton
+ Fix %ignore on constructors which are not explicitly declared [SF #1777712]
+
+09/05/2007: wuzzeb (John Lenz)
+ - Change r_ltype in typesys.c to store a hashtable instead of a single value.
+ several very subtle bugs were being caused by multiple ltypes being mapped
+ to a single mangled type, mostly when using typedefed template parameters.
+ Now, r_ltype stores a hashtable of possible ltypes, and when generating the
+ type table, all the ltypes are added into the swig_type_info structure.
+
+08/31/2007: wsfulton
+ SF #1754967 from James Bigler.
+ - Fix bug in turning on warnings that were turned off by default. Eg 'swig -w+309' will now
+ turn on the normally suppressed warning 309.
+
+ - New -Wextra commandline option which enables the extra warning numbers:
+ 202,309,403,512,321,322 (this is the list of warnings that have always been suppressed by
+ default). By specifying -Wextra, all warnings will be turned on, but unlike -Wall,
+ warnings can still be selectively turned on/off using %warnfilter,
+ #pragma SWIG nowarn or further -w commandline options, eg:
+ swig -Wextra -w309
+ will turn on all warnings except 309.
+
+08/28/2007: wsfulton
+ - New debugging options, -debug-module <n> and -debug-top <n> to display the parse tree at
+ various stages, where <n> is a comma separated list of stages 1-4.For example, to
+ display top of parse tree at stages 1 and 3:
+ swig -debug-top 1,3
+
+ - Deprecate the following options which have equivalents below:
+ -dump_parse_module => -debug-module 1
+ -dump_module => -debug-module 4
+ -dump_parse_top => -debug-top 1
+ -dump_top => -debug-top 4
+
+ - Renamed some commandline options for naming consistency across all options:
+ -debug_template => -debug-template
+ -debug_typemap => -debug-typemap
+ -dump_classes => -debug-classes
+ -dump_tags => -debug-tags
+ -dump_typedef => -debug-typedef
+ -dump_memory => -debug-memory
+
+08/25/2007: olly
+ [PHP5] Fix handling of double or float parameters with an integer
+ default value.
+
+08/25/2007: olly
+ [PHP5] Generate __isset() methods for setters for PHP 5.1 and later.
+
+08/20/2007: wsfulton
+ [Java C#] Fix director bug #1776651 reported by Stephane Routelous which occurred when
+ the director class name is the same as the start of some other symbols used within
+ the director class.
+
+08/17/2007: wsfulton
+ Correct behaviour for templated methods used with %rename or %ignore and the empty
+ template declaration - %template(). A warning is issued if the method has not been
+ renamed.
+
+08/16/2007: mutandiz (Mikel Bancroft)
+ [allegrocl] Name generated cl file based on input file rather than by
+ module name. It was possible to end up with a mypackage.cl and a test_wrap.c
+ when parsing a test.i input file. Confusing. Also, include external-format
+ templates for :fat and :fat-le automatically to avoid these being compiled
+ at runtime.
+
+08/15/2007: efuzzyone
+ [cffi] Apply patch #1766076 from Leigh Smith adding support for newly introduced
+ in cffi :long-long and :unsigned-long-long.
+
+08/10/2007: wsfulton
+ [Java] Add documentation patch #1743573 from Jeffrey Sorensen. It contains a neat
+ idea with respect to better memory management by the JVM of C++ allocated memory.
+
+08/10/2007: wsfulton
+ [Perl] Apply patch #1771410 from Wade Brainerd to fix typedef XS(SwigPerlWrapper) in
+ perlrun.swg for ActiveState Perl build 822 and Perl 5.8.9 and 5.10 branches.
+
+08/10/2007: wsfulton
+ [Lua] const enum reference typemaps fixed.
+
+08/09/2007: wsfulton
+ [C#] Added missing support for C++ class member pointers.
+
+08/09/2007: wsfulton
+ [C#, Java] Add support for $owner in the "out" typemaps like in the the scripting
+ language modules. Note that $owner has always been supported in the "javaout" / "csout"
+ typemaps.
+
+08/01/2007: wsfulton
+ Fix smart pointer handling for classes that have templated methods within the smart
+ pointer type. Problem reported by craigdo at ee.washington.edu.
+
+07/31/2007: efuzzyone
+ [cffi] fixed memory access after being freed bug. thanks to Martin Percossi.
+ package name clos changed to cl. thanks to Ralf Mattes
+
+07/24/2007: wsfulton
+ Parallel make support added for the examples and test-suite for developers who have
+ more than one CPU. Now parallel make can be used for checking in addition to building
+ the SWIG executable. Some typical checking examples:
+
+ make -j8 -k check
+ make -j4 check-java-test-suite
+ make -j2 check-java-examples
+
+07/19/2007: mgossage
+ Fixed bug that stopped configure working on mingw (applied dos2unix to configure.in)
+
+07/10/2007: mgossage
+ [lua] Extra compatibility with Lua 5.1 (updated SWIG_init, docs, examples, test suite)
+ Removed name clash for static link of multiple modules
+
+07/05/2007: mgossage
+ [lua] Fix a bug in SWIG_ALLOC_ARRAY()
+ improved the error messages for incorrect arguments.
+ Changed the output of swig_type() to use the human readable form of the type,
+ rather than the raw swig type.
+
+07/03/2007: wsfulton
+ [C#] Fix directors for some overloaded methods where the imtype resulted in identical
+ methods being generated in the C# director class, eg void foo(int *) and void foo(double *)
+ used to generated two of these:
+
+ private void SwigDirectorfoo(IntPtr p) { ... }
+
+06/25/2007: wsfulton
+ [Java, C#] Some parameter name changes in std_vector.i allowing better targeting
+ of typemaps for method parameters (for memory management of containers of pointers).
+
+06/07/2007: mutandiz (Mikel Bancroft)
+ [allegrocl]
+ fix foreign-type constructor to properly look for ffitype typemap
+ bindings. fix inout_typemaps.i for strings.
+
+06/06/2007: olly
+ [Ruby]
+ Use whichever of "long" or "long long" is the same size as "void*"
+ to hold pointers as integers, rather than whichever matches off_t.
+ Fixes compilation on OS X and GCC warnings on platforms where
+ sizeof(void*) < sizeof(off_t) (SF patch #1731979).
+
+06/06/2007: olly
+ [PHP5]
+ Fix handling of a particular case involving overloaded functions
+ with default parameters.
+
+06/05/2007: mutandiz (Mikel Bancroft)
+ [allegrocl]
+ Fix case where we'd pass fully qualified identifiers
+ (i.e. NS1::NS2::FOO) to swig-insert-id. All namespaces
+ should be stripped.
+
+ Fix bug in TypedefHandler introduced by last fix.
+
+06/05/2007: olly
+ Fix reporting of filenames in errors after %include (patch from
+ Leigh Smith in #1731040; also reported as #1699940).
+
+05/31/2007: olly
+ [Python]
+ Fix "missing initialiser" warning when compiling generated C/C++
+ wrapper code with Python 2.5 with warnings enabled (patch from
+ bug#1727668 from Luke Moore).
+
+05/29/2007: olly
+ [Python]
+ Split docstrings into separate string literals at each newline when
+ generating C/C++ wrapper code (the C/C++ compiler will just combine
+ them back into a single string literal). This avoids MSVC
+ complaining that the strings are too long (problem reported by
+ Bo Peng on the mailing list).
+
+05/28/2007: olly
+ [Python]
+ Escape backslashes in docstrings.
+
+05/26/2007: olly
+ [Python]
+ Fix autodoc generation of enums to be more consistent with how the
+ enums are wrapped - patch #1697226 from Josh Cherry.
+
+05/26/2007: olly
+ [PHP5]
+ Fix wrapping of methods and functions which return a pointer to a
+ class (bug#1700788) and those which have overloaded forms returning
+ both classes and non-classes (bug#1712717, thanks to Simon
+ Berthiaume for the patch).
+
+05/25/2007: wsfulton
+ Fixed %rename inconsistency in conversion operators as reported by Zhong Ren. The matching
+ is now done on the operator name in the same way as it is done for parameters. For example:
+
+ %rename(opABC) Space::ABC::operator ABC() const;
+ %rename(methodABC) Space::ABC::method(ABC a) const;
+ namespace Space {
+ class ABC {
+ public:
+ void method(ABC a) const {}
+ operator ABC() const { ABC a; return a; }
+ };
+ }
+
+ Note that qualifying the conversion operator previously may or may not have matched.
+ Now it definitely won't, so this will not match:
+
+ %rename(opABC) Space::ABC::operator Space::ABC() const;
+
+ in the same way that this does not match:
+
+ %rename(methodABC) Space::ABC::method(Space::ABC a) const;
+
+ The documentation has been improved with respect to %rename, namespaces and templates.
+ Conversion operators documentation too.
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+05/16/2007: mutandiz
+ [allegrocl]
+ Fix bad generation of local var ltype's in functionWrapper().
+ Try to work better with the backward order in which swig
+ unrolls nested class definitions.
+ cleaned up a little unnecessary code/debug printf's.
+ Remove warning when replacing $ldestructor for ff:foreign-pointer
+
+05/12/2007: olly
+ [Python]
+ swig -python -threads now generates C/C++ code which uses Python's
+ own threading abstraction (from pythread.h) rather than OS specific
+ code. The old code failed to compile on MS Windows. (See SF patch
+ tracker #1710341).
+
+05/04/2007: gga
+ [Ruby]
+ Changed STL renames to be global renames. This fixes
+ STL functions not being renamed when autorename is on.
+ This is a not a totally perfect work-around, but better.
+ Someone really needs to fix the template renaming code.
+ (See bug #1545634)
+
+05/04/2007 gga
+ [All]
+ Changed %rename("%(undercase)s") a little so that single
+ numbers at the end of a function are not undercased. That is:
+ getSomething -> get_something
+ get2D -> get_2d
+ get234 -> get_234
+ BUT:
+ asFloat2 -> as_float2
+ (Bug #1699714)
+
+05/03/2007: gga
+ [Ruby]
+ Made __swigtype__ => @__swigtype__ so it can be accessed
+ from the scripting language (and follows Ruby's official
+ documentation, just in case).
+ Made tracking => @__trackings__ for same reason.
+ Currently storing ivars without the @ seems valid, but
+ the PickAxe says this is not correct, so just in case...
+
+05/03/2007: gga
+ [Ruby]
+ Applied patch for -minherit bug and exception classes.
+ This issue should be revisited more closely, as Multiple
+ Inheritance in Ruby is still problematic.
+ (patch/bug #1604878)
+
+05/03/2007: gga
+ [Ruby]
+ Overloaded functions in ruby will now report to the user
+ the possible prototypes when the user mistypes the number or
+ type of a parameter.
+
+05/03/2007: gga
+ [Ruby]
+ Forgot to document the bug fixing of an old bug regarding
+ exceptions.
+ (bug #1458247)
+
+05/03/2007: gga
+ [Ruby]
+ Fixed Ruby documentation to use the proper css styles for
+ each section. Added autodoc section to Ruby's docs to
+ document the features supported by Ruby in documenting its modules.
+ Made rdoc documentation spit out the full name of the class +
+ method name. Albeit this will make the current rdoc not recognize
+ the method, this is still needed to disambiguate between different
+ classes with similar methods (rdoc was created to document the
+ ruby source which only contains one class per c file, unlike swig)
+ I have patched rdoc to make it more friendly to swig. This
+ patch needs to be merged in the ruby std library now.
+
+05/03/2007: gga
+ [Ruby]
+ Changed flag -feature to be -init_name to better reflect its
+ purpose and avoid confusion with -features.
+
+05/03/2007: gga
+ [Ruby]
+ Improved autodoc generation.
+ Added autodoc .swg files to Ruby library for easily adding
+ documentation to common Ruby methods and STL methods.
+ Fixed autodoc documenting of getters and setters and module.
+ Made test suite always generate autodocs.
+
+05/03/2007: gga
+ [Ruby]
+ Removed some warnings from STL and test suite.
+
+05/02/2007: mgossage
+ [Lua] Fixed issues with C++ classes and hierachies across multiple
+ source files. Fixed imports test case & added run test.
+ Added Examples/imports.
+ Added typename for raw lua_State*
+ Added documentation on native functions.
+
+05/02/2007: gga
+ [Ruby]
+ Docstrings are now supported.
+ %feature("autodoc") and %feature("docstring") are now
+ properly supported in Ruby. These features will generate
+ a _wrap.cxx file with rdoc comments in them.
+
+05/02/2007: gga
+ [Ruby]
+ STL files have been upgraded to follow the new swig/python
+ Lib/std conventions.
+ This means std::vector, std::set, std::map, set::multimap,
+ std::multiset, std::deque and std::string are now properly
+ supported, including their iterators, support for containing
+ ruby objects (swig::GC_VALUE) and several other ruby
+ enhancements.
+ std::complex, std::ios, std::iostream, std::iostreambuf and
+ std::sstream are now also supported.
+ std::wstring, std::wios, std::wiostream, std::wiostreambuf
+ and std::wsstream are supported verbatim with no unicode
+ conversion.
+
+ std_vector.i now mimics the behavior of Ruby Arrays much more
+ closely, supporting slicing, shifting, unshifting,
+ multiple indexing and proper return values on assignment.
+
+ COMPATABILITY NOTE: this changes the older api a little bit in
+ that improper indexing would previously (incorrectly) raise
+ exceptions. Now, nil is returned instead, following ruby's
+ standard Array behavior.
+
+05/02/2007: gga
+ [Ruby]
+ Changed the value of SWIG_TYPECHECK_BOOL to be 10000 (ie. higher
+ than that of all integers).
+ This is because Ruby allows typecasting
+ integers down to booleans which can make overloaded functions on
+ bools and integers to fail.
+ (bug# 1488142)
+
+05/02/2007: gga
+ [Ruby]
+ Fixed a subtle bug in multiple argouts that could get triggered if
+ the user returned two or more arguments and the first one was an
+ array.
+
+05/01/2007: gga
+ [Ruby]
+ Improved the documentation to document the new features
+ added, add directorin/out/argout typemaps, etc.
+
+05/01/2007: gga
+ [Ruby]
+ Added %initstack and %ignorestack directives for director
+ functions. These allow you to control whether a director
+ function should re-init the Ruby stack.
+ This is sometimes needed for an embedded Ruby where the
+ director method is used as a C++ callback and not called
+ by the user from ruby code.
+ Explanation:
+ Ruby's GC needs to be aware of the running OS stack in order to
+ mark any VALUE (Ruby objects) it finds there to avoid collection
+ of them. This allows the ruby API to be very simple and allows
+ you to write code like "VALUE a = sth" anywhere without needing
+ to do things like refcounting like python.
+ By default, the start of the stack is set when ruby_init() is
+ called. If ruby is inited within main(), as it usually is the
+ case with the main ruby executable, ruby will be able to calculate
+ its stack properly. However, when this is not possible, as when
+ ruby is embedded as a plugin to an application where main is not
+ available, ruby_init() will be called in the wrong place, and
+ ruby will be incorrectly tracking the stack from the function
+ that called ruby_init() forwards only, which can lead to
+ all sorts of weird crashes or to ruby thinking it has run out of
+ stack space incorrectly.
+ To avoid this, director (callback) functions can now be tagged
+ to try to reset the ruby stack, which will solve the issues.
+ NOTE: ruby1.8.6 still contains a bug in it in that its function
+ to reset the stack will not always do so. This bug is triggered
+ very rarely, when ruby is called from two very distinct places
+ in memory, like a branch of main() and another dso. This bug
+ has now been reported to ruby-core and is pending further
+ investigation.
+ (bug #1700535 and patch #1702907)
+
+04/30/2007: wsfulton
+ Fix #1707582 - Restore building from read-only source directories.
+
+04/30/2007: gga
+ [Ruby]
+ Ruby will now report the parameter index properly on type
+ errors as well as the class and value of the incorrect
+ argument passed.
+ (feature request #1699670)
+
+04/30/2007: gga
+ [Ruby]
+ Ruby no longer creates the free_Class function if the class
+ contains its own user defined free function (%freefunc).
+ (bug #1702882)
+
+04/30/2007: gga
+ [Ruby]
+ Made directors raise a ruby exception for incorrect argout
+ returned values if RUBY_EMBEDDED is set, instead of throwing
+ an actual SwigDirector exception.
+ This will prevent crashes when ruby is embedded and unaware
+ of the SwigDirector exception.
+
+04/30/2007: gga
+ [Ruby]
+ Removed the need for -DSWIGEXTERN.
+ Changed swig_ruby_trackings to be a static variable, but also
+ be kept within a hidden instance variable in the SWIG module.
+ This allows properly dealing with trackings across multiple
+ DSOs, which was previously broken.
+ (bug #1700535 and improvement to patch #1702907)
+
+04/29/2007: gga
+ [Ruby] Fixed GC memory issues with trackings that could lead
+ to segfaults when dealing, mainly, with static variables.
+ (bug #1700535 and patch #1702907)
+
+04/29/2007: gga
+ [Ruby]
+ Fixed String conversion using old ruby1.6 macros. Now
+ StringValuePtr() is used if available. This removes warnings
+ when converting strings with \0 in them.
+ (bug #1700535 and patch #1702907)
+
+04/29/2007: gga
+ [Ruby]
+ Fixed the argout count in directors for Ruby. Previously,
+ ignored or "numinputs=0" typemaps would incorrectly not get
+ counted towards the argout count.
+ (bug/patch #1545585)
+
+04/29/2007: gga
+ [Ruby]
+ Upgraded Ruby converter to recognize "numinputs=0". Previously,
+ only the old "ignore" flag was checked (which would currently
+ still work properly, but is deprecated).
+
+04/29/2007: gga
+ [Ruby - but should be made generic]
+
+ %feature("numoutputs","0") added.
+
+ This feature allows you to ignore the output of a function so
+ that it is not added to a list of output values
+ ( ie. argouts ).
+ This should also become a feature of %typemap(directorout)
+ as "numoutputs"=0, just like "numinputs"=0 exists.
+
+ %feature("directors"=1)
+
+ %include <typemaps.i>
+
+ %feature("numoutputs","0") { Class::member_function1 };
+ %typemap(out) MStatus { // some code, like check mstatus
+ // and raise exception if wrong };
+
+ %inline %{
+ typedef int MStatus;
+ class Class {
+
+ // one argument returned, but director out code added
+ // MStatus is discarded as a return (out) parameter.
+ virtual MStatus member_function1( int& OUTPUT );
+
+ // two arguments returned, director out code added
+ // MStatus is not discarded
+ virtual MStatus member_function2( int& OUTPUT );
+ };
+ %}
+
+
+04/21/2007: olly
+ Fix parsing of float constants with an exponent (e.g. 1e-02f)
+ (bug #1699646).
+
+04/20/2007: olly
+ [Python] Fix lack of generation of docstrings when -O is used.
+ Also, fix generation of docstrings containing a double quote
+ character. Patch from Richard Boulton in bug#1700146.
+
+04/17/2007: wsfulton
+ [Java, C#] Support for adding in Java/C# code before and after the intermediary call,
+ specifically related to the marshalling of the proxy type to the intermediary type.
+ The javain/csin typemap now supports the 'pre' and 'post' attributes to achieve this.
+ The javain typemap also supports an optional 'pgcppname' attribute for premature garbage
+ collection prevention parameter naming and the csin typemap supports an optional 'cshin'
+ attribute for the parameter type used in a constructor helper generated when the type is used
+ in a constructor. Details in the Java.html and CSharp.html documentation.
+
+04/16/2007: olly
+ Don't treat `restrict' as a reserved identifier in C++ mode
+ (bug#1685534).
+
+04/16/2007: olly
+ [PHP5] Fix how zend_throw_exception() is called (bug #1700785).
+
+04/10/2007: olly
+ Define SWIGTEMPLATEDISAMBIGUATOR to template for aCC (reported on
+ swig-user that this is needed).
+
+04/04/2007: olly
+ [PHP5] If ZTS is enabled, release <module>_globals_id in MSHUTDOWN
+ to avoid PHP interpreter crash on shutdown. This solution was
+ suggested here: http://bugs.php.net/bug.php?id=40985
+
+04/03/2007: olly
+ [PHP4] Add missing ZTS annotations to generated C++ wrapper code
+ to fix compilation failures when using ZTS enabled SWIG (Linux
+ distributions tend to disable ZTS, but notably the Windows build
+ uses it by default).
+
+04/01/2007: efuzzyone
+ [CFFI] Patch #1684261: fixes handling of unsigned int literals, thanks Leigh Smith.
+ Also, improved documentation.
+
+03/30/2007: olly
+ Avoid generating '<:' token when using SwigValueWrapper<> on a type
+ which starts with '::' (patch #1690948).
+
+03/25/2007: wuzzeb (John Lenz)
+ [perl5] Add SWIG_fail to the SWIG_exception macro. Fixes a few problems reported
+ on the mailing list.
+
+03/23/2007: wsfulton
+ String copying patch from Josh Cherry reducing memory consumption by about 25%.
+
+03/21/2007: wsfulton
+ [Java] Apply patch #1631987 from Ulrik Peterson - bool INOUT typemaps
+ fail on big endian machines.
+
+03/16/2007: wsfulton
+ Fix seg fault given dodgy C++ code: namespace abc::def { }
+
+03/16/2007: wsfulton
+ [Java] Fixes so that ARRAYSOFCLASSES and ARRAYSOFENUMS in arrays_java.i can be applied
+ to pointer types.
+
+03/03/2007: olly
+ [PHP5] When we know the literal numeric value for a constant, use
+ that to initialise the const member in the PHP wrapper class.
+
+03/02/2007: olly
+ [PHP5] Fix PHP wrapper code generated for certain cases of
+ overloaded forms with default arguments.
+
+02/26/2007: efuzzyone
+ [CFFI] Patch #1656395: fixed hex and octal values bug, thanks to Arthur Smyles.
+
+02/22/2007: mgossage
+ [Lua] Fixed bug in typemaps which caused derived_byvalue and rname test cases to fail.
+ Updated derived_byvalue.i to explain how to find and fix the problem
+
+01/25/2007: wsfulton
+ Fix #1538522 and #1338527, forward templated class declarations without a
+ name for the templated class parameters, such as:
+
+ template <typename, class> class X;
+
+01/23/2007: mgossage
+ [Lua] Patch #1640862: <malloc.h> replaced by <stdlib.h>
+ Patch #1598063 Typo in typemaps.i
+
+01/22/2007: mgossage
+ [Lua] Added a lua specific carrays.i which adds the operator[] support.
+ modified the main code to make it not emit all the class member functions & accessors
+ Note: C structs are created using new_XXX() while C++ classes use XXX() (should be standardised)
+ Updated test case: li_carrays
+ Updated the documentation.
+
+01/12/2007: wsfulton
+ [Php] Add support for newfree typemaps (sometimes used by %newobject)
+
+01/12/2007: beazley
+ New command line option -macroerrors. When supplied, this will force
+ the C scanner/parser to report proper location information for code contained
+ inside SWIG macros (defined with %define). By default, SWIG merely reports
+ errors on the line at which a macro is used. With this option, you
+ can expand the error back to its source---something which may simplify
+ debugging.
+
+01/12/2007: beazley
+ [Internals] Major overhaul of C/C++ scanning implementation. For quite
+ some time, SWIG contained two completely independent C/C++ tokenizers--
+ the legacy scanner in CParse/cscanner.c and a general purpose scanner
+ in Swig/scanner.c. SWIG still has two scanning modules, but the C parser
+ scanner (CParse/cscanner.c) now relies upon the general purpose
+ scanner found in Swig/scanner.c. As a result, it is much smaller and
+ less complicated. This change also makes it possible to maintain all
+ of the low-level C tokenizing in one central location instead of two
+ places as before.
+
+ ***POTENTIAL FLAKINESS***
+ This change may cause problems with accurate line number reporting
+ as well as error reporting more generally. I have tried to resolve this
+ as much as possible, but there might be some corner cases.
+
+01/12/2007: mgossage
+ [Lua] Added typemap throws for std::string*, typemap for SWIGTYPE DYNAMIC,
+ changed the existing throws typemap to throw a string instead of making a copy of
+ the object (updating a few test cases to deal with the change).
+ fixed test case: dynamic_casts, exception_partial_info, li_std_string, size_t
+
+01/03/2007: beazley
+ [Internals]. Use of swigkeys.c/.h variables is revoked. Please use
+ simple strings for attribute names.
+
+12/30/2006: beazley
+ Internal API functions HashGetAttr() and HashCheckAttr() have been revoked.
+ Please use Getattr() to retrieve attributes. The function Checkattr() can
+ be used to check attributes. Note: These functions have been revoked
+ because they only added a marginal performance improvement at the expense
+ code clarity.
+
+12/26/2006: mgossage
+ [Lua] Added more STL (more exceptions, map, size_t),
+ fixed test case: conversion_ns_template.
+
+12/21/2006: mgossage
+ [Lua] Update to throw errors when setting immutables,
+ and allowing user addition of module variables.
+
+12/20/2006: wsfulton
+ Fix typedef'd variable wrappers that use %naturalvar, eg, std::string.
+
+12/14/2006: wsfulton
+ [C#] Add std::wstring and wchar_t typemaps
+
+12/14/2006: olly
+ [php] Fix bug #1613673 (bad PHP5 code generated for getters and
+ setters).
+
+12/02/2006: wsfulton, John Lenz, Dave Beazley
+ Move from cvs to Subversion for source control
+
+11/30/2006: beazley
+ Cleaned up swigwarnings.swg file not to use nested macro
+ definitions.
+
+11/12/2006: wsfulton
+ [Java, C#] Fix for %extend to work for static member variables.
+
+Version 1.3.31 (November 20, 2006)
+==================================
+
+11/12/2006: Luigi Ballabio
+ [Python] Alternate fix for Python exceptions bug #1578346 (the previous one broke Python
+ properties in modern classes)
+
+11/12/2006: wsfulton
+ -fakeversion commandline option now generates the fake version into the generated wrappers
+ as well as displaying it when the -version commandline option is used.
+
+14/11/2006: mgossage
+ [lua] update to typemap for object by value, to make it c89 compliant
+
+Version 1.3.30 (November 13, 2006)
+==================================
+
+11/12/2006: wsfulton
+ [java] Remove DetachCurrentThread patch from 08/11/2006 - it causes segfaults
+ on some systems.
+
+11/12/2006: wsfulton
+ [python] Fix #1578346 - Python exceptions with -modern
+
+11/10/2006: wsfulton
+ Fix #1593291 - Smart pointers and inheriting from templates
+
+11/09/2006: wsfulton
+ Fix director operator pointer/reference casts - #1592173.
+
+11/07/2006: wsfulton
+ Add $self special variable for %extend methods. Please use this instead of just 'self'
+ as the C++ 'this' pointer.
+
+11/07/2006: mutandiz
+ [allegrocl]
+ allegrocl.swg: swig-defvar updated to allow specifying of
+ non-default foreign type (via :ftype keyword arg).
+ allegrocl.cxx: Specify proper access type for enum values.
+
+11/03/2006: wsfulton
+ [Java/C#] Fix const std::string& return types for directors as reported by
+ Mark Donselzmann
+
+10/29/2006: wsfulton
+ [Java] Remove DeleteLocalRef from end of director methods for now as it is causing a
+ seg fault when run on Solaris 8.
+
+10/29/2006: wuzzeb (John Lenz)
+ [Guile] Patch from Chris Shoemaker to clean up some warnings in the generated code.
+
+10/29/2006: wsfulton
+ [Java] Important fix to prevent early garbage collection of the Java proxy class
+ while it is being used in a native method. The finalizer could destroy the underlying
+ C++ object while it was being used. The problem occurs when the proxy class is no
+ longer strongly reachable after a native call. The problem seems to occur in
+ memory stress situations on some JVMs. It does not seem to occur on the
+ Sun client JVM up to jdk 1.5. However the 1.6 client jdk has a more aggressive garbage
+ collector and so the problem does occur. It does occur on the Sun server
+ JVMs (certainly 1.4 onwards). The fix entails passing the proxy class into the native
+ method in addition to the C++ pointer in the long parameter, as Java classes are not
+ collected when they are passed into JNI methods. The extra parameter can be suppressed
+ by setting the nopgcpp attribute in the jtype typemap to "1" or using the new -nopgcpp
+ commandline option.
+
+ See Java.html#java_pgcpp for further details on this topic.
+
+10/24/2006: wsfulton
+ [C#] Fix smart pointer wrappers. The virtual/override/new keyword is not generated
+ for each method as the smart pointer class does not mirror the underlying pointer
+ class inheritance hierarchy. SF #1496535
+
+10/24/2006: mgossage
+ [lua] added support for native methods & member function pointers.
+ fixed test cases arrays_dimensionless & cpp_basic. Added new example (functor).
+ tidied up a little of the code (around classHandler).
+
+10/17/2006: wsfulton
+ [C#, Java] directorout typemap changes to fall in line with the other director
+ languages. $result is now used where $1 used to be used. Please change your typemaps
+ if you have a custom directorout typemap.
+
+10/18/2006: wsfulton
+ Some fixes for applying the char array typemaps to unsigned char arrays.
+
+10/17/2006: wsfulton
+ [C#, Java] Add in const size_t& and const std::size_t& typemaps.
+
+10/15/2006: efuzzyone
+ [CFFI] Suppress generating defctype for enums, thanks to Arthur Smyles. Patch 1560983.
+
+10/14/2006: wuzzeb (John Lenz)
+ [Chicken] Minor fix to make SWIG work with the (as yet unreleased) chicken 2.5
+
+ [Guile,Chicken] Fix SF Bug 1573892. Added an ext_test to the test suite to test
+ this bug, but this test can not really be made generic because the external code must
+ plug into the target language interpreter directly.
+ See Examples/test-suite/chicken/ext_test.i and ext_test_external.cxx
+
+ Added a %.externaltest to common.mk, and any interested language modules can
+ copy and slightly modify either the chicken or the guile ext_test.i
+
+10/14/2006: mgossage
+ [Lua] added OUTPUT& for all number types, added a long long type
+ fixed several test cases.
+ update: changed typemaps to use SWIG_ConvertPtr rather than SWIG_MustGetPointer
+ started spliting lua.swg into smaller parts to make it neater
+
+10/13/2006: wsfulton
+ [C#, Java] Marginally better support for multiple inheritance only in that you can
+ control what the base class is. This is done using the new 'replace' attribute in the
+ javabase/csbase typemap, eg in the following, 'Me' will be the base class,
+ no matter what Foo is really derived from in the C++ layer.
+
+ %typemap(javabase, replace="1") Foo "Me";
+ %typemap(csbase, replace="1") Foo "Me";
+
+ Previously it was not possible for the javabase/csbase typemaps to override the C++ base.
+
+10/12/2006: wsfulton
+ [Java] Remove potential race condition on the proxy class' delete() method
+ (it is now a synchronized method, but is now customisable by changing the
+ methodmodifiers attribute in the the javadestruct or javadestruct_derived typemap)
+
+ [C#] Remove potential race condition on the proxy class' Dispose() method,
+ similar to Java's delete() above.
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+10/12/2006: wsfulton
+ [Ruby, Python] Remove redundant director code in %extend methods (%extend
+ methods cannot be director methods)
+
+10/12/2006: wsfulton
+ [Ruby, Python] Fix #1505594 - director objects not returned as director objects
+ in %extend methods.
+
+10/11/2006: wsfulton
+ [Java] Fix #1238798 - Directors using unsigned long long or any other type
+ marshalled across the JNI boundary using a Java class (where the jni typemap
+ contains jobject).
+
+10/06/2006: wsfulton
+ Fix #1162194 - #include/%include within a structure
+
+10/06/2006: wsfulton
+ Fix #1450661, string truncation in String_seek truncating Java/C# enums.
+
+10/06/2006: mgossage
+ [Lua] Fix #1569587. The name is now correct.
+
+10/04/2006: wsfulton
+ Director fixes for virtual conversion operators
+
+10/04/2006: olly
+ [php] Fix #1569587 for PHP. Don't use sizeof() except with string
+ literals. Change some "//" comments to "/* */" for portability.
+
+10/04/2006: mgossage
+ [Lua] Partial Fix #1569587. The type is now correct, but the name is still not correct.
+
+10/03/2006: wsfulton
+ [Ruby] Fix #1527885 - Overloaded director virtual methods sometimes produced
+ uncompileable code when used with the director:except feature.
+
+10/03/2006: wsfulton
+ Directors: Directors are output in the order in which they are declared in
+ the C++ class rather than in some pseudo-random order.
+
+10/03/2006: mmatus
+ Fix #1486281 and #1471039.
+
+10/03/2006: olly
+ [Perl] Fix for handling strings with zero bytes from Stephen Hutsal.
+
+09/30/2006: efuzzyone
+ [CFFI] Bitfield support and vararg support due to Arthur Smyles.
+ C expression to Lisp conversion, thanks to Arthur Smyles for the initial
+ idea, it now supports conversion for a whole range of C expressions.
+
+09/28/2006: wsfulton
+ Fix #1508327 - Overloaded methods are hidden when using -fvirtual optimisation.
+ Overloaded methods are no longer candidates for elimination - this mimics
+ C++ behaviour where all overloaded methods must be defined and implemented
+ in a derived class in order for them to be available.
+
+09/25/2006: wsfulton
+ [Ruby, Python, Ocaml] Fix #1505591 Throwing exceptions in extended directors
+
+09/25/2006: wsfulton
+ Fix #1056100 - virtual operators.
+
+09/24/2006: olly
+ Don't accidentally create a "<:" token (which is the same as "[" in C++).
+ Fixes bug # 1521788.
+
+09/23/2006: olly
+ [Ruby] Support building with recent versions of the Ruby 1.9
+ development branch. Fixes bug #1560092.
+
+09/23/2006: olly
+ Templates can now be instantiated using negative numbers and
+ constant expressions, e.g.:
+
+ template<int q> class x {};
+ %template(x_minus1) x<-1>;
+ %template(x_1plus2) x<1+2>;
+
+ Also, constant expressions can now include comparisons (>, <, >=,
+ <=, !=, ==), modulus (%), and ternary conditionals (a ? b : c).
+
+ Fixes bugs #646275, #925555, #956282, #994301.
+
+09/22/2006: wsfulton
+ Fix %ignore on director methods - Bugs #1546254, #1543533
+
+09/20/2006: wsfulton
+ Fix %ignore on director constructors
+
+09/20/2006: wsfulton
+ Fix seg faults and asserts when director methods are ignored (#1543533)
+
+09/20/2006: wsfulton
+ Fix out of source builds - bug #1544718
+
+09/20/2006: olly
+ Treat a nested class definition as a forward declaration rather
+ than ignoring it completely, so that we generate correct code for
+ passing opaque pointers to the nested class (fixes SF bug #909387).
+
+09/20/2006: olly
+ *** POTENTIAL INCOMPATIBILITY ***
+ [php] Overload resolution now works. However to allow this, SWIG
+ generated wrappers no longer coerce PHP types (which reverts a change
+ made in 1.3.26). So for example, if a method takes a string, you
+ can no longer pass a number without explicitly converting it to a
+ string in PHP using: (string)x
+
+09/18/2006: mgossage
+ [ALL] fix on swiginit.swg, has been reported to crash on several test cases
+ found and fixed problem in imports under python (mingw)
+
+09/16/2006: wsfulton
+ [Python] Patch from Michal Marek for Python 2.5 to fix 64 bit array indexes on
+ 64 bit machines.
+
+09/13/2006: wsfulton
+ The explicitcall feature has been scrapped. This feature was introduced primarily
+ to solve recursive director method calls. Director upcall improvements made instead:
+
+ [Python, Ruby, Ocaml] The swig_up flag is no longer used. The required mutexes
+ wrapping this flag are also no longer needed. The recursive calls going from C++
+ to the target language and back again etc are now avoided by a subtlely different
+ approach. Instead of using the swig_up flag in each director method to indicate
+ whether the explicit C++ call to the appropriate base class method or a normal
+ polymorphic C++ call should be made, the new approach makes one of these calls
+ directly from the wrapper method.
+
+ [Java, C#] The recursive call problem when calling a C++ base class method from
+ Java/C# is now fixed. The implementation is slightly different to the other languages
+ as the detection as to whether the explicit call or a normal polymorphic call is made
+ in the Java/C# layer rather than in the C++ layer.
+
+09/11/2006: mgossage
+ [ALL] updated swiginit.swg to allow multiple interpreters to use multiple
+ swig modules at once. This has been tested in Lua (mingw & linux),
+ perl5 & python (linux) only.
+
+09/11/2006: mgossage
+ [lua] added support for passing function pointers as well as native lua object
+ into wrappered function.
+ Added example funcptr3 to demonstrate this feature
+
+09/05/2006: olly
+ [php] Rename ErrorCode and ErrorMsg #define-s to SWIG_ErrorCode
+ and SWIG_ErrorMsg to avoid clashes with code the user might be
+ wrapping (patch from Darren Warner in SF bug #1466086). Any
+ user typemaps which use ErrorCode and/or ErrorMsg directly will
+ need adjusting - you can easily fix them to work with both old
+ and new SWIG by changing to use SWIG_ErrorMsg and adding:
+
+ #ifndef SWIG_ErrorMsg
+ #define SWIG_ErrorMsg() ErrorMsg()
+ #endif
+
+08/29/2006: olly
+ [php] Move constant initialisation from RINIT to MINIT to fix a
+ warning when using Apache and mod_php. We only need to create
+ PHP constants once when we're first initialised, not for every HTTP
+ request.
+
+08/21/2006: mgossage
+ [Lua]
+ Bugfix #1542466 added code to allow mapping Lua nil's <-> C/C++ NULL's
+ updated various typemaps to work correctly with the changes
+ added voidtest_runme.lua to show the features working
+
+08/19/2006: wuzzeb (John Lenz)
+ [Guile] Add feature:constasvar to export constants as variables instead of functions
+ that return the constant value.
+
+08/11/2006: wsfulton
+ [Java] DetachCurrentThread calls have been added so that natively created threads
+ no longer prevent the JVM from exiting. Bug reported by Thomas Dudziak and
+ Paul Noll.
+
+08/10/2006: wsfulton
+ [C#] Fix director protected methods so they work
+
+07/25/2006: mutandiz
+ [allegrocl]
+ more additions to std::string, some tweaks and small bug fixes
+ -nocwrap mode.
+
+07/21/2006: mgossage
+ [Lua]
+ Bugfix #1526022 pdated std::string to support strings with '\0' inside them
+ updated typemaps.i to add support for pointer to pointers
+
+07/19/2006: mutandiz
+ [allegrocl]
+ - Add std_string.i support.
+ - Add newobject patch submitted by mkoeppe (thanks!)
+ - Fix type name mismatch issue for nested type definitions.
+ specifically typedefs in templated class defns.
+
+07/18/2006: mgossage
+ Bugfix #1522858
+ updated lua.cxx to support -external-runtime command
+
+07/14/2006: wuzzeb (John Lenz)
+ Increment the SWIG_RUNTIME_VERSION to 3, because of the
+ addition of the owndata member in swig_type_info.
+ Reported by: Prabhu Ramachandran
+
+07/05/2006: wsfulton
+ Search path fixes:
+ - Fix search path for library files to behave as documented in Library.html.
+ - Fix mingw/msys builds which did not find the SWIG library when installed.
+ - Windows builds also output the mingw/msys install location when running
+ swig -swiglib.
+ - The non-existent and undocumented config directory in the search path has
+ been removed.
+
+07/05/2006: wsfulton
+ Fix $symname special variable expansion.
+
+07/04/2006: wuzzeb (John Lenz)
+ [Chicken]
+ Add %feature("constasvar"), which instead of exporting a constant as a
+ scheme function, exports the constant as a scheme variable. Update the
+ documentation as well.
+
+07/04/2006: wsfulton
+ [See entry of 09/13/2006 - explicitcall feature and documentation to it removed]
+ New explicitcall feature which generates additional wrappers for virtual methods
+ that call the method explicitly, not relying on polymorphism to make the method
+ call. The feature is a feature flag and is enabled like any other feature flag.
+ It also recognises an attribute, "suffix" for mangling the feature name, see
+ SWIGPlus.html#SWIGPlus_explicitcall documentation for more details.
+
+ [Java, C#]
+ The explicitcall feature is also a workaround for solving the recursive calls
+ problem when a director method makes a call to a base class method. See
+ Java.html#java_directors_explicitcall for updated documentation.
+
+06/28/2006: joe (Joseph Wang)
+ [r] Initial support for R
+
+06/20/2006: wuzzeb (John Lenz)
+ [Chicken]
+ Minor fixes to get apply_strings.i testsuite to pass
+ Remove integers_runme.scm from the testsuite, because SWIG and Chicken does
+ handle overflows.
+
+06/19/2005: olly
+ [php] Add support for generating PHP5 class wrappers for C++
+ classes (use "swig -php5").
+
+06/17/2006: olly
+ [php] Added some missing keywords to the PHP4 keyword list, and
+ fixed __LINE__ and __FILE__ which were in the wrong category.
+ Also added all the keywords new in PHP5, and added comments
+ noting the PHP4 keywords which aren't keywords in PHP5.
+
+06/17/2006: olly
+ [php] Don't segfault if PHP Null is passed as this pointer (e.g.
+ Class_method(Null)) - give a PHP Error instead.
+
+06/15/2006: mutandiz
+ [allegrocl]
+ Add initial support for std::list container class.
+ Fix a few bugs in helper functions.
+
+05/13/2006: wsfulton
+ [Java] Replace JNIEXPORT with SWIGEXPORT, thereby enabling the possibility
+ of using gcc -fvisibility=hidden for potentially smaller faster loading wrappers.
+
+05/13/2006: wsfulton
+ Fix for Makefiles for autoconf-2.60 beta
+
+05/13/2006: wsfulton
+ Vladimir Menshakov patch for compiling wrappers with python-2.5 alpha.
+
+05/12/2006: wsfulton
+ Fix buffer overflow error when using large %feature(docstring) reported
+ by Joseph Winston.
+
+05/12/2006: wsfulton
+ [Perl] Operator overload fix from Daniel Moore.
+
+05/25/2006: mutandiz
+ [allegrocl]
+ Fix bug in generation of CLOS type declarations for unions
+ and equivalent types.
+
+05/24/2006: mutandiz
+ [allegrocl]
+ Don't require a full class definition to generate a CLOS wrapper.
+
+05/20/2006: olly
+ [php] GCC Visibility support now works with PHP.
+
+05/19/2006: olly
+ [php] Removed support for -dlname (use -module instead). Fixed
+ naming of PHP extension module to be consistent with PHP
+ conventions (no "php_" prefix on Unix; on PHP >= 4.3.0, handle Unix
+ platforms which use something other than ".so" as the extension.)
+
+05/13/2006: wsfulton
+ [C#] Director support added
+
+05/07/2006: olly
+ [php] Don't segfault if PHP Null is passed where a C++ reference
+ is wanted.
+
+05/05/2006: olly
+ [php] Fix wrappers generated for global 'char' variables to not
+ include a terminating zero byte in the PHP string.
+
+05/03/2006: wsfulton
+ Modify typemaps so that char * can be applied to unsigned char * or signed char *
+ types and visa versa.
+
+05/03/2006: efuzzyone
+ [cffi]Thanks to Luke J Crook for this idea.
+ - a struct/enum/union is replaced with :pointer only if
+ that slot is actually a pointer to that type. So,:
+ struct a_struct { int x; } and
+ struct b_struct { a_struct struct_1; };
+ will be converted as:
+ (cffi:defcstruct b_struct
+ (struct_1 a_struct))
+ - Other minor fixes in lispifying names.
+
+05/02/2006: wsfulton
+ Fix possible redefinition of _CRT_SECURE_NO_DEPRECATE for VC++.
+
+04/14/2006: efuzzyone
+ [cffi]
+ Thanks to Thomas Weidner for the patch.
+ - when feature export is set (export 'foo) is
+ generated for every symbol
+ - when feature inline is set (declaim (inline foo)) is
+ generated before every function definition
+ - when feature intern_function is set
+ #.(value-of-intern-function "name" "nodeType" package)
+ is emitted instead of the plain symbol. A sample swig-lispify
+ is provided.
+ - every symbol is prefixed by it's package.
+
+04/13/2006: efuzzyone
+ [cffi]
+ Fixed the generation of wrappers for global variables.
+ Added the option [no]swig-lisp which turns on/off generation
+ of code for swig helper lisp macro, functions, etc.
+
+Version 1.3.29 (March 21, 2006)
+===============================
+
+04/05/2006: mutandiz
+ [allegrocl]
+ Fix output typemap of char so it produces a character instead
+ of an integer. Also adds input/output typemaps for 'char *'.
+
+ add command-line argument -isolate to generate an interface
+ file that won't interfere with other SWIG generated files that
+ may be used in the same application.
+
+03/20/2005: mutandiz
+ [allegrocl]
+ More tweaks to INPUT/OUTPUT typemaps for bool.
+
+ Fix constantWrapper for char and string literals.
+
+ find-definition keybindings should work in ELI/SLIME.
+ Output (in-package <module-name>) to lisp wrapper
+ instead of (in-package #.*swig-module-name*).
+
+ slight rework of multiple return values.
+
+ doc updates.
+
+03/17/2005: mutandiz
+ [allegrocl]
+ mangle names of constants generated via constantWrapper.
+
+ When using OUTPUT typemaps and the function has a non-void
+ return value, it should be first in the values-list, followed
+ by the OUTPUT mapped values.
+
+ Fix bug with boolean parameters, which needed to be
+ passed in as int values, rather than T or NIL.
+
+03/15/2006: mutandiz
+ [allegrocl]
+ Generate wrappers for constants when in C++ or -cwrap mode.
+ Make -cwrap the default, since it is most correct. Users
+ can use the -nocwrap option to avoid the creation of a .cxx
+ file when interfacing to C code.
+
+ When in -nocwrap mode, improve the handling of converting
+ infix literals to prefix notation for lisp. This is very
+ basic and not likely to be improved upon since this only
+ applies to the -nocwrap case. Literals we can't figure out
+ will result in a warning and be included in the generated
+ code.
+
+ validIdentifier now more closely approximates what may be
+ a legal common lisp symbol.
+
+ Fix typemap error in allegrocl.swg
+
+03/12/2006: mutandiz
+ [allegrocl]
+ fix up INPUT/OUTPUT typemaps for bool.
+ Generate c++ style wrapper functions for struct/union members
+ when -cwrap option specified.
+
+03/10/2006: mutandiz
+ [allegrocl]
+ Fix bug in C wrapper generation introduced by last allegrocl
+ commit.
+
+03/10/2006: wsfulton
+ [Java]
+ Commit #1447337 - Delete LocalRefs at the end of director methods to fix potential leak
+
+03/10/2006: wsfulton
+ Fix #1444949 - configure does not honor --program-prefix.
+ Removed non-standard configure option --with-release-suffix. Fix the autoconf standard
+ options --program-prefix and --program-suffix which were being shown in the help,
+ but were being ignored. Use --program-suffix instead of --with-release-suffix now.
+
+03/10/2006: wsfulton
+ [Java]
+ Fix #1446319 with patch from andreasth - more than one wstring parameter in director methods
+
+03/07/2006: mkoeppe
+ [Guile]
+ Fix for module names containing a "-" in non-"shadow" mode.
+ Patch from Aaron VanDevender (#1441474).
+
+03/04/2006: mmatus
+ - Add -O to the main program, which now enables -fastdispatch
+
+ [Python]
+
+ - Add the -fastinit option to enable faster __init__
+ methods. Setting 'this' as 'self.this.append(this)' in the python
+ code confuses PyLucene. Now the initialization is done in the
+ the C++ side, as reported by Andi and Robin.
+
+ - Add the -fastquery option to enable faster SWIG_TypeQuery via a
+ python dict cache, as proposed by Andi Vajda
+
+ - Avoid to call PyObject_GetAttr inside SWIG_Python_GetSwigThis,
+ since this confuses PyLucene, as reported by Andi Vajda.
+
+03/02/2006: wsfulton
+ [Java]
+ Removed extra (void *) cast when casting pointers to and from jlong as this
+ was suppressing gcc's "dereferencing type-punned pointer will break strict-aliasing rules"
+ warning. This warning could be ignored in versions of gcc prior to 4.0, but now the
+ warning is useful as gcc -O2 and higher optimisation levels includes -fstrict-aliasing which
+ generates code that doesn't work with these casts. The assignment is simply never made.
+ Please use -fno-strict-aliasing to both suppress the warning and fix the bad assembly
+ code generated. Note that the warning is only generated by the C compiler, but not
+ the C++ compiler, yet the C++ compiler will also generate broken code. Alternatively use
+ -Wno-strict-aliasing to suppress the warning for gcc-3.x. The typemaps affected
+ are the "in" and "out" typemaps in java.swg and arrays_java.swg. Users ought to fix
+ their own typemaps to do the same. Note that removal of the void * cast simply prevents
+ suppression of the warning for the C compiler and nothing else. Typical change:
+
+ From:
+ %typemap(in) SWIGTYPE * %{ $1 = *($&1_ltype)(void *)&$input; %}
+ To:
+ %typemap(in) SWIGTYPE * %{ $1 = *($&1_ltype)&$input; %}
+
+ From:
+ %typemap(out) SWIGTYPE * %{ *($&1_ltype)(void *)&$result = $1; %}
+ To:
+ %typemap(out) SWIGTYPE * %{ *($&1_ltype)&$result = $1; %}
+
+03/02/2006: mkoeppe
+ [Guile -scm]
+ Add typemaps for "long long"; whether the generated code compiles, however, depends
+ on the version and configuration of Guile.
+
+03/02/2006: wsfulton
+ [C#]
+ Add support for inner exceptions. If any of the delegates are called which construct
+ a pending exception and there is already a pending exception, it will create the new
+ exception with the pending exception as an inner exception.
+
+03/02/2006: wsfulton
+ [Php]
+ Added support for Php5 exceptions if compiling against Php5 (patch from Olly Betts).
+
+03/01/2006: mmatus
+ Use the GCC visibility attribute in SWIGEXPORT.
+
+ Now you can compile (with gcc 3.4 or later) using
+ CFLAGS="-fvisibility=hidden".
+
+ Check the difference for the 'std_containers.i' python
+ test case:
+
+ Sizes:
+
+ 3305432 _std_containers.so
+ 2383992 _std_containers.so.hidden
+
+ Exported symbols (nm -D <file>.so | wc -l):
+
+ 6146 _std_containers.so
+ 174 _std_containers.so.hidden
+
+ Excecution times:
+
+ real 0m0.050s user 0m0.039s sys 0m0.005s _std_containers.so
+ real 0m0.039s user 0m0.026s sys 0m0.007s _std_containers.so.hidden
+
+ Read http://gcc.gnu.org/wiki/Visibility for more details.
+
+
+02/27/2006: mutandiz
+ [allegrocl]
+ Add support for INPUT, OUTPUT, and INOUT typemaps.
+ For OUTPUT variables, the lisp wrapper returns multiple
+ values.
+
+02/26/2006: mmatus
+
+ [Ruby] add argcargv.i library file.
+
+ Use it as follow:
+
+ %include argcargv.i
+
+ %apply (int ARGC, char **ARGV) { (size_t argc, const char **argv) }
+
+ %inline {
+ int mainApp(size_t argc, const char **argv)
+ {
+ return argc;
+ }
+ }
+
+ then in the ruby side:
+
+ args = ["asdf", "asdf2"]
+ n = mainApp(args);
+
+
+ This is the similar to the python version Lib/python/argcargv.i
+
+02/24/2006: mgossage
+
+ Small update Lua documents on troubleshooting problems
+
+02/22/2006: mmatus
+
+ Fix all the errors reported for 1.3.28.
+ - fix bug #1158178
+ - fix bug #1060789
+ - fix bug #1263457
+ - fix 'const char*&' typemap in the UTL, reported by Geoff Hutchison
+ - fixes for python 2.1 and the runtime library
+ - fix copyctor + template bug #1432125
+ - fix [ 1432152 ] %rename friend operators in namespace
+ - fix gcc warning reported by R. Bernstein
+ - avoid assert when finding a recursive scope inheritance,
+ emit a warning in the worst case, reported by Nitro
+ - fix premature object deletion reported by Paul in tcl3d
+ - fix warning reported by Nitro in VC7
+ - more fixes for old Solaris compiler
+ - fix for python 2.3 and gc_refs issue reported by Luigi
+ - fix fastproxy for methods using kwargs
+ - fix overload + protected member issue reported by Colin McDonald
+ - fix seterrormsg as reported by Colin McDonald
+ - fix directors, now the test-suite runs again using -directors
+ - fix for friend operator and Visual studio and bug 1432152
+ - fix bug #1435090
+ - fix using + %extend as reported by William
+ - fix bug #1094964
+ - fix for Py_NotImplemented as reported by Olly and Amaury
+ - fix nested namespace issue reported by Charlie
+
+ and also:
+
+ - allow director protected members by default
+ - delete extra new lines in swigmacros[UTL]
+ - cosmetic for generated python code
+ - add the factory.i library for UTL
+ - add swigregister proxy method and move __repr__ to a
+ single global module [python]
+
+02/22/2006: mmatus
+
+ When using directors, now swig will emit all the virtual
+ protected methods by default.
+
+ In previous releases, you needed to use the 'dirprot'
+ option to acheive the same.
+
+ If you want, you can disable the new default behaviour,
+ use the 'nodirprot' option:
+
+ swig -nodirprot ...
+
+ and/or the %nodirector feature for specific methods, i.e.:
+
+ %nodirector Foo::bar;
+
+ struct Foo {
+ virtual ~Foo();
+
+ protected:
+ virtual void bar();
+ };
+
+
+ As before, pure abstract protected members are allways
+ emitted, independent of the 'dirprot/nodirprot' options.
+
+
+02/22/2006: mmatus
+ Add the factory.i library for languages using the UTL (python,tcl,ruby,perl).
+
+ factory.i implements a more natural wrap for factory methods.
+
+ For example, if you have:
+
+ ---- geometry.h --------
+ struct Geometry {
+ enum GeomType{
+ POINT,
+ CIRCLE
+ };
+
+ virtual ~Geometry() {}
+ virtual int draw() = 0;
+
+ //
+ // Factory method for all the Geometry objects
+ //
+ static Geometry *create(GeomType i);
+ };
+
+ struct Point : Geometry {
+ int draw() { return 1; }
+ double width() { return 1.0; }
+ };
+
+ struct Circle : Geometry {
+ int draw() { return 2; }
+ double radius() { return 1.5; }
+ };
+
+ //
+ // Factory method for all the Geometry objects
+ //
+ Geometry *Geometry::create(GeomType type) {
+ switch (type) {
+ case POINT: return new Point();
+ case CIRCLE: return new Circle();
+ default: return 0;
+ }
+ }
+ ---- geometry.h --------
+
+
+ You can use the %factory with the Geometry::create method as follows:
+
+ %newobject Geometry::create;
+ %factory(Geometry *Geometry::create, Point, Circle);
+ %include "geometry.h"
+
+ and Geometry::create will return a 'Point' or 'Circle' instance
+ instead of the plain 'Geometry' type. For example, in python:
+
+ circle = Geometry.create(Geometry.CIRCLE)
+ r = circle.radius()
+
+ where 'circle' now is a Circle proxy instance.
+
+
+02/17/2006: mkoeppe
+ [MzScheme] Typemaps for all integral types now accept the full range of integral
+ values, and they signal an error when a value outside the valid range is passed.
+ [Guile] Typemaps for all integral types now signal an error when a value outside
+ the valid range is passed.
+
+02/13/2006: mgossage
+ [Documents] updated the extending documents to give a skeleton swigging code
+ with a few typemaps.
+ [Lua] added an extra typemap for void* [in], so a function which requires a void*
+ can take any kind of pointer
+
+Version 1.3.28 (February 12, 2006)
+==================================
+
+02/11/2006: mmatus
+ Fix many issues with line counting and error reports.
+
+02/11/2006: mmatus
+ [Python] Better static data member support, if you have
+
+ struct Foo {
+ static int bar;
+ };
+
+ then now is valid to access the static data member, ie:
+
+ f = Foo()
+ f.bar = 3
+
+ just as in C++.
+
+
+02/11/2006: wsfulton
+ [Perl]
+ Fixed code generation to work again with old versions of Perl
+ (5.004 and later tested)
+
+02/04/2006: mmatus
+ [Python] Add the %extend_smart_pointer() directive to extend
+ SWIG smart pointer support in python.
+
+ For example, if you have a smart pointer as:
+
+ template <class Type> class RCPtr {
+ public:
+ ...
+ RCPtr(Type *p);
+ Type * operator->() const;
+ ...
+ };
+
+ you use the %extend_smart_pointer directive as:
+
+ %extend_smart_pointer(RCPtr<A>);
+ %template(RCPtr_A) RCPtr<A>;
+
+ then, if you have something like:
+
+ RCPtr<A> make_ptr();
+ int foo(A *);
+
+ you can do the following:
+
+ a = make_ptr();
+ b = foo(a);
+
+ ie, swig will accept a RCPtr<A> object where a 'A *' is
+ expected.
+
+ Also, when using vectors
+
+ %extend_smart_pointer(RCPtr<A>);
+ %template(RCPtr_A) RCPtr<A>;
+ %template(vector_A) std::vector<RCPtr<A> >;
+
+ you can type
+
+ a = A();
+ v = vector_A(2)
+ v[0] = a
+
+ ie, an 'A *' object is accepted, via implicit conversion,
+ where a RCPtr<A> object is expected. Additionally
+
+ x = v[0]
+
+ returns (and sets 'x' as) a copy of v[0], making reference
+ counting possible and consistent.
+
+ %extend_smart_pointer is just a collections of new/old
+ tricks, including %typemaps and the new %implicitconv
+ directive.
+
+02/02/2006: mgossage
+ bugfix #1356577, changed double=>lua_number in a few places.
+ added the std::pair wrapping
+
+01/30/2006: wsfulton
+ std::string and std::wstring member variables and global variables now use
+ %naturalvar by default, meaning they will now be wrapped as expected in all languages.
+ Previously these were wrapped as a pointer rather than a target language string.
+ It is no longer necessary to add the following workaround to wrap these as strings:
+
+ %apply const std::string & { std::string *}
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+01/28/2006: mkoeppe
+ [Guile -scm]
+ Add typemaps for handling of member function pointers.
+
+01/24/2006: mmatus
+ - Better support for the %naturalvar directive, now it
+ works with the scripting languages as well as
+ Java/C#.
+
+ Now, it can also be applied to class types:
+
+ %naturalvar std::string;
+ %include <std_string.i>
+
+ that will tell swig to use the the 'natural' wrapping
+ mechanism to all std::string global and member
+ variables.
+
+ - Add support for the %allowexcept feature along the
+ scripting languages, which allows the %exception feature
+ to be applied to the variable access methods. Also, add
+ the %exceptionvar directive to specify a distintic
+ exception mechanism only for variables.
+
+
+ - Add more docs for the %delobject directive to mark a method as a
+ destructor, 'disowning' the first argument. For example:
+
+ %newobject create_foo;
+ %delobject destroy_foo;
+
+ Foo *create_foo() { return new Foo(); }
+ void destroy_foo(Foo *foo) { delete foo; }
+
+ or in a member method as:
+
+ %delobject Foo::destroy;
+
+ class Foo {
+ public:
+ void destroy() { delete this;}
+
+ private:
+ ~Foo();
+ };
+
+
+01/24/2006: mgossage
+ [Lua]
+ - Removed the type swig_lua_command_info & replace with luaL_reg
+ (which then broke the code), fixed this
+ - added an additional cast in the typemaps for enum's
+ due to the issue that VC.Net will not allow casting of
+ a double to an enum directly. Therefore cast to int then to enum
+ (thanks to Jason Rego for this observation)
+
+01/16/2006: mmatus (Change disabled... will be back in CVS soon)
+ Add initial support for regexp via the external library
+ RxSpencer. SWIG doesn't require this library to compile
+ and/or run. But if you specify --with-rxspencer, and the
+ library is found during installation, then swig will use
+ it in three places:
+
+ - In %renames rules, via the new rxsmatch rules, for example:
+
+ %rename("%(lowercase)",rxsmatch$name="GSL_.*") "";
+ %rename("%(lowercase)",rxsmatch$nodeType="enum GSL_.*") "";
+
+ rxsmatch is similar to the match rule, it just uses
+ the RxSpencer regexp library to decide if there is a
+ match with the provided regexp. As with the match
+ rule, you can also use the negate rule notrxsmatch.
+
+ - In the %rename target name via the rxstarget option, for example:
+
+ %rename("%(lowercase)",rxstarget=1) "GSL_.*";
+
+ where the target name "GSL.*" is now understood as a
+ regexp to be matched.
+
+ - In the new encoder "rxspencer", which looks like:
+
+ %(rxspencer:[regexp][replace])s
+
+ where "regexp" is the regular expression and "replace"
+ is a string used as a replacement, where the @0,@1,...,@9
+ pseudo arguments are used to represent the
+ corresponding matching items in the reg expression.
+
+ For example:
+
+ %(rxspencer:[GSL.*][@0])s <- Hello ->
+ %(rxspencer:[GSL.*][@0])s <- GSLHello -> GSLHello
+ %(rxspencer:[GSL(.*)][@1])s <- GSLHello -> Hello
+ %(rxspencer:[GSL(.*)][gsl@1])s <- GSLHello -> gslHello
+
+ Another example could be:
+
+ %rename("%(lowercase)s",sourcefmt="%(rxspencer:[GSL_(.*)][@1])s",%$isfunction) "";
+
+ which take out the prefix "GSL_" and returns all the
+ function names in lower cases, as following:
+
+ void GSL_Hello(); -> hello();
+ void GSL_Hi(); -> hi();
+ const int GSL_MAX; -> GSL_MAX; // no change, is not a function
+
+ We use the RxSpencer as an initial test bed to
+ implemention while we decide which library will be
+ finally added to swig.
+
+ You can obtain the RxSpencer library from
+
+ http://arglist.com/regex (Unix)
+
+ or
+
+ http://gnuwin32.sourceforge.net/packages.html (Windows)
+
+ Once installed, use "man rxspencer" to get more info
+ about the regexp format, or just google rxspencer.
+
+ Since now you can enable the rxsmatch rules (see above),
+ the simple or '|' support for the match rules
+ (01/12/2006: mmatus) is disabled. Still, if you have
+ problems with the rxspencer library, you can re-enable
+ the simple 'match or' support using
+ -DSWIG_USE_SIMPLE_MATCHOR.
+
+
+01/16/2006: mmatus
+ Change the %rename predicates to use the prefix '%$', as in:
+
+ %rename("%(utitle)s",%$isfunction,%$ismember) "";
+
+ to avoid clashings with other swig macros/directives.
+
+01/14/2006: cfisavage
+ [Ruby]
+ Added support for Ruby bang! methods via a new %bang feature.
+ Bang methods end in exclamation points and indicate that the
+ object being processed will be modified in-place as
+ opposed to being copied.
+
+01/12/2006: cfisavage
+ [Ruby]
+ Updated the Ruby module to automatically convert
+ method names to lower_case_with_underscores using the
+ new %rename functionality.
+
+01/12/2006: mmatus
+ - Add aliases for 'case' encoders used with %rename/%namewarn
+
+ %(uppercase)s hello_world -> HELLO_WORLD
+ %(lowercase)s HelloWorld -> helloworld
+ %(camelcase)s hello_world -> HelloWorld
+ %(undercase)s HelloWorld -> hello_world
+
+
+01/12/2006: mmatus
+ - Add the -dump_parse_module and -dump_parse_top options,
+ which are similar to -dump_module and -dump_top, but they
+ dump the node trees just after parsing, showing only the
+ attributes visible at the parsing stage, and not the added
+ later in typemap.cxx, allocate.cxx, lang.cxx or elsewhere.
+
+ Besides debugging porpuses, these options are very useful
+ if you plan to use %rename in an "advance way", since it
+ shows only and all the node's attributes you can use
+ inside the match rules.
+
+
+01/12/2006: mmatus
+ - Add predicates to %rename, so, you don't need to
+ remember, for example, how to match a member function.
+
+ Now it is easy, for example to use the 'utitle' encoder
+ in all the member methods, you type:
+
+ %rename("%(utitle)s",%isfunction,%ismember) "";
+
+ or to ignore all the enumitems in a given class:
+
+ %rename("$ignore", %isenumitem, %classname="MyClass") "";
+
+ Available predicates are (see swig.swg):
+
+ %isenum
+ %isenumitem
+ %isaccess
+ %isclass
+ %isextend
+ %isextend
+ %isconstructor
+ %isdestructor
+ %isnamespace
+ %istemplate
+ %isconstant
+
+ %isunion
+ %isfunction
+ %isvariable
+ %isimmutable
+
+ %isstatic
+ %isfriend
+ %istypedef
+ %isvirtual
+ %isexplicit
+ %isextern
+
+ %ismember
+ %isglobal
+ %innamespace
+
+ %ispublic
+ %isprotected
+ %isprivate
+
+ %classname
+
+ These predicates correspond to specific 'match'
+ declarations, which sometimes are not as evident as the
+ predicates names.
+
+
+ - Add the or '|' operation in %rename match, for
+ example to capitalize all the constants (%constant or
+ const cdecl):
+
+ %rename("%(upper)s",match="cdecl|constant",%isimmutable) "";
+
+
+
+01/12/2006: mgossage
+ - Partial fixed of errors under C89, bug #1356574
+ (converted C++ style comments to C style)
+ - Added patches from neomantra@users.sf.net #1379988 and #1388343
+ missing a 'return' statement for error conditions
+ also updated the %init block bug #1356586
+
+01/10/2006: mmatus
+ - Add the 'utitle' encoder, as an example of how to add
+ your own encoder. I added the encoder method in misc.c
+ but developers can add others, the same way, inside any
+ target language.
+
+ Well, 'utitle' is the reverse of 'ctitle', ie:
+
+ %rename("%(ctitle)s") camel_case; -> CamelCase;
+ %rename("%(utitle)s") CamelCase; -> camel_case;
+
+
+01/10/2006: cfisavage
+ [Ruby]
+ Updated Ruby Exception handling. Classes that are specified in throws clauses,
+ or are marked as %exceptionclass, are now inherited from rb_eRuntimeError.
+ This allows instances of these classes to be returned to Ruby as exceptions.
+ Thus if a C++ method throws an instance of MyException, the calling Ruby
+ method will get back a MyException object. To see an example,
+ look at ruby/examples/exception_class.
+
+01/10/2006: mmatus
+
+ - Add the %catches directive, which complements the %exception
+ directive in a more automatic way. For example, if you have
+
+ int foo() throw(E1);
+
+ swig generates the proper try/catch code to dispatch E1.
+
+ But if you have:
+
+
+ int barfoo(int i) {
+ if (i == 1) {
+ throw E1();
+ } else {
+ throw E2();
+ }
+ return 0;
+ }
+
+ ie, where there is no explicit exception specification in the decl, you
+ end up doing:
+
+ %exception barfoo {
+ try {
+ $action
+ } catch(E1) { ... }
+ } catch(E2) { ... }
+ }
+
+ which is very tedious. Well, the %catches directive defines
+ the list of exceptions to catch, and from swig:
+
+ %catches(E1,E2) barfoo(int i);
+ int barfoo(int i);
+
+ is equivalent to
+
+ int barfoo(int i) throw(E1,E2);
+
+ Note, however, that the %catches list doesn't have to
+ correspond to the C++ exception specification. For example, if you
+ have:
+
+ struct E {};
+ struct E1 : E {};
+ struct E2 : E {};
+
+ int barfoo(int i) throw(E1,E2);
+
+ you can define
+
+ %catches(E) barfoo(int i);
+
+ and swig will generate an action code equivalent to
+
+ try {
+ $action
+ } catch(E &_e) {
+ <raise _e>;
+ }
+
+ Of course, you still have to satisfy the C++ restrictions,
+ and the catches list must be compatible (not the same)
+ as the original list of types in the exception specification.
+
+ Also, you can now specify that you want to catch the
+ unknown exception '...', for example:
+
+ %catches(E1,E2,...) barfoo(int);
+
+ In any case, the %catches directive will emit the
+ code to convert into the target language error/exception
+ using the 'throws' typemap.
+
+ For the '...' case to work, you need to
+ write the proper typemap in your target language. In the
+ UTL, this looks like:
+
+ %typemap(throws) (...) {
+ SWIG_exception(SWIG_RuntimeError,"unknown exception");
+ }
+
+01/09/2006: mutandiz
+ [Allegrocl]
+
+ Fixes a number of SEGVs primarily in the handling of
+ various anonymous types. Found in a pass through the
+ swig test-suite. Still more to do here, but this is a
+ good checkpoint.
+
+ Adds -cwrap and -nocwrap as an allegrocl specific
+ command-line argument. Controls generating of a C
+ wrapper file when wrapping C code. By default only a
+ lisp file is created for C code wrapping.
+
+ Doc updates for the command-line arguments and fixes as
+ pointed out on swig-devel
+
+01/05/2006: wsfulton
+ [Java] Fix unsigned long long and const unsigned long long & typemaps
+ - Bug #1398394 with patch from Dries Decock
+
+01/06/2006: mmatus
+ Add 'named' warning codes, now in addition to:
+
+ %warnfilter(813);
+
+ you can use
+
+ %warnfilter(SWIGWARN_JAVA_MULTIPLE_INHERITANCE);
+
+ just use the same code name found in Source/Include/swigwarn.h
+ plus the 'SWIG' prefix.
+
+ If a developer adds a new warning code, the Lib/swigwarn.swg file
+ will be generated when running the top level make.
+
+01/05/2006: cfisavage
+ [Ruby]
+ Reimplemented object tracking for Ruby. The new implementation works
+ by expanding the swig_class structure for Ruby by adding a trackObjects
+ field. This field can be set/unset via %trackobjects as explained
+ in the Ruby documentation. The new implementation is more robust
+ and takes less code to implement.
+
+01/05/2006: wsfulton
+ Fix for %extend and static const integral types, eg:
+
+ class Foo {
+ public:
+ %extend {
+ static const int bar = 42;
+ }
+ };
+
+12/30/2005: mmatus
+
+ - Add info for old and new debug options:
+
+ -dump_top - Print information of the entire node tree, including system nodes
+ -dump_module - Print information of the module node tree, avoiding system nodes
+ -dump_classes - Print information about the classes found in the interface
+ -dump_typedef - Print information about the types and typedefs found in the interface
+ -dump_tags - Print information about the tags found in the interface
+ -debug_typemap - Print information for debugging typemaps
+ -debug_template - Print information for debugging templates
+
+ - Add the fakeversion. If you have a project that uses
+ configure/setup.py, or another automatic building system
+ and requires a specific swig version, let say 1.3.22
+ you can use:
+
+ SWIG_FEATURES="-fakeversion 1.3.22"
+
+ or
+
+ swig -fakeversion 1.3.22
+
+ and then swig -version will report 1.3.22 instead of the
+ current version.
+
+ Typical use would be
+
+ SWIG_FEATURES="-fakeversion 1.3.22" ./configure
+
+12/30/2005: mmatus
+
+ - Add option/format support to %rename and %namewarn.
+ Now %namewarn can force renaming, for example:
+
+ %namewarn("314: import is a keyword",rename="_%s") "import";
+
+ and rename can also support format forms:
+
+ %rename("swig_%s") import;
+
+ Now, since the format is processed via swig Printf, you
+ can use encoders as follows:
+
+ %rename("%(title)s") import; -> Import
+ %rename("%(upper)s") import; -> IMPORT
+ %rename("%(lower)s") Import; -> import
+ %rename("%(ctitle)s") camel_case; -> CamelCase
+
+ This will allow us to add more encoders, as the
+ expected one for regular expressions.
+
+ - Add the above 'ctitle' encoder, which does the camel case:
+
+ camel_case -> CamelCase
+
+ - Also, while we get the regexp support, add the 'command' encoder,
+ you can use it as follows
+
+ %rename("%(command:sed -e 's/\([a-z]\)/\U\\1/' <<< )s") import;
+
+ then swig will popen the command
+
+ "sed -e 's/\([a-z]\)/\U\\1/' <<< import"
+
+ see below for anonymous renames for better examples.
+
+ - The rename directive now also allows:
+
+ - simple match: only apply the rename if a type match
+ happen, for example
+
+ %rename(%(title)s,match="enumitem") hello;
+
+ enum Hello {
+ hi, hello -> hi, Hello
+ };
+ int hello() -> hello;
+
+ - extended match: only apply the rename if the 'extended attribute' match
+ occurred, for example:
+
+ // same as simple match
+ %rename(%(title)s,match$nodeType="enumitem") hello;
+
+ enum Hello {
+ hi, hello -> hi, Hello
+ };
+
+ Note that the symbol '$' is used to define the attribute name in
+ a 'recursive' way, for example:
+
+ // match only hello in 'enum Hello'
+ %rename(%(title)s,match$parentNode$type="enum Hello") hello;
+
+ enum Hello {
+ hi, hello -> hi, Hello // match
+ };
+
+ enum Hi {
+ hi, hello -> hi, hello // no match
+ };
+
+ here, for Hello::hi, the "parentNode" is "Hello", and its "type"
+ is "enum Hello".
+
+
+ - Anonymous renames: you can use 'anonymous' rename directives, for example:
+
+ // rename all the enum items in Hello
+ %rename(%(title)s,match$parentNode$type="enum Hello") "";
+
+ enum Hello {
+ hi, hello -> Hi, Hello // match both
+ };
+
+ enum Hi {
+ hi, hello -> hi, hello // no match
+ };
+
+ // rename all the enum items
+ %rename(%(title)s,match$nodeType="enumitem") "";
+
+ // rename all the items in given command (sloooow, but...)
+ %rename(%(command:<my external cmd>)s) "";
+
+
+ Anonymous renames with commands can be very powerful, since you
+ can 'outsource' all the renaming mechanism (or part of it) to an
+ external program:
+
+ // Uppercase all (and only) the names that start with 'i'
+ %rename("%(command:awk '/^i/{print toupper($1)}' <<<)s") "";
+
+ int imported() -> IMPORTED;
+ int hello() -> hello
+
+ Note that if the 'command' encoder returns an empty string, swig
+ understands that no rename is necessary.
+
+ Also note that %rename 'passes' the matched name. For example, in
+ this case
+
+ namespace ns1 {
+ int foo();
+ }
+
+ namespace ns2 {
+ int bar();
+ }
+
+ the external program only receives "foo" and "bar". If needed,
+ however, you can request the 'fullname'
+
+ %rename("%(command:awk 'awk '/ns1::/{l=split($1,a,"::"); print toupper(a[l])}'' <<<)s",fullname=1) "";
+
+ ns1::foo -> FOO
+ ns2::bar -> bar
+
+ - Mixing encoders and matching: of course, you can do mix commands
+ and match fields, for example:
+
+ %rename("%(<my encoder for fncs>)",match="cdecl") "";
+ %rename("%(<my encoder for enums>)",match="enumitem") "";
+ %rename("%(<my encoder for enums inside a class>)",match="enumitem",
+ match$parentNode$parentNode$nodeType="class") "";
+
+ Use "swig -dump_parse_module" to see the attribute names you can use to
+ match a specific case.
+
+ - 'sourcefmt' and 'targetfmt': sometimes you need to
+ process the 'source' name before comparing, for example
+
+ %namewarn("314: empty is a keyword",sourcefmt="%(lower)s") "empty";
+
+ then if you have
+
+ int Empty(); // "Empty" is the source
+
+ you will get the keyword warning since 'Empty' will be
+ lower cased, via the sourcefmt="%(lower)s" option,
+ before been compared to the 'target' "empty".
+
+ There is an additional 'targetfmt' option to process the
+ 'target' before comparing.
+
+ - complementing 'match': you can use 'notmatch', for example
+
+ %namewarn("314: empty is a keyword",sourcefmt="%(lower)s",notmatch="namespace") "empty";
+
+ here, the name warning will be applied to all the symbols except namespaces.
+
+
+12/30/2005: mmatus
+
+ - Add initial support for gcj and Java -> <target language> mechanism.
+
+ See examples in:
+
+ Examples/python/java
+ Examples/ruby/java
+ Examples/tcl/java
+
+ to see how to use gcj+swig to export java classes into
+ python/ruby/tcl.
+
+ The idea is to put all the common code for gcj inside
+
+ Lib/gcj
+
+ and localize specific types such as jstring, as can be found
+ in
+
+ Lib/python/jstring.i
+ Lib/ruby/jstring.i
+ Lib/tcl/jstring.i
+
+ Using the UTL, this is very easy, and the perl version for
+ jstring.i will be next.
+
+
+12/29/2005: mmatus
+ - Add the copyctor feature/directive/option to enable the automatic
+ generation of copy constructors. Use as in:
+
+ %copyctor A;
+
+ struct A {
+
+ };
+
+ then this will work
+
+ a1 = A();
+ a2 = A(a1);
+
+ Also, since it is a feature, if you just type
+
+ %copyctor;
+
+ that will enable the automatic generation for all the
+ classes. It is also equivalent to
+
+ swig -copyctor -c++ ...
+
+ Notes:
+
+ 1.- The feature only works in C++ mode.
+
+ 2.- The automatic creation of the copy constructor will
+ usually produce overloading. Hence, if the target
+ language doesn't support overloading, a special name
+ will be used (A_copy).
+
+ 3.- For the overloading reasons above, it is probably not
+ a good idea to use the flag when, for example, you are
+ using keywords in Python.
+
+ 4.- The copyctor automatic mechanism follows more or less
+ the same rules as the default constructor mechanism,
+ i.e., a copy constructor will not be added if the
+ class is abstract or if there is a pertinent non-public
+ copy ctor in the class or its hierarchy.
+
+ Hence, it might be necessary for you to complete the
+ class declaration with the proper non-public copy ctor
+ to avoid a wrong constructor addition.
+
+ - Fix features/rename for templates ctor/dtor and other
+ things around while adding the copyctor mechanism.
+
+
+12/27/2005: mmatus
+ - Add the 'match' option to typemaps. Assume you have:
+
+ %typemap(in) SWIGTYPE * (int res) {..}
+ %typemap(freearg) SWIGTYPE * { if (res$argnum) ...}
+
+ then if you do
+
+ %typemap(in) A * {...}
+
+ swig will 'overload the 'in' typemap, but the 'freearg'
+ typemap will be also applied, even when this is wrong. The old
+ solutions is to write:
+
+ %typemap(in) A * {...}
+ %typemap(freeag) A * "";
+
+ overload 'freearg' with an empty definition.
+
+ The problem is, however, there is no way to know you need
+ to do that until you start getting broken C++ code, or
+ worse, broken runtime code.
+
+ The same applies to the infamous 'typecheck' typemap,
+ which always confuses people, since the first thing you do
+ is to just write the 'in' typemap.
+
+ The 'match' option solves the problem, and if instead you write:
+
+ %typemap(in) SWIGTYPE * (int res) {..}
+ %typemap(freearg,match="in") SWIGTYPE * { if (res$argnum) ...}
+ %typemap(typecheck,match="in",precedence...) SWIGTYPE * {...}
+
+ it will tell swig to apply the 'freearg/typecheck'
+ typemaps only if they 'match' the type of the 'in'
+ typemap. The same can be done with other typemaps as:
+
+ %typemap(directorout) SWIGTYPE * {...}
+ %typemap(directorfree,match="directorout") SWIGTYPE * {...}
+
+
+12/27/2005: mmatus
+ - Add the 'naturalvar' option/mode/feature to treat member
+ variables in a more natural way, ie, similar to the global
+ variable behavior.
+
+ You can use it in a global way via the command line
+
+ swig -naturalvar ...
+
+ or the module mode option
+
+ %module(naturalvar=1)
+
+ both forms make swig treat all the member variables in the
+ same way it treats global variables.
+
+ Also, you can use it in a case by case approach for
+ specific member variables using the directive form:
+
+ %naturalvar Bar::s;
+
+ Then, in the following case for example:
+
+ std::string s;
+ struct Bar {
+ std::string s;
+ };
+
+ you can do:
+
+ b = Bar()
+ b.s ="hello"
+ cvar.s = "hello"
+
+ if (b.s != cvar.s):
+ raise RuntimeError
+
+
+ This is valid for all the languages, and the
+ implementation is based on forcing the use of the
+ const SWIGTYPE& (C++)/SWIGTYPE (C) typemaps for the
+ get/set methods instead of the SWIGTYPE * typemaps.
+ Hence, for 'naturalvar' to work, each target language
+ must implement 'typemap(in/out) const Type&' properly.
+
+ The 'naturalvar' option replaces or makes workarounds such as:
+
+ %apply const std::string & { std::string *}
+
+ unnecessary.
+
+ Note1: If your interface has other kinds of workarounds to
+ deal with the old 'unnatural' way to deal with member
+ variables (returning/expecting pointers), the
+ 'naturalvar' option could break them.
+
+ Note2: the option has no effect on unnamed types, such
+ as unnamed nested unions.
+
+
+12/27/2005: mmatus
+ - Add more 'expressive' result states for the typemap
+ libraries.
+
+ In the past, for scripting languages, you would do checking something like:
+
+ if (ConvertPtr(obj,&vptr,ty,flags) != -1) {
+ // success
+ } else {
+ // error
+ }
+
+ Now the result state can carry more information,
+ including:
+
+ - Error state: like the old -1/0, but with error codes from swigerrors.swg.
+
+ int res = ConvertPtr(obj,&vptr,ty,flags);
+ if (SWIG_IsOK(res)) {
+ // success code
+ } else {
+ SWIG_Error(res); // res carries the error code
+ }
+
+ - Cast rank: when returning a simple successful
+ conversion, you just return SWIG_OK, but if you need
+ to do a 'cast', you can add the casting rank, ie:
+
+ if (PyFloat_Check(obj)) {
+ value = PyFloat_AsDouble(obj);
+ return SWIG_OK;
+ } else if (PyInt_Check(obj)) {
+ value = (double) PyInt_AsLong(obj);
+ return SWIG_AddCast(SWIG_OK);
+ }
+
+ later, the casting rank is used to properly dispatch
+ the overloaded function, for example. This of course
+ requires your language to support and use the new
+ dispatch cast/rank mechanism (Now mainly supported in
+ perl and python, and easily expandable to ruby and tcl).
+
+ - [UTL] Add support for the new 'expressive' result states.
+
+12/27/2005: mmatus
+ - Add support for the C++ implicit conversion mechanism, which
+ required some modifications in parser.y (to recognize
+ 'explicit') and overload.cxx (to replace $implicitconv as
+ needed).
+
+ Still, real support in each target language requires each
+ target language to be modified. Python provides an example,
+ see below.
+
+
+ - Add support for native C++ implicit conversions, ie, if you
+ have
+
+ %implicitconv A;
+
+ struct A {
+ int ii;
+ A() {ii = 1;}
+ A(int) {ii = 2;}
+ A(double) {ii = 3;}
+ explicit A(char *s) {ii = 4;}
+ };
+
+ int get(const A& a) {return a.ii;}
+
+ you can call:
+
+ a = A()
+ ai = A(1)
+ ad = A(1.0)
+ as = A("hello")
+
+ # old forms
+ get(a) -> 1
+ get(ai) -> 2
+ get(ad) -> 3
+ get(as) -> 4
+
+ #implicit conversions
+ get(1) -> 2
+ get(1.0) -> 3
+ get("hello") -> Error, explicit constructor
+
+ Also, as in C++, now implicit conversions are supported in
+ variable assigments, and if you have:
+
+ A ga;
+ struct Bar {
+ A a;
+ };
+
+ you can do:
+
+ cvar.ga = A(1)
+ cvar.ga = 1
+ cvar.ga = 1.0
+ cvar.ga = A("hello")
+ cvar.ga = "hello" -> error, explicit constructor
+
+ b = Bar()
+ b.a = A("hello")
+ b.a = 1
+ b.a = 1.0
+ b.a = "hello" -> error, explicit constructor
+
+ Note that the last case, assigning a member var directly,
+ also requires the 'naturalvar' option.
+
+ This support now makes the old '%implicit' macro, which
+ was found in 'implicit.i' and it was fragile in many ways,
+ obsolete, and you should use the new '%implicitconv'
+ directive instead.
+
+ Note that we follow the C++ conventions, ie, in the
+ following the implicit conversion is allowed:
+
+ int get(A a) {return a.ii;}
+ int get(const A& a) {return a.ii;}
+
+ but not in these cases:
+
+ int get(A *a) {return a->ii;}
+ int get(A& a) {return a.ii;}
+
+ Also, it works for director methods that return a by value
+ result, ie, the following will work:
+
+ virtual A get_a() = 0;
+
+ def get_a(self):
+ return 1
+
+ but not in this case:
+
+ virtual const A& get_a() = 0;
+ virtual A& get_a() = 0;
+ virtual A* get_a() = 0;
+
+ Notes:
+
+ - the implicitconv mechanism is implemented by directly
+ calling/dispatching the python constructor, triggering a
+ call to the __init__method. Hence, if you expanded the
+ __init__ method, like in:
+
+ class A:
+ def __init__(self,args):
+ <swig code>
+ <my code here>
+
+ then 'my code' will also be executed.
+
+ - Since the %implicitconv directive is a SWIG feature, if you type:
+
+ %implicitconv;
+
+ that will enable implicit conversion for all the classes in
+ your module.
+
+ But if you are worried about performance, maybe that will be
+ too much, especially if you have overloaded methods, since
+ to resolve the dispatching problem, python will efectively
+ try to call all the implicit constructors as needed.
+
+ - For the same reason, it is highly recommended that you use
+ the new 'castmode' when mixing implicit conversion and
+ overloading.
+
+ - [python] The %implicit directive is declared obsolete, and
+ you should use %implicitconv instead. If you include
+ the implicit.i file, a warning will remind you of this.
+
+ Note: Since %implicit is fragile, just replacing it by
+ %implicitconv could lead to different behavior. Hence, we
+ don't automatically switch from to the other, and the user
+ must migrate to the new %implicitconv directive manually.
+
+
+12/26/2005: wsfulton
+ [C#]
+ Modify std::vector wrappers to use std::vector::value_type as this is
+ closer to the real STL declarations for some methods, eg for push_back().
+ Fixes some compilation errors for some compilers eg when the templated
+ type is a pointer.
+
+ [Java]
+ std::vector improvements - a few more methods are wrapped and specializations are
+ no longer required. The specialize_std_vector macro is no longer needed (a
+ warning is issued if an attempt is made to use it).
+
+12/26/2005: wsfulton
+ [Java, C#]
+ Add in pointer reference typemaps. This also enables one to easily wrap
+ std::vector<T> where T is a pointer.
+
+12/24/2005: efuzzyone
+ [CFFI] The cffi module for SWIG:
+ - Fully supports C, but provides limited supports for C++, in
+ particular C++ support for templates and overloading needs to
+ be worked upon.
+
+12/23/2005: mmatus
+ [python] Add the castmode that allows the python
+ type casting to occur.
+
+ For example, if you have 'int foo(int)', now
+
+ class Ai():
+ def __init__(self,x):
+ self.x = x
+ def __int__(self):
+ return self.x
+
+ foo(1) // Ok
+ foo(1.0) // Ok
+ foo(1.3) // Error
+ a = Ai(4)
+ foo(ai) // Ok
+
+ The castmode, which can be enabled either with the
+ '-castmode' option or the %module("castmode") option, uses
+ the new cast/rank dispatch mechanism. Hence, now if you
+ have 'int foo(int); int foo(double);', the following works
+ as expected:
+
+ foo(1) -> foo(int)
+ foo(1.0) -> foo(double)
+ ai = Ai(4)
+ foo(ai) -> foo(int)
+
+ Note1: the 'castmode' could disrupt some specialized
+ typemaps. In particular, the "implicit.i" library seems to
+ have problem with the castmode. But besides that one, the
+ entire test-suite compiles fine with and without the
+ castmode.
+
+ Note2: the cast mode can't be combined with the fast
+ dispatch mode, ie, the -fastdispatch option has no effect
+ when the cast mode is selected. The penalties, however,
+ are minimum since the cast dispatch code is already based
+ on the same fast dispatch mechanism.
+
+ See the file overload_dispatch_cast_runme.py file for
+ new cases and examples.
+
+12/22/2005: mmatus
+ Add the cast and rank mechanism to dispatch overloading
+ functions. The UTF supports it now, but for each language
+ it must be decided how to implement and/or when to use it.
+
+ [perl] Now perl uses the new cast and rank dispatch
+ mechanism, which solves all the past problems known
+ in perl, such as the old '+ 1' problem:
+
+ int foo(int);
+
+ $n = 1
+ $n = $n + 1
+ $r = foo(n)
+
+ also works:
+
+ foo(1);
+ foo("1");
+ foo(1.0);
+ foo("1.0");
+
+ but fails
+
+ foo("l");
+
+ and when overloading foo(int) and foo(double);
+
+ foo(1) -> foo(int)
+ foo(1.0) -> foo(double)
+ foo("1") -> foo(int)
+ foo("1.0") -> foo(double)
+ foo("l") -> error
+ foo($n) -> foo(int) for good perl versions
+ foo($n) -> foo(double) for old bad perl versions
+
+ when overloading foo(int), foo(char*) and foo(double):
+
+ foo(1) -> foo(int)
+ foo(1.0) -> foo(double)
+ foo("1") -> foo(char*)
+ foo("1.0") -> foo(char*)
+ foo("l") -> foo(char*)
+
+ Note: In perl the old dispatch mechanism was broken,
+ so, we don't provide an option to enable the old one
+ since, again, it was really really broken.
+
+ See 'overload_simple_runme.pl' for more cases and tests.
+
+ PS: all the old known issues are declared resolved, any
+ new "problem" that could be discovered is declared,
+ a priori, as "features" of the new dispatch mechanism
+ (until we find another solution at least).
+
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+ As with the introduction of the UTF, some things could
+ now start to work as expected, and people used to deal or
+ workaround previous bugs related to the dispatch
+ mechanism, could see now a difference in perl behavior.
+
+12/21/2005: mmatus
+ - The '-nodefault' flag (pragma and feature) now generates
+ a warning, and recommends to use the explicit
+ -nodefaultctor and -nodefaultdtor options.
+
+ The reason to split the 'nodefault' behavior is that, in
+ general, ignoring the default destructor generates memory
+ leaks in the target language. Hence, is too risky just to
+ disable both the default constructor and destructor
+ at the same time.
+
+ If you need to disable the default destructor, it is
+ also recommended you use the directive form:
+
+ %nodefaultdtor MyVerySpecialClass;
+
+ for specific classes, and always avoid using the global
+ -nodefault and -nodefaultdtor options.
+
+12/21/2005: wsfulton
+ [Java, C#]
+ Fix incorrect code generation when the intermediary classname is changed
+ in the module directive from its default. For example:
+
+ %module(jniclassname="myimclassnewname") "mymodule" // Java
+ %module(imclassname="myimclassnewname") "mymodule" // C#
+
+ Add in new special variable $imclassname. See docs.
+
+12/17/2005: mmatus
+ [Python]
+ - Add the -aliasobj0/-noaliasobj0 options to use with
+ -fastunpack and/or -O and old typemaps that use 'obj0'
+ directly.
+
+ So, if you compile your code using -O and get errors about
+ the undeclared 'obj0' variable, run again using
+
+ swig -O -aliasobj0 -python ....
+
+ For new typemaps, never use 'obj0' directly, if needed,
+ use the '$self' name that will be properly expanded to
+ 'obj0' (nofastunpack) or 'swig_obj[0]' (fastunpack).
+
+ If you have no idea what I am talking about, better, that
+ means you have no typemap with this problem.
+
+
+12/14/2005: mmatus
+ [Python]
+ - Add the -fastunpack/-nofastunpack options to enable/disable
+ the use of the internal UnpackTuple method, instead of
+ calling the one from the python C API.
+
+ The option -O now also implies -fastunpack.
+
+
+12/11/2005: mmatus
+ [Python]
+ - Add the -proxydel/-noproxydel options to enable/disable
+ the generation of proxy/shadow __del__ methods, even
+ when now they are redundant, since they are empty.
+ However, old interfaces could rely on calling them.
+
+ The default behavior is to generate the __del__ methods
+ as in 1.3.27 or older swig versions.
+
+ The option -O now also implies -noproxydel.
+
+12/10/2005: mmatus
+ [UTF]
+ - Fix unneccessary calls to SWIG_TypeQuery for 'char *'
+ and 'wchar_t *', problem found by Clay Culver while
+ profiling the PyOgre project.
+
+
+ [Python]
+ - Add the -dirvtable/-nodirvtable to enable/disable
+ a pseudo virtual table used for directors, avoiding
+ the need to resolve the python method at each call.
+
+ - Add the -safecstrings/-nosafecstrings options to
+ enable/disable the use of safe conversions from PyString
+ to char *. Python requires you to never change the internal
+ buffer directly, and hence 'safectrings' warranties that
+ but returning a copy of the internal python string buffer.
+
+ The default, as in previous releases, is to return a
+ pointer to the buffer (nosafecstrings), so, it is the user's
+ responsibility to avoid its modification.
+
+ - Add the -O option to enable all the optimization options
+ at once, initially equivalent to
+
+ -modern -fastdispatch -dirvtable -nosafecstrings -fvirtual
+
+12/08/2005: mmatus
+
+ - Add the -fastdispatch option (fastdispatch feature). This
+ enables the "fast dispatch" mechanism for overloaded
+ methods provided by Salvador Fandi~no Garc'ia (#930586).
+
+ The resulting code is smaller and faster since less type
+ checking is performed. However, the error messages you
+ get when the overloading is not resolved could be
+ different from what the traditional method returns.
+
+ With the old method you always get an error such as
+
+ "No matching function for overloaded ..."
+
+ with the new method you can also get errors such as
+
+ "Type error in argument 1 of type ..."
+
+ See bug report #930586 for more details.
+
+ So, this optimization must be explicitly enabled by users.
+
+ The new mechanism can be used as:
+
+ swig -fastdispatch
+
+ or using the feature form
+
+ %feature("fastdispatch") method;
+ or
+ %fastdispatch method;
+
+
+12/06/2005: mmatus
+
+ - Several memory and speed improvements, specially for
+ templates. Now swig is up to 20 faster than before for
+ large template interfaces, such as the std_containers.i
+ and template_matrix.i files in the python test-suite.
+
+ Memory footprint is also reduced in consideration of small
+ pcs/architectures.
+
+ - add commandline options -cpperraswarn and -nocpperraswarn" to force
+ the swig preprocessor to treat the #error directive as a #warning.
+
+ the pragmas
+
+ #pragma SWIG cpperraswarn=1
+ #pragma SWIG cpperraswarn=0
+
+ are equivalent to the command line options, respectively.
+
+
+12/06/2005: mmatus
+ [Python] The generated code is now more portable, especially
+ for Windows. Following
+
+ http://www.python.org/doc/faq/windows.html
+
+ Py_None is never accessed as a structure, plus other
+ tricks mentioned there.
+
+12/06/2005: mmatus
+ [Python] Added initial support for threads based in the
+ proposal by Joseph Winston.
+
+ The user interface is as follows:
+
+ 1.- the module thread support is enable via the "threads" module
+ option, i.e.
+
+ %module("threads"=1)
+
+ 2.- Equivalent to that, is the new '-threads' swig option
+
+ swig -threads -python ...
+
+ 3.- You can partially disable thread support for a given
+ method using:
+
+ %feature("nothread") method;
+ or
+ %nothread method;
+
+ also, you can disable sections of the thread support,
+ for example
+
+ %feature("nothreadblock") method;
+ or
+ %nothreadblock method;
+
+ %feature("nothreadallow") method;
+ or
+ %nothreadallow method;
+
+ the first disables the C++/python thread protection, and the
+ second disables the python/C++ thread protection.
+
+ 4.- The current thread support is based in the PyGIL
+ extension present in python version 2.3 or later, but
+ you can provide the thread code for older versions by
+ defining the macros in pythreads.swg.
+
+ If you get a working implementation for older versions,
+ please send us a patch.
+
+ For the curious about performance, here are some numbers
+ for the profiletest.i test, which is used to check the speed
+ of the wrapped code:
+
+ nothread 9.6s (no thread code)
+ nothreadblock 12.2s (only 'allow' code)
+ nothreadallow 13.6s (only 'block' code)
+ full thread 15.5s ('allow' + 'block' code)
+
+ i.e., full thread code decreases the wrapping performance by
+ around 60%. If that is important to your application, you
+ can tune each method using the different 'nothread',
+ 'nothreadblock' or 'nothreadallow' features as
+ needed. Note that for some methods deactivating the
+ 'thread block' or 'thread allow' code is not an option,
+ so, be careful.
+
+
+11/26/2005: wsfulton
+ SWIG library files use system angle brackets everywhere for %include, eg
+ %include "std_common.i"
+ becomes
+ %include <std_common.i>
+
+11/26/2005: wsfulton
+ [Java, C#]
+ Typesafe enums and proper enums have an extra constructor so that enum item values that
+ are initialised by another enum item value can be wrapped without having to use %javaconstvalue/
+ %csconstvalue for when using %javaconst(1)/%csconst(1). Suggestion by
+ Bob Marinier/Douglas Pearson.
+ For example:
+
+ typedef enum
+ {
+ xyz,
+ last = xyz
+ } repeat;
+
+11/21/2005: mmatus
+ [ruby + python]
+
+ Fixes for directors + pointers. This is an ugly problem without an easy
+ solution. Before we identified this case as problematic:
+
+ virtual const MyClass& my_method();
+
+ but it turns out that all the cases where a pointer, array or
+ reference is returned, are problematic, even for
+ primitive types (as int, double, char*, etc).
+
+ To try to fix the issue, a new typemap was added,
+ 'directorfree', which is used to 'free' the resources
+ allocated during the 'directorout' phase. At the same
+ time, a primitive garbage collector engine was added to
+ deal with orphaned addresses, when needed.
+
+ The situation is much better now, but still it is possible to have
+ memory exhaustation if recursion is used.
+
+ So, still you need to avoid returning pointers, arrays or
+ references when using director methods.
+
+ - Added stdint.i - typemaps for latest C99 integral types found in stdint.h.
+
+11/14/2005: wsfulton
+ More types added to windows.i, eg UINT8, WORD, BYTE etc.
+ Including windows.i will also enable SWIG to parse the __declspec Microsoft
+ extension, eg __declspec(dllimport). Also other Windows calling conventions
+ such as __stdcall.
+
+11/10/2005: wsfulton
+ New library file for Windows - windows.i. This file will contain useful type
+ information for users who include windows.h. Initial support is for the
+ non ISO integral types: __int8, __int16, __int32, __int64 and unsigned versions.
+ The unsigned versions previously could not be parsed by SWIG. SF #872013.
+
+11/09/2005: wsfulton
+ [Java, C#] Portability warning for files which will overwrite each other on case
+ insensitive file systems such as FAT32/NTFS. This will occur, for example, when two
+ class names are the same barring case. The warning is issued on all platforms and
+ can be suppressed with the usual warning suppression techniques. SF bug #1084507.
+
+11/09/2005: wsfulton
+ ./configure --with-python --with-ruby --with-perl5 etc enable these languages,
+ ie the --with-xxxx options, where no path is specified, work the same as if
+ the option was not specified at all. Based on patches #1335042 #1329048 #1329047.
+
+11/09/2005: dancy
+
+ [Allegrocl]
+ Add C++ support to the Allegrocl module. Further
+ enhances the C support as well. Some of the
+ features:
+
+ - MUCH better generation of foreign types based on
+ the C/C++ types for use in defining the FFI on
+ the lisp side. We don't pass everything as a (* :void)
+ any longer.
+
+ - Uses typemaps for better control of type conversions
+ and code generation in the generated lisp and c++ wrapper
+ code.
+
+ - CLOS wrapping of pointers returned from foreign space
+ makes it easier to differentiate pointers in user code.
+ The wrapping objects can be passed directly to FF calls.
+
+ - Defun wrapping of FF calls, allowing for more lispy
+ interface. Conversion, GCing, of lisp objects to
+ foreign objects can be done in the wrapping defun via
+ the use of typemaps.
+
+ - overload dispatching implemented on the lisp side
+ using generic functions.
+
+ - Templates and synonymous types supported.
+
+11/07/2005: mmatus
+
+ [Python] Adding proper support for multi-inheritance in
+ the python side, ie, if you have two C++ wrapped class, Foo
+ and Bar, now:
+
+ class MyPythonClass(Foo,Bar):
+ ....
+
+ will properly work, even with directors, and the
+ deallocation of Foo.this and Bar.this will follow
+ correctly. Before, a class could only have one 'this'
+ instance (unlike C++), only the last base class was
+ properly deleted, or detected with directors.
+
+ Now 'self.this' can be a list, which will contain the C++
+ instance pointers for all the base classes.
+
+ Also, swig.this is responsible for deallocating the C++
+ instance(s), and the __del__ method is not emitted unless
+ the user preppend/append some code to it.
+
+ - Swig can now detect memory leaks, ie, if you still
+ don't use proxy/shadow classes, and type something like
+
+ import _example
+ f = _example.new_Foo()
+
+ and forget to call _example.delete_Foo(f), then swig will
+ tell you that there is a memory leak.
+
+ Otherwise, if you always use the proxy classes, you probably
+ you will never ever see this warning unless there is
+ something wrong inside the swig wrapping code.
+
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+ If you overloaded the __del__ method, and call the base
+ one without a try block, as in
+
+ class MyClass(SwigClass):
+
+ def __del__(self):
+ <your code here>
+ SwigClass.__del__(self)
+
+ python could complain that the method SwigClass.__del__ is
+ undefined. Try to use instead:
+
+ def __del__(self):
+ <your code here>
+ try: SwigClass.__del__(self)
+ except: pass
+
+ or simply
+
+ def __del__(self):
+ <your code here>
+
+11/02/2005: mmatus
+
+ [Python] Adding more fun to STL/STD containers, now you
+ can do
+
+ %template(pyset) std::set<PyObject *>;
+ %template(pyvector) std::vector<PyObject *>;
+ %template() std::pair<PyObject *,PyObject *>;
+ %template(pyvector) std::map<PyObject *,PyObject *>;
+ ....
+
+ The same applies to std::list, std::deque, std::multiset, etc.
+
+ Then, at the python side you can do now:
+
+ # C++ std::vector as native python sequence
+ v = pyvector([1,"hello",(1,2)])
+ print v[1]
+ >> 'hello'
+ print v[2]
+ >> (1,2)
+
+ # C++ std::set as native python sequence
+ s = pyset()
+ s.insert((1,2))
+ s.insert(1)
+ s.insert("hello")
+ sum=()
+ for i in s:
+ sum +=(i,)
+ print sum
+ >>> (1, 'hello', (1, 2))
+
+ # C++ std::map as native python sequence
+ m = pymap()
+ m["foo"] = "hello"
+ m[1] = (1,2)
+ pm = {}
+ for k in m:
+ pm[k] = m[k]
+ print pm
+ >>> {1: (1, 2), 'foo': 'hello'}
+
+ ie, the STD/STL containers work as real native python
+ container, with arbitrary item types and so.
+
+ But since normal C++ containers do not properly ref/unref
+ their items, you should use the safer versions:
+
+ %template(pyset) std::set<swig::PyObject_ptr>;
+ %template(pyvector) std::vector<swig::PyObject_ptr>;
+ %template() std::pair<swig::PyObject_ptr, swig::PyObject_ptr>;
+ %template(pyvector) std::map<swig::PyObject_ptr,swig::PyObject_ptr>;
+ ....
+
+ where swig::PyObject_ptr is a PyObject * envelope class provided
+ to safely incref/decref the python object.
+
+ So, now you can use all the STL/STD containers as native
+ Python containers.
+
+ Note 1: std::map, std::set and the other 'ordered'
+ containers will properly use PyObject_Compare for sorting,
+ when needed.
+
+ Note 2: all the STL/STD containers have a limit size of
+ SIZE_MAX, ie, you can have manage containers larger than
+ INT_MAX, the python limit.
+
+
+11/02/2005: mmatus
+
+ [Python]
+ - add 'iterator()' method for all sequences and additionally
+ 'key_iterator()' for maps.
+
+ 'iterator()' will always return the native C++ iterator.
+ Additionally, in maps, 'key_iterator()' will return a python
+ iterator using only the map keys.
+
+ In general the sequence method __iter__ will call
+ 'iterator()', returning the native C++ iterator, but in
+ maps it will call 'key_iterator()', maintaining
+ backward compatibility.
+
+ Hence, for std::maps, you can play then with the native
+ C++ iterator, which value is a (key, value) pair, by
+ calling map.iterator(), as with map.begin(), map.end(), etc.
+
+ The difference is that map.iterator() returns a safe
+ 'closed' iterator, while map.begin() and map.end() are
+ 'open' iterators.
+
+ A 'closed' iterator knows the begin and the end of the
+ sequence, and it never can seg. fault. An 'open'
+ iterator, as in C++, can seg. fault at the C++ side.
+
+ # a closed iterator is safe in the following example.
+ # the next() method will throw a StopIteration
+ # exception as needed
+
+ i = seq.iterator()
+ try:
+ while True:
+ sum += i.next()
+ except: pass
+
+ # an open iterator always need to be checked,
+ # or it will crash at the C++ side
+
+ current = seq.begin()
+ end = seq.end()
+ while (current != end):
+ sum += current.next()
+
+
+ [Python]
+ - Finally, when we call
+
+ f = Foo()
+
+ the construction is 'one-way'. Before construction was done
+ something like
+
+ Foo() (python) -> _new_Foo() (C++)
+ new_Foo() (C++) -> FooPtr() (python)
+ FooPtr() (python) -> Foo() (python)
+
+ and returning a pointer was done like
+
+ NewPointerObj() (C++) -> FooPtr() (python)
+ FooPtr(python) -> Foo() (python)
+
+
+ ie, we when going back and forward between the C++ and
+ python side.
+
+ Now since there is no FooPtr the construction process is
+
+ Foo() (python) -> _new_Foo() (C++)
+ _new_Foo() (C++) -> NewPointerObj() (C++) (no shadow class)
+
+ and returning a pointer is done
+
+ NewPointerObj() (C++) (with shadow class) -> NewInstaceObj() (C++)
+
+ where NewInstanceObj creates a new instance without
+ calling __init__ and it doesn't go 'back' to python, is
+ 'pure' C API.
+
+ - With this change, and the other ones in the
+ PySwigObject type, which now carries the thisown and
+ swig_type_info pointer, the generated code should be as
+ fast as boost::Python and/or the other python wrappers
+ based in pure Python/C API calls.
+
+ As a reference, the profiletest_runme.py example, which
+ does a simple call function many times, such as this code:
+
+ import profiletest
+
+ a = profiletest.A()
+ b = profiletest.B()
+ for i in range(0,1000000)
+ a = b.fn(a)
+
+
+ where fn is defined as 'A* B::fn(A *a) {return a;}',
+ produces the following times
+
+ nomodern modern
+ swig-1.3.26 19.70s 5.98s
+ swig-CVS 0.99s 0.98s
+
+
+ Clearly, there is a large improvement for the python
+ 'nomodern' mode. Still, the 'modern' mode is around
+ 6 times faster than before. For the same test, but
+ using the non-shadow version of the module, we get
+
+ _profiletest (non-shadow)
+ swig-1.3.26 0.80s
+ swig-CVS 0.60s
+
+ Hence, now for practical purposes, the proxy overhead
+ is insignificant.
+
+ Note that the performance numbers we are showing is for
+ a simple module (two types) and a simple function (one
+ argument). For real situations, for modules with many
+ more types and/or functions with many more parameters,
+ you will see even better results.
+
+
+10/31/2005: mmatus
+ [Python]
+
+ - Finally, no more ClassPtr proxy classes. You will see
+ only a clean Class proxy class in the .py file.
+
+ - No more 'real' thisown attribute either, the PySwigObject now
+ carries the ownership info.
+
+ You can also do something like
+
+ print self.this.own()
+ >>> True
+
+ self.this.disown()
+ self.this.own(0)
+ print self.this.own()
+ >>> False
+
+ self.this.acquire()
+ self.this.own(1)
+ print self.this.own()
+ >>> True
+
+ Still the old way,
+
+ print self.thisown
+ >>> True
+
+ self.thisown = 0
+ print self.thisown
+ >>> False
+
+ self.thisown = 1
+ print self.thisown
+ >>> True
+
+ is supported, and python dispatches the proper method
+ calls as needed.
+
+
+ - Support for iterators in STL/STD containers, for example, if you have
+
+ %template<set_string> std::set<std::string>;
+
+ you can use the C++ iterators as:
+
+ s = set_string()
+
+ s.append("c")
+ s.append("a")
+ s.append("b")
+
+ b = s.begin()
+ e = s.end()
+ sum = ""
+ while (b != e):
+ sum += b.next()
+ print sum
+
+ >>> "abc"
+
+ advance the iterator as in C++
+
+ current = s.begin()
+ current += 1
+ print current.value()
+ >>> "b"
+
+ now using the reverse operators
+
+ b = s.rbegin()
+ e = s.rend()
+ sum = ""
+ while (b != e):
+ sum += b.next()
+ print sum
+
+ >>> "cba"
+
+ or the 'previous' method
+
+ b = s.begin()
+ e = s.end()
+ sum = ""
+ while (b != e):
+ sum += e.previous()
+ print sum
+
+ >>> "cba"
+
+ or just as in a python fashion
+
+ for i in s:
+ sum += i
+
+ Note 1: Iterators in C++ are very powerful, but
+ dangerous too. And in python you can shoot yourself in the foot
+ just like in C++, so, be careful.
+
+ Note 2: the iterators are 'light', ie, they do not
+ convert sequence elements until you request to do so, via
+ next(), value() or previous(). If you just increment/decrement one
+ no conversion is performed, for example:
+
+
+ b = s.begin()
+ b += 1
+ b.incr()
+ b.incr(2)
+ b.decr(2)
+ b.decr()
+ b -= 1
+
+ only the iterator is modified, and not value wrapper
+ is generated. Other typical C++ operations are also
+ available, such as:
+
+ print s.end() - s.begin()
+ >>> 3
+ f = s.begin() + 1
+ print f.value()
+ >>> "b"
+ l = s.end() - 1
+ print l.value()
+ >>> "c"
+
+ etc. Of course, the 'find', 'insert', 'erase', and
+ so on methods also supports iterators now, ie:
+
+ i = s.begin()
+ i += 1
+ s.erase(i)
+ for i in s:
+ sum += i
+ print sum
+ >>> "ac"
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+ There is no more 'thisown' attribute. If you use it, python
+ will translate the following code as follows:
+
+ if (self.thisown): ==> if (self.this.own()):
+ self.thisown = 1 ==> self.this.own(1)
+ self.thisown = 0 ==> self.this.own(0)
+
+ Still, maybe in some unusual cases the translation will not be
+ 100% correct, so if you have a problem, please report it
+ and/or use the new 'self.this.own()' accessor.
+
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+ There is no more ClassPtr classes in the python code. Hence,
+ if in the past you needed to resort to some kind of trickery
+ with them, or overcome their presence, it is no longer
+ required, but the extra code you added could now break
+ things.
+
+ If needed, you can use the option -classptr, i.e.,
+
+ swig -classptr -python ...
+
+ to generate the old ClassPtr classes.
+
+
+10/30/2005: mkoeppe
+ [Guile] Make declared and defined linkage of SWIG_init consistent.
+ Reported by Steven G. Johnson (SF patch 1315498).
+
+10/26/2005: mmatus
+
+ - Added the attribute.i file to the global library director.
+ Now it can be used from other languages that do not use
+ the unified typemap library as well.
+
+ So, if you have something like:
+
+ %include attribute.i
+
+ %attribute(A, int, a, get_a, set_a);
+
+ struct A
+ {
+ int get_a() const;
+ void set_a(int aa);
+ };
+
+ %attribute_ref(B, int, c);
+
+ struct B
+ {
+ int& c();
+ };
+
+ then in the target language the 'A.a' and 'B.c' attributes will
+ be visible, ie, you can access them as plain variables:
+
+ f = A()
+ f.a = 3
+ g = B()
+ g.c = 3
+
+ h = f.a + g.c
+
+ and the proper get/set methods will be dispatched. See
+ attribute.i for more info.
+
+ - More cleanups around and adding more test-cases. The
+ DISOWN typemap now is tested and working in all the
+ languages that use the unified typemap library, ie, tcl,
+ ruby, perl and python.
+
+
+10/25/2005: mmatus
+
+ - Perl, complete the DISOWN typemap.
+
+ - added the attribute.i file to the unified typemap
+ library (before was only usable from python).
+
+ - unify the names for the setter and getter methods in
+ perl,tcl,ruby and python, so, the attribute.i library
+ can work across them.
+
+ - see the li_attribute.i test-case or the library file
+
+ Lib/typemaps/attribute.swg
+
+ for more info about how to use it.
+
+
+
+
+10/24/2005: mmatus
+
+ - Perl now uses the unified typemap library.
+
+ - Changes in ruby to use the $track option in typemaps.
+
+ - Changes in the unified typemap library to follow the
+ convention that all macros that are not used in the
+ C/C++ side starts with %, such as
+
+ %delete
+ %new_array
+
+ etc.
+
+ - Documenting fragments, see fragments.swg.
+
+ - Cleaner way to use the unified typemap library, include
+ just <typemaps/swigtypes.swg>.
+
+ Check some of the supported languages: perl, tcl, ruby,
+ python.
+
+ Always start with the head file, such as
+
+ python/python.swg
+ tcl/tcl8.swg
+ ruby/ruby.swg
+ perl5/perl5.swg
+
+ and the principal file that invokes the unified library, such as
+
+ python/pytypemaps.swg
+ tcl/tcltypemaps.swg
+ ruby/rubytypemaps.swg
+ perl/perltypemaps.swg
+
+ The file that provide the specialization for each
+ language are the one that provides the basic types:
+
+ python/pyprimtypes.swg
+ ruby/rubyprimtypes.swg
+ tcl/tclprimtypes.swg
+ perl5/perlprimtypes.swg
+
+ and the string manipulation:
+
+ python/pystrings.swg
+ ruby/rubystrings.swg
+ tcl/tclstrings.swg
+ perl5/perlstrings.swg
+
+
+ The rest of the files, such as carray.i, are mostly one
+ line files that include the proper typemap library
+ version.
+
+ *** POTENTIAL INCOMPATIBILITY in Perl ***
+
+ Some missing/wrong typemaps could start working properly,
+ and change the old expected behavior in Perl.
+
+10/23/2005: wuzzeb
+ Chicken:
+ + pointers to member functions finally work properly
+ + add test of member function pointers to cpp_basic.i
+
+10/20/2005: dancy
+ [allegrocl] Added C++ support. Large update, many changes. See
+ newly added Allegro Common Lisp section in lisp.html
+
+10/20/2005: mmatus
+ Ruby, Tcl, Python:
+
+ - Uniform way to fail (label fail:), now finally
+ SWIG_exception works across the three languages and all
+ the typemaps.
+
+ - Add proper cleanup code to ruby
+
+ - More valgrind fixes
+
+ - Simplify the inline use, it seems a small interface of
+ 20,000 lines (plus many many templates) can break
+ gcc -O3 easily.
+
+ - Finalize the typemaps library. All the old *.i files
+ (carray.i, cpointer.i, exception.i) had been implemented
+ in the new typemaps library.
+
+
+10/19/2005: wuzzeb
+ Update the Runtime Typemap documentation in Typemaps.html
+
+10/18/2005: wuzzeb
+ Chicken:
+ - Correctly handle %ignored classes
+ - Correctly convert long, long long, unsigned long, etc
+ to chicken primitives. (Thanks to Felix Winkelmann)
+ - Using argout parameters when the return value was a
+ wrapped pointer caused a memory corruption. The chicken
+ garbage collector moved a pointer out from under us.
+ This is now fixed by running all the proxy creation
+ functions as continuations after the wrapper function
+ returns. As part of this, we no longer need the
+ chickenfastproxy flag on output typemaps.
+ - using -proxy and -nocollection together works now
+ Before, it was not exporting the destructor in the proxy
+ wrapper.
+
+10/18/2005: mmatus
+
+ Added the Unified Typemap Library (UTL). It unifies the typemaps for
+
+ python, ruby, tcl
+
+ and in the process, fixes several problems in each of the three
+ languages to work in a "canonical" way now established in
+ the typemap library
+
+ SWIG/Lib/typempas
+
+ The current status of the unification is that everything
+ compiles and runs inside the test-suite and examples
+ directories. And for the first time we have three
+ languages than pass the primitive_types.i case.
+
+ Also, we have a uniform way to treat the errors, for example
+ if you do something like
+
+ >>> from primitive_types import *
+ >>> print val_uchar(10)
+ 10
+ >>> print val_uchar(1000)
+ Traceback (most recent call last):
+ File "<stdin>", line 1, in ?
+ OverflowError: in argument 1 of type 'unsigned char'
+
+ you get the same exception in all the three languages.
+
+ And well, many more good things will come from this
+ unification, for example, proper support of the STL/STD classes
+ for all the languages, and hopefully, we can keep
+ adding other languages.
+
+ The hardest part, writing a common typemap library
+ that suites the three different languages, is done,
+ and adding another language should now be easy.
+
+ Still the global unification is not complete, the STL/STD
+ part is next, and probably as well as adding one or two more
+ languages.
+
+ If you are curious, look at the python, ruby and/or tcl
+ directories to see what is needed to support the new
+ common typemaps library. Still, the final way to
+ integrate a new language could change as we move to
+ integrate the STD/STL.
+
+ *** POTENTIAL INCOMPATIBILITY in Ruby/Tcl ***
+
+ Some missing/wrong typemaps could start working properly,
+ and change the old behavior, specially in ruby and tcl.
+
+Version 1.3.27 (October 15, 2005)
+=================================
+
+10/15/2005: wsfulton
+ [Java] Fix for typesafe enum wrapping so that it is possible to
+ overload a method with 2 different enum types.
+
+10/15/2005: wsfulton
+ Fix for %feature("immutable","0") attempting to generate setters
+ for constants.
+
+ Restored %immutable and %makedefault to clear the feature as it
+ behaved in SWIG-1.3.25 and earlier.
+
+10/14/2005: mmatus
+ Fix bug in anonymous typedef structures which was leading to
+ strange behaviour.
+
+10/13/2005: mmatus
+ Several minor changes:
+
+ - Improve the wchar_t type support
+ - Add a warning for when you define the 'in' typemap but
+ you don't define the 'typecheck' one. Very common mistake.
+ - Add proper default rule for function pointers, now you
+ can define a typemap such as:
+
+ %typemap(in) SWIGTYPE ((*)(ANY)) {...}
+
+ That will apply to all the pointer to functions. The
+ rule in C++ also apply to the function 'reference', ie,
+ in both cases
+
+ typedef int (*fptr)(int a);
+ typedef int (func)(int a);
+
+ This was needed since it seems to be 'illegal' in C++ to
+ do something like:
+
+ void *ptr = static_cast<void *>(fptr);
+
+ and probably, as for member functions, it is not
+ warrantied that the pointer sizes will match.
+
+ - Add the #error/#warning directives to swig's cpp.
+
+ - Add the noblock option for typemaps, which is used as
+ follows: supposed you a typemap, like this
+
+
+ %typemap(in,noblock=1) Hello {
+ ....
+ }
+
+ then the typemap will be inserted without the block
+ imposed by the brackets, similar to
+
+ %typemap(in) Hello "...";
+
+ So, why you don't just use the quote style?, because:
+
+ 1.- The quote style doesn't get preprocessed, for example
+
+ %typemap(in) Hello "$1= SWIG_macro($1);";
+
+ here, SWIG_macro doesn't get expanded
+
+ 2.- Inside a quote typemap, you have to use
+ quotes carefully
+
+ %typemap(in) Hello "$1 = \"hello\" ";
+
+ 3.- You can't make emacs and/or other editors
+ to indent inside a string!.
+
+
+ So, why do you want to remove the block?, because an extra
+ block when not needed (no local variables in it):
+
+ 1.- makes the code harder to read
+ 2.- makes the code larger
+ 3.- or in short, for the same reason we have the quote style.
+
+Version 1.3.26 (October 9, 2005)
+================================
+
+10/08/2005: wsfulton
+ [Php] Added 'throws' typemaps.
+
+10/08/2005: wsfulton
+ Fixes for languages that don't support multiple inheritance. The
+ first non-ignored class in the public base class list is used for inheritance.
+ by the proxy class. Previously, if the first class in the list was ignored, then
+ the proxy class wouldn't have any base classes.
+
+10/07/2005: mmatus
+ Update more features to follow new convention, including:
+
+ callback
+ ref/unref
+ except
+
+ All of them use not only the feature as a flag, but also
+ as code value. To deal with those features, we use now
+ GetFlagAttr, which is similar to GetFlag, but instead or
+ returning 1 or 0, it returns the attr value, if happens
+ to be different of "0" of course.
+
+ Now there are also more uniform directive names for the
+ ones based in features, for example, for the old
+ %newobject directive now we have tree directives defined:
+
+
+ #define %newobject %feature("new")
+ #define %nonewobject %feature("new","0")
+ #define %clearnewobject %feature("new","")
+
+ and so on for all the other feature directives.
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+09/30/2005: wsfulton
+ Subtle change to some features. Previously it was not possible to disable many
+ features once they had been enabled. This was for most features that behave as
+ flags. These features now work as follows:
+
+ %feature("name") // enables the feature
+ %feature("name", "1") // enables the feature
+ %feature("name", "0") // disables the feature
+ %feature("name", "") // clears the feature
+
+ In fact any non-empty value other than "0" will enable the feature (like C boolean logic).
+ Previously "1", "0" or any other non-empty value would enable the feature and it would
+ only be possible to disable the feature by clearing it (assuming there was no global enable).
+
+ The following features are affected:
+
+ allowexcept
+ compactdefaultargs
+ classic (Python)
+ cs:const (C#)
+ director
+ exceptionclass (Python)
+ ignore
+ immutable
+ java:const (Java)
+ java:downcast (Java)
+ kwargs
+ modern (Python)
+ new
+ noautodoc (Python)
+ nodefault
+ nodirector
+ noref
+ notabstract
+ nounref
+ novaluewrapper
+ python:maybecall (Python)
+ python:nondynamic (Python)
+ modula3:multiretval (Modula3)
+ predicate (Ruby)
+ trackobjects (Ruby)
+ valuewrapper
+
+ It is now possible, for example to ignore all methods/classes in a header file, except for a
+ few targetted methods, for example:
+
+ %feature("ignore"); // ignore all methods/classes
+ %feature("ignore","0") some_function(int, double); // do not ignore this function
+ %feature("ignore","0") SomeClass; // do not ignore this Class
+ %feature("ignore","0") SomeClass::method; // do not ignore this method
+ %include "bigheader.h"
+
+ Removed %pythondynamic - it never worked properly. Use %pythonnondynamic instead.
+ Removed %feature("nokwargs") - it wasn't fully implemented - use %feature("kwargs","0") instead.
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+09/25/2005: mkoeppe
+ [Guile] Add "throws" typemaps.
+
+09/24/2005: cfisavage
+ [Ruby] Adds new %trackobjects functionality that maps C++ objects to
+ Ruby objects. This functionality makes it much easier to implement
+ mark functions for the garbage collector. For more information
+ refer to the update documentation and examples.
+
+09/20/2005: wsfulton
+ [Perl] Patch 1116431 from Josh Cherry. Fixes non member functions inadvertently
+ being called instead of member functions.
+
+09/20/2005: wsfulton
+ [Lua] Patch from Mark Gossage to add support for Lua-5.1, std::string,
+ std::vector, std::exception and documentation.
+
+09/14/2005: mmatus
+ [Python] Add -nocppcast. Now the default behavior is to
+ always use the cppcast operators. Before that was the case
+ only when you used the -cppcast option.
+
+ If this seems to break your code... your welcome!, it
+ means it was broken before, and you never notice.
+
+ If you thing the error is due to one of the SWIG typemaps,
+ send us an example.
+
+ Use -nocppcast only with very old C++ compilers that
+ do not support the cppcast operations.
+
+ So, here applies:
+
+ This change doesn't break compatibility, it was broken before.
+
+09/13/2005: wsfulton
+ [Java] Fix for director methods when a class is passed by value as a
+ parameter.
+
+09/11/2005: mmatus
+ Adding the module option to the %import directive. Now you
+ can use it as
+
+ %import(module="BigModule") foo.i
+
+ where subfile could (or not) define the module name via
+ the %module directive. The module option take precedence
+ and it has the same effects than having the directive
+
+ %module BigModule
+
+ inside the imported file foo.i.
+
+ You can use the option in mainly two cases:
+
+ 1.- You used the -module option when you generated the
+ module to be imported, and hence the module name in
+ the imported %module directive is not really useful.
+
+ 2.- The module you want to import is very large, and it
+ has several .i/.h files. Then, if you just one to
+ import a class or so from the module, says 'foo', and
+ not the entire module via importing the main
+ BigModule.i file, then you just do:
+
+ %import(module="BigModule") foo.h
+
+ or
+
+ %import(module="BigModule") foo.i
+
+ where foo.i contains the 'foo' declaration and maybe a
+ couple of extra %include directives, as needed.
+
+
+09/11/2005: mmatus
+ Fix bug #1282637, about the -module option not having effect
+ in places where it was needed.
+
+09/11/2005: wsfulton
+ When wrapping variables, ensure that none of the typemaps used for the
+ set wrappers are used when generating the get wrappers. I doubt this was a
+ problem for any languages except for the recently introduced null attribute
+ in the out typemap (C# only).
+
+09/08/2005: wsfulton
+ More descriptive error messages when files fail to open.
+
+09/06/2005: mmatus
+
+ Allow a %define a macro inside another %define macro, for example
+
+ %define hello(name, Type)
+ %define name ## a(Type)
+ %typemap(in) Type "hello;";
+ %enddef
+ %enddef
+
+ To learn how to use this new features in your own typemaps library, see
+ python/cstring.i, python/cwstring.i and python/cwstrbase.i.
+
+ [Python] Normalize the cstring.i implementation to use fragments, and add
+ cwstring.i, which implements the same typemaps but for wchar_t strings.
+
+ [Python] Bug fixed: 1247477, 1245591, 1249878 and others.
+
+08/18/2005: wsfulton
+ [Ruby] Implement support for SWIGTYPE* DISOWN typemap (like in Python) for
+ better control of memory management, eg when adding an object created in Ruby
+ to a C++ container. Patch #1261692 from Charlie Savage.
+
+08/18/2005: wsfulton
+ [Tcl] 64 bit platform fixes for the varargs handling in SWIG_GetArgs. This is an
+ improved fix for bug #1011604 as suggested by Jeremy Lin.
+
+08/18/2005: wsfulton
+ [Tcl] Bug #1240469 - %newobject support for Tcl. Patch from Bob Marinier.
+
+08/16/2005: wsfulton
+ [Perl] Bug #1254494 - Fix for global namespace pollution by perl header files
+ (bool define) prevented STL headers from being used on some systems, eg
+ Windows with Visual Studio.
+
+08/16/2005: wsfulton
+ [Java] Bug #1240937 - Redefinition of __int64 typedef for Intel compilers.
+
+08/15/2005: wsfulton
+ [Xml] Bug #1251832 - C++ template may generate invalid XML file
+
+08/15/2005: wsfulton
+ [Lua] Support added for Lua. Patch #1242772 from Mark Gossage.
+ It supports most C/C++ features (functions, struct, classes, arrays, pointers,
+ exceptions), as well as lots of documentation and a few test cases & examples.
+
+08/14/2005: wsfulton
+ [Xml] Fix incorrect xml escaping in base class name when base class is a template.
+
+08/13/2005: efuzzyone
+ [CLISP] Added support for handling enums. Does not adds the return type declaration
+ to the function definition, if a function returns void.
+
+08/09/2005: mkoeppe
+ New language module, Common Lisp with UFFI, from Utz-Uwe Haus.
+
+08/09/2005: mkoeppe
+ Fix the Lisp s-expression output module; it no longer complains about "unknown targets".
+
+07/27/2005: wsfulton
+ Modifications to STL wrappers so that it is possible for a user's %exception directive
+ to be applied to the STL wrapper methods. Previously the following global %exception
+ directive would not be used on the wrapper methods:
+
+ %exception {
+ try {
+ $action
+ } catch (...) {
+ // handle uncaught exceptions
+ }
+ }
+
+ This has been implemented by replacing %exception directives for specific STL wrapper
+ methods with an exception specification declared on the wrapper methods. throws typemaps
+ are now supplied for handling the STL exception specification. These can also be easily
+ overridden, for example the std::out_of_range exception, which is used a lot in the STL
+ wrappers, can be customised easily:
+
+ %include "std_vector.i"
+ %typemap(throws) std::out_of_range {
+ // custom exception handler
+ }
+ %template(VectInt) std::vector<int>;
+
+07/22/2005: efuzzyone
+ [CLISP] The clisp module for SWIG:
+ - It can only handle C, clisp currently does not supports ffi bindings to C++.
+ - It has two options, (a) -extern-all this will generate wrappers for all functions
+ and variablestions, (b) -generate-typedef this will generate wrappers "def-c-type"
+ wrappers for typedefs
+ - Can handle pointers to functions, complex types such as n-dimensional arrays of
+ pointers of depth d
+ - Generates wrappers for constants as well as variables
+ - Correctly distinguishes between the declaration of variables in structures and functions
+ - Creates a defpackage "declaration" with the module name as the package name, the created
+ package exports both functions and variables
+ - tries to guess when should a pointer variable be declared as c-ptr or c-pointer
+
+07/22/2005: wsfulton
+ [C#] Changes to support C# structs returned by value. The changes required are:
+ - Using an optional 'null' attribute in the out typemap. If this attribute is specified,
+ then it is used for the $null special variable substitution.
+ - The ctype used in the C/C++ wrappers is no longer initialised to 0 on declaration.
+ Both of these changes fix the situations where an attempt was made to assign 0 to the
+ returned struct. Marshalling structs as value types still requires user defined typemaps.
+ See documentation for an example.
+
+07/22/2005: wsfulton
+ [C#, Java] Fix SWIG_exception usage to work with compilers that don't support empty macro
+ arguments. Unfortunately this fix will stop usage of SWIG_exception being used within typemaps
+ that use "" or %{ %} delimiters, but continues to work with typemaps using {} delimiters.
+ Please use the SWIG_CSharpSetPendingExceptionArgument or SWIG_JavaThrowException methods instead
+ as SWIG_exception is really intended as a platform independent macro for the SWIG library writers.
+
+07/16/2005: mkoeppe
+ [Allegro CL] Use specific foreign types rather than (* :void).
+ Use *swig-identifier-converter*.
+
+06/27/2005: wsfulton
+ Functions declared as 'extern' no longer have an additional function declaration added to the
+ wrapper files. There are some cases where SWIG does not get this right, eg bug #1205859 (extern
+ functions with default arguments declared in a namespace). Also SWIG cannot get non-standard
+ calling conventions correct, eg Windows calling conventions are usually handled like this:
+
+ %{
+ #define DLLIMPORT __declspec(dllimport)
+ #define STDCALL __stdcall
+ %}
+ #define DLLIMPORT
+ #define STDCALL
+ %inline %{
+ DLLIMPORT extern STDCALL void function(int);
+ %}
+
+ SWIG incorrectly generates:
+
+ extern void function(int);
+
+ To which there is no solution as SWIG doesn't handle non-standard calling conventions. The extra
+ 'extern' function that SWIG generates is superfluous unless a user has forgotten to add the function
+ declaration into the wrappers.
+
+ The -noextern commandline argument is now redundant and a new commandline argument -addextern can
+ be used to obtain the original behaviour. This shouldn't be necessary unless the header file
+ containing the function declaration was inadvertently not added to the wrappers. To fix this
+ add the function declaration into your wrappers, For example, replace:
+
+ extern void foo(int);
+
+ with:
+
+ %inline %{
+ extern void foo(int);
+ %}
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+06/22/2005: wsfulton
+ [C#, Java, Modula3, Ocaml]
+ The intermediary function names have been changed when wrapping variables to
+ match the other language modules so that %extend for a member variable works
+ uniformly across all language modules, eg:
+
+ %extend ExtendMe {
+ Var;
+ };
+
+ %{
+ void ExtendMe_Var_set(ExtendMe *, double) {...}
+ double ExtendMe_Var_get(ExtendMe *) {...}
+ %}
+
+ The methods implementing the get/set used to be:
+
+ %{
+ void set_ExtendMe_Var(ExtendMe *, double) {...}
+ double get_ExtendMe_Var(ExtendMe *) {...}
+ %}
+
+ This also changes the name of variable wrapper functions when using -noproxy.
+ The original names can be generated with the -oldvarnames commandline option.
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+Version 1.3.25 (June 11, 2005)
+==============================
+
+06/11/2006: mkoeppe
+ [Guile] Fix handling of anonymous-enum variables.
+
+06/10/2005: mkoeppe
+ [Guile] Fix for function arguments that are passed by
+ copy-of-value. Fix for global "const char *" variables.
+ Fix testcases arrays_dimensionless, arrays_global.
+
+06/08/2005: wsfulton
+ Fix for when a base class defines a symbol as a member variable and a derived class defines
+ the same symbol as a member method.
+
+06/08/2005: wsfulton
+ [C#] More fixes for virtual/new/override modifiers - when a method has protected access
+ in base and public access in derived class.
+
+06/02/2005: wsfulton
+ Fix #1066363 - Follow convention of release tarball name matching directory name.
+
+06/02/2005: wsfulton
+ [C#, Java] Fix #1211353 - typesafe enums (and Java proper enums) wrappers when enum value
+ is negative.
+
+05/27/2005: wsfulton
+ Modernised and tidied up Windows macros --> SWIGEXPORT, SWIGSTDCALL. They can be overridden
+ by users via -D compiler directives if need be.
+
+05/26/2005: wsfulton
+ %csmethodmodifiers can be applied to variables as well as methods now.
+
+ In addition to the default 'public' modifier that SWIG generates, %csmethodmodifiers will also
+ replace the virtual/new/override modifiers that SWIG thinks is appropriate. This feature is
+ useful for some obscure cases where SWIG might get the modifiers incorrect, for example
+ with multiple inheritance and overriding a method in the base class.
+
+ *** POTENTIAL INCOMPATIBILITY FOR C# MODULE ***
+
+05/25/2005: wsfulton
+ Added missing constructors to std::pair wrappers (std_pair.i) for all languages.
+
+05/25/2005: wsfulton
+ [C#] Added std::pair wrappers in std_pair.i
+
+05/25/2005: wsfulton
+ [C#] The C# 'new' and 'override' modifiers will be generated when a C++ class inherits methods
+ via a C++ 'using' declaration.
+
+05/25/2005: wsfulton
+ Fix for exception specifications previously being ignored in classes that inherited methods
+ from 'using' declarations, eg calls to Derived::bar below will convert C++ exceptions into
+ a target language exception/error, like it always has done for Base::Bar.
+
+ class Base {
+ virtual bar() throw (std::string);
+ };
+ class Derived : public Base {
+ using Base::bar;
+ };
+
+05/23/2005: wsfulton
+ Fixes for detecting virtual methods in %extend for the -fvirtual option and C# override and new
+ method modifiers.
+
+05/23/2005: wsfulton
+ [C#] The 'new' modifier is now generated on the proxy method when a method in a derived
+ class is not polymorphic and the same method exists in the derived class (ie it hides
+ the base class' non-virtual method).
+
+05/23/2005: wsfulton
+ [Java, C#] Fixes to detection of covariant return types - when the class hierarchy is more
+ than 2 classes deep.
+
+05/21/2005: wsfulton
+ [Java] std::wstring typemaps moved from std_string.i to std_wstring.i
+
+05/21/2005: wsfulton
+ Fix for crash in DohStrstr, bug #1190921
+
+05/21/2005: wsfulton
+ [TCL] Fix for methods with similar names when showing list of names on error - bug #1191828.
+ Patch from Jeroen Dobbelaere.
+
+05/21/2005: wsfulton
+ [TCL] long long overloading fix - bug #1191835, patch from Jeroen Dobbelaere.
+
+05/21/2005: wsfulton
+ Fix bug #1196755 to remove debug from swigtcl8.swg.
+
+05/19/2005: wsfulton
+ [C# and -fvirtual option] Fix for the override key not being generated in the derived class when a
+ virtual method's return type was a typedef in either the base or derived class. Also ensures the
+ method is eliminated when using the -fvirtual option. For example, Derived.method now has the C#
+ override keyword generated:
+
+ typedef int* IntegerPtr;
+
+ struct Base {
+ virtual IntegerPtr method();
+ };
+
+ struct Derived : Base {
+ int * method() const;
+ };
+
+ [C#] Fix for the override key being incorrectly generated for virtual methods when a base class
+ is ignored with %ignore.
+
+05/13/2005: wsfulton
+ [Java] Fixes to remove "dereferencing type-punned pointer will break strict-aliasing rules"
+ warnings in C wrappers when compiling C code with 'gcc -Wall -fstrict-aliasing'. Patch from
+ Michael Cahill. This modifies many of the casts slightly, for example
+ arg1 = *(DB_ENV **)&jarg1;
+ to
+ arg1 = *(DB_ENV **)(void *)&jarg1;
+
+05/12/2005: wsfulton
+ [C#] Support for C# attributes. C# attributes can be generated:
+ 1) On a C/C++ type basis by specifying an inattributes and/or outattributes typemap attribute
+ in the imtype or cstype typemaps (for C# return type or C# parameter type attributes).
+ 2) On a wrapped method or variable by specifying a csattributes feature (%feature).
+ 3) On a wrapped proxy class or enum by specifying a csattributes typemap.
+
+ Examples are in the C# documentation (CSharp.html).
+
+04/29/2005: wsfulton
+ New configure option to turn off the default maximum compiler warning as
+ they couldn't be removed even when overriding CFLAGS and CXXFLAGS with configure
+ (./configure CFLAGS= CXXFLAGS=). To turn the maximum warnings off, run:
+
+ ./configure --without-maximum-compile-warnings
+
+04/28/2005: wsfulton
+ Patch from Scott Michel which reworks the Java constructor and finalize/destructor typemaps,
+ for directors to reduce the number of overall Java typemaps. Added the director_take and
+ director_release typemaps to emulate other modules' __disown__ functionality.
+
+ *** POTENTIAL INCOMPATIBILITY FOR JAVA DIRECTORS ***
+
+04/28/2005: wsfulton
+ [C#] Fixed problems due to the over eager garbage collector. Occasionally the
+ garbage collector would collect a C# proxy class instance while it was being used
+ in unmanaged code if the object was passed as a parameter to a wrapped function.
+ Needless to say this caused havoc as the C# proxy class calls the C++ destructor
+ when it is collected. Proxy classes and type wrapper classes now use a HandleRef,
+ which holds an IntPtr, instead of a plain IntPtr to marshal the C++ pointer to unmanaged
+ code. There doesn't appear to be any performance degradation as a result of this
+ modification.
+
+ The changes are in the proxy and type wrapper classes. The swigCPtr is now of type HandleRef
+ instead of IntPtr and consequently the getCPtr method return type has also changed. The net
+ effect is that any custom written typemaps might have to be modified to suite. Affected users
+ should note that the implementation uses the new 'out' attribute in the imtype typemap as the
+ input type is now a HandleRef and the output type is still an IntPtr.
+
+ *** POTENTIAL INCOMPATIBILITY FOR C# MODULE ***
+
+04/28/2005: wsfulton
+ [C#] Support for asymmetric type marshalling added. Sometimes the output type needs to be
+ different to the input type. Support for this comes in the form of a new optional 'out'
+ attribute for the ctype, imtype and cstype typemaps. If this typemap attribute is not
+ specified, then the type used for both input and output is the type specified in the
+ typemap, as has always previously been the case. If this typemap attribute is specified,
+ then the type specified in the attribute is used for output types and the type specified
+ in the typemap itself is used for the input type. An output type is a return value from
+ a wrapped method or wrapped constant and an input type is a parameter in a wrapped method.
+
+ An example shows that char * could be marshalled in different ways,
+
+ %typemap(imtype, out="IntPtr") char * "string"
+ char * function(char *);
+
+ The output type is thus IntPtr and the input type is string. The resulting intermediary C# code is:
+
+ public static extern IntPtr function(string jarg1);
+
+04/22/2005: mkoeppe (Matthias Koeppe)
+ [Guile] Fix generation of "define-method" for methods of
+ classes with a constructor. Reported by Luigi Ballabio.
+
+04/15/2005: wuzzeb (John Lenz)
+ [Chicken]
+ For wrapped functions that return multiple values (using argout),
+ SWIG CHICKEN now returns them as multiple values instead of as
+ a list. They can then be accessed using (call-with-values).
+
+04/14/2005: wuzzeb (John Lenz)
+ [Chicken]
+ + Added a whole bunch of new _runme scripts into the chicken test
+ suite. Also fix some bugs these new scripts turned up.
+
+ + Added optimization when returning a wrapped proxy class. Before,
+ a minor garbage collection was invoked every time a function returned.
+
+ + All the chicken Examples should now run correctly
+
+04/14/2005: wsfulton
+ [C#] More fixes for typemap matching when wrapping variables, in particular
+ std::string, so that std::string variables can be easily marshalled with
+ a C# string property using:
+
+ %include "std_string.i"
+ %apply const std::string & { std::string *variable_name };
+ std::string variable_name;
+
+ (Recall that all class variables are wrapped using pointers)
+
+04/05/2005: wuzzeb (John Lenz)
+ [Chicken]
+ + Added Examples/chicken/egg, an example on how to build a chicken
+ extension library in the form of an egg. Also updated the
+ documentation on the different linking options.
+
+ + chicken test-suite now has support to check SWIG with the -proxy
+ argument if there exists a _proxy_runme.ss file.
+
+ + More fixes for overloaded functions and -proxy
+
+03/31/2005: wsfulton
+ Turned on extra template features for all languages which were
+ previously only available to Python.
+
+ This enables typemaps defined within a templated class to be used as
+ expected. Requires %template on the templated class, %template() will
+ also pick up the typemaps. Example:
+
+ template <typename T> struct Foo {
+ ...
+ %typemap(in) Foo "in typemap for Foo<T> "
+ or
+ %typemap(in) Foo<T> "in typemap for Foo<T> "
+ };
+
+ %template(Foo_i) Foo<int>;
+ %template() Foo<double>;
+
+ will generate the proper 'in' typemaps wherever Foo<int> and Foo<double>
+ are used.
+
+03/30/2005: mkoeppe (Matthias Koeppe)
+ [MzScheme] Patch from Hans Oesterholt for supporting MzScheme 30x.
+
+03/29/2005: wuzzeb (John Lenz)
+ [Chicken]
+ + Reallow older versions of chicken (1.40 to 1.89) by passing -nocollection
+ argument to SWIG
+ + %import now works correctly with tinyclos. (declare (uses ...)) will be
+ exported correctly.
+ + TinyCLOS proxy classes now work correctly with overloaded functions
+ and constructors.
+
+03/29/2005: wsfulton
+ [Java] Patch from Scott Michel for directorout typemaps. Java directors
+ require the directorout typemaps like the other languages now. The new
+ typemaps provide fixes for methods where the return type is returned
+ by reference (this cannot automatically be made thread safe though).
+
+03/22/2005: wsfulton
+ Enum casting fixes. Visual C++ didn't like the C type casting SWIG produced
+ when wrapping C++ enum references, as reported by Admire Kandawasvika.
+
+03/21/2005: wsfulton
+ [Perl] SF #1124490. Fix Perl macro clashes when using Visual Studio's STL string,
+ so now projects can #include <string>.
+
+03/21/2005: wsfulton
+ Fixed %varargs which got broken with the recent default argument changes.
+ Also works for Java and C# for the first time now.
+
+03/17/2005: wuzzeb (John Lenz)
+ [Chicken]
+ + Fix a whole bunch of bugs in the chicken module. The entire
+ test suite now compiles, with the exception of the tests that require
+ std_vector.i, std_deque.i, and so on, which chicken does not have yet.
+
+ + Add support for %exception and %typemap(exceptions). Exceptions are
+ thrown with a call to (abort) and can be handled by (handle-exceptions)
+
+03/15/2005: wsfulton
+ [Java] Patch from Scott Michel for directors. Modifications to the typemaps
+ giving users fine control over memory ownership and lifetime of director classes.
+ Director classes no longer live forever by default as they are now collectable
+ by the GC.
+
+03/15/2005: wuzzeb (John Lenz)
+ [Chicken] Add support for adding finalizers garbage collected objects.
+ Functions that return new objects should be marked with %newobject and
+ input arguments which consume (or take ownership) of a pointer should
+ be marked with the DISOWN typemap.
+
+ Also add support for correctly checking the number of arguments passed
+ to a function, and raising an error if the wrong number are passed.
+
+03/14/2005: wuzzeb (John Lenz)
+ Add --without-alllang option to configure.in, which is the same as
+ passing all the --without-python --without-perl5 etc... that Matthias added.
+
+03/09/2005: wsfulton
+ [Php] Memory leak fix for functions returning classes/structs by value.
+
+03/08/2005: wsfulton
+ [Perl] Fix for Perl incorrectly taking memory ownership for return types that
+ are typedefs to a struct/class pointer. Reported by Josh Cherry.
+
+03/07/2005: wsfulton
+ [C#] Various exception changes for the std::vector wrappers. These now more
+ accurately mirror the same exceptions that System.Collections.ArrayList throw.
+
+03/07/2005: wsfulton
+ [C#] Fix undefined behaviour after any of the std::vector methods
+ throw an exception.
+
+03/07/2005: wsfulton
+ [C#] When null is passed for a C++ reference or value parameter, the
+ exception thrown has been corrected to an ArgumentNullException instead
+ of NullReferenceException as recommended in the .NET Framework documentation.
+
+ The default throws typemaps turn a C++ exception into an ApplicationException,
+ not a SystemException now.
+
+03/07/2005: wsfulton
+ [C#] Numerous changes in C# exception handling have been made over the past
+ few weeks. A summary follows:
+
+ The way in which C++ exceptions are mapped to C# exceptions is quite different.
+ The change is to fix C# exceptions so that the C++ exception stack is correctly
+ unwound as previously C++ exceptions were being thrown across the C PInvoke layer
+ into the managed world.
+
+ New typemap attributes (canthrow and excode) have been introduced to control the
+ mapping of C++ to C# exceptions. Essentially a callback into the unmanaged world
+ is made to set a pending exception. The exception to throw is stored in thread local
+ storage (so the approach is thread-safe). The typemaps are expected to return
+ from unmanaged code as soon as the pending exception is set. Any pending exceptions
+ are checked for and thrown once managed code starts executing. There should
+ be minimal impact on execution speed during normal behaviour. Full details will be
+ documented in CSharp.html.
+
+ The SWIG_CSharpThrowException() function has been removed and replaced with the
+ SWIG_CSharpSetPendingExceptionArgument() and SWIG_CSharpSetPendingException()
+ functions. The original name has been deliberately changed to break old code as
+ the old approach was somewhat flawed. Any user defined exceptions that follow the
+ same pattern as the old approach should also be fixed.
+
+ Numerous new .NET framework exceptions are now available for easy throwing from
+ unmanaged code. The complete list is:
+
+ ApplicationException, ArithmeticException, DivideByZeroException,
+ IndexOutOfRangeException, InvalidOperationException, IOException,
+ NullReferenceException, OutOfMemoryException, OverflowException,
+ SystemException, ArgumentException, ArgumentNullException and
+ ArgumentOutOfRangeException.
+
+ *** POTENTIAL INCOMPATIBILITY FOR C# MODULE ***
+
+05/05/2005: mmatus
+
+ Fix several memory leaks around. Even when we survive knowning
+ swig is a memory leak factory, it was a little out of
+ control. To run std_containers.i in the python test-suite,
+ swig was using ~260MB, now it uses 'only' ~40MB, which is
+ the same ammount that g++ uses, so, is not that bad.
+ In the process, I found a couple of extra Deletes, which
+ in some cases could trigger seg. faults and/or
+ DOH/asserts.
+
+ [python] Better support for directors + exception. More
+ verbose errors and added an unexpected exception handler.
+
+ [python] Fix memory leak for the
+
+ std::vector<std::vector<int> >
+
+ case,reported by Bo Peng.
+
+ [python] Fix SwigPyObject compare problem reporte by
+ Cameron Patrick.
+
+ [python] Fix several warnings in the generated code
+ for gnu-gcc, Intel and VC7.1 compilers.
+
+
+02/25/2005: wuzzeb (John Lenz)
+ Update documentation to use CSS and <div> instead of <blockquote>
+ I used a script to convert the docs, and it set all the box classes
+ to be "code". There are actually 4 different classes,
+ "shell", "code", "targetlang", and "diagram". We need to go through
+ and convert the divs depending on what they contain.
+
+02/23/2005: mmatus
+
+ [Python] Added option -nortti to disable the use of native
+ C++ RTTI with directors (dynamic_cast<> is not used).
+
+ Add more code for directors to detect and report errors in
+ the python side.
+
+ Extend the use of SWIGINTERN whenever is possible.
+
+ Remove template warnings reported by VC7.1.
+
+ Remove warnings reported by gcc/g++. Finally you can
+ compile using
+
+ g++ -W -Wall -c mymodule_wrap.cxx
+
+ and no spurious errors will be generated in the wrapper
+ code.
+
+02/23/2005: wuzzeb (John Lenz)
+ Added -external-runtime argument. This argument is used to dump
+ out all the code needed for external access to the runtime system,
+ and it replaces including the files directly. This change adds
+ two new virtual functions to the Language class, which are used
+ to find the language specific runtime code. I also updated
+ all languages that use the runtime to implement these two functions.
+
+02/22/2005: mmatus
+ Fix %template + private error SF#1099976.
+
+02/21/2005: mmatus
+
+ Fix swigrun.swg warnings reported when using "gcc -W -Wall"
+ (static/inline not used in front of a function
+ declaration), and add SWIGUNUSED attribute to avoid
+ unused warnings elsewhere.
+
+ Fix unused variable warnings.
+
+ [Python] Use new SWIGUNUSED attribute to avoid warnings in
+ SWIGINTERN methods.
+
+ [Python] Fix PyOS_snprintf for python versions < 2.2 (SF #1104919).
+
+ [Python] Fix map/multimap to allow empty maps (reported by
+ Philippe Hetroy).
+
+ [Docs] Add some documentation to Python.html and
+ SWIGPlus.html, including for example the fact that
+ 'friends' are now supported.
+
+02/21/2005: wsfulton
+ [PHP] Patch from Olly Betts, so that wrappers compile with Zend thread safety enabled.
+
+02/17/2005: wsfulton
+ Memory leak fix in some of the scripting language modules when using default
+ arguments in constructors. The scripting language was not taking ownership of the
+ C++ object memory when any of the constructors that use default arguments was called.
+
+02/16/2005: wsfulton
+ SF #1115055: Failed make install. Patch from Rob Stone.
+
+02/16/2005: wsfulton
+ [Java] SF #1123416 from Paul Moore. Correct memory allocation for STRINGARRAY
+ typemaps in various.i.
+
+02/15/2005: wsfulton
+ Disabled typemap search changes for now (see entry 19/12/2004). It breaks
+ old typemaps, lengthens the execution time by about 25% and introduces
+ inconsistencies.
+
+02/15/2005: wsfulton
+ swig -help follows other software by printing to stdout instead of stderr now.
+ swig -version also displays to stdout instead of stderr now.
+ Behaviour reported by Torsten Landschoff.
+
+02/15/2005: wsfulton
+ [Ruby] Fix for the less commonly used ordering of %include and #include, so
+ that the generated code compiles. Bug reported by reported by Max Bowsher.
+ %include foo.h
+ %{
+ #include foo.h
+ %}
+
+02/15/2005: wsfulton
+ [C#, Java] SWIG_exception macro will now return from unmanaged code / native code
+ as soon as it is called. Fixes possible JVM crashes and other code unexpectedly
+ being executed. Note SWIG_exception is only occasionally used by SWIG library
+ writers, and is best avoided by SWIG users.
+
+02/15/2005: wsfulton
+ [C#, Java] Typemaps can now be targeted at global variable names
+ and static member variable names. Previously the typemaps for
+ the setters were ignored, for example:
+
+ %typemap(in) int globalint "..."
+ int globalint;
+
+02/13/2005: mkoeppe (Matthias Koeppe)
+ [Guile] Add %typecheck for SWIGTYPE, add %typecheck for ptrdiff_t, fix
+ typemaps for size_t.
+
+ [Pike] Merge patch from Torsten Landschoff for improved Pike configuration.
+
+02/12/2005: mkoeppe (Matthias Koeppe)
+ New configure switches --without-tcl, --without-python etc. allow to
+ disable the search for installed languages.
+
+01/31/2005: wuzzeb (John Lenz)
+ - Add DohSortList to DOH
+
+ - Improve the runtime type system:
+ + Speed. Type loading is now O(n log n) instead of O(N^2), which
+ for large modules is a huge improvement.
+ + A whole bunch of functions in swigrun.swg no longer need the
+ swig_type_list_handle passed to them. The only one left is
+ TypeQuery. This also makes runtime.swg a lot smaller.
+ + Split up swig_type_info structure into two structures
+ (swig_type_info and swig_cast_info)
+ + Store a pointer to a swig_type_info rather than just the type
+ name string in the linked list of casts. First off, this makes
+ the guile module a little faster, and second, the
+ SWIG_TypeClientData() function is faster too.
+ + Add the idea of a module into the type system. Before, all the
+ types were stored in one huge linked list. Now, another level is
+ added, and the type system stores a linked list of modules, each
+ of which stores an array of types associated with it.
+ + For more information of how the runtime type system now works,
+ please see Doc/Manual/typemaps.html and Doc/Devel/runtime.txt
+
+ - Update all language modules to use the new type system. The changes
+ to each language module are minor. All languages are now able to
+ use runtime.swg for external access to the type system. Before
+ only python and perl did.
+
+ - [guile, mzscheme, ocaml, and php4] These languages opened up the
+ init function inside the .cxx code, and any code in the .swg files
+ in the init section was inside this function. This was a problem
+ for swiginit.swg, which needs to be inserted before the SWIG_init
+ function is opened. Thus I changed these languages to be like
+ python or perl, where the init function is declared in the .swg
+ file.
+
+ - [Ruby] Instead of moving the init function to the .swg file, I
+ added a new section initbeforefunc, and then added
+ %insert(initbeforefunc) "swiginit.swg"
+
+ - [MzScheme] Fix enums and fix Examples/Makefile.in so that if
+ multiple -I arguments are specified in the INCLUDES variable, each
+ gets a ++ccf.
+
+ - [Guile GH] Update Guile GH to use the new type system. See
+ Doc/Manual/Guile.html for how smobs are now used.
+
+01/11/2005: wsfulton
+ [C#] New typemap called 'csconstruct'. The code in this typemaps was previously hard
+ coded and could not be customised by a user. This typemap contains the code that is
+ generated into a proxy class's constructor.
+
+ [Java] New typemap called 'javaconstruct'. The code in this typemaps was previously hard
+ coded and could not be customised by a user. This typemap contains the code that is
+ generated into a proxy class's constructor. Another typemap named 'javaconstruct_director'
+ is used instead when the proxy class is a director class.
+
+ [C#, Java] If a C++ class did not have a default constructor, a protected default constructor
+ was automatically generated by SWIG. This seems is unnecessary and has been removed
+ and thereby giving the user almost complete control over the generated code along with the
+ new typemaps above.
+
+19/12/2004: mmatus
+ [Disabled, see entry 02/15/2004]
+ - Fix typemap search, now the "out" typemap search is done as follows
+
+ int *Foo::foo(int bar) -> int *Foo::foo(int bar)
+ -> int *Foo::foo
+ -> int *foo(int bar)
+ -> int *foo
+ -> int *
+
+ then, now you can be more specific, and define
+
+ /* apply only for 'Foo::foo' method */
+ %typemap(out) int * Foo::foo(int *bar) ...;
+
+ /* apply for all 'foo' functions/methods */
+ %typemap(out) int * foo(int *bar) ...;
+
+ %inline {
+ struct Foo {
+ int *foo(int *bar);
+ };
+ }
+
+
+15/12/2004: mmatus
+ - More fixes for templates and template default args.
+ See template_default.i for scary cases that now are
+ supported, besides the already ugly STL/std cases.
+
+ - Cosmetics and more use of 'const' where it was implicit.
+ - Other fixes for OSS, which is now working again with 1.3.25.
+
+Version 1.3.24 (December 14, 2004)
+==================================
+
+12/12/2004: wuzzeb (John Lenz)
+ [Chicken] Fix a bunch of bugs relating to -proxy support
+ + non-class variables now export properly using -proxy
+ + static member functions now export properly using -proxy
+ + member class variables now export properly using -proxy
+ + added a -nounit argument, which does not export the (declare (unit ...))
+ + correctly install swigclosprefix.scm
+ + constants (enums, defines) now correcly export when using -proxy
+
+12/11/2004: wsfulton
+ configure fix for when more than one version of jni_md.h is found
+ in the Java include directory (was generating lots of sed error
+ messages).
+
+12/08/2004: wsfulton
+ [Java] Fixes to arrays_java.i so that one can apply the array
+ typemaps to functions taking pointers as input, eg
+
+ %include "arrays_java.i"
+ %apply int[] {int*};
+ void foo(int *a);
+
+12/05/2004: wsfulton
+ [Java] Director mods contributed by Scott Michel. New typemaps
+ directordisconnect and directordisconnect_derived for the
+ swigDirectorDisconnect() method. Also fix to get the javapackage
+ typemap working again.
+
+12/05/2004: mmatus
+ - Finishing the fixes for templates + default template
+ args + specializations.
+
+ - [Python] Now we use the new templates + default template
+ args in the std/STL library. That means the internal
+ swig files are getting uglier since we now support the
+ original declarations:
+
+ template<class _Tp, class _Alloc = std::allocator< _Tp > >
+ class vector {
+ ....
+ };
+
+ template<class _Key, class _Tp, class _Compare = std::less<_Key >,
+ class _Alloc = std::allocator<std::pair<const _Key, _Tp > > >
+ class map {
+ ....
+ };
+
+ and the user can use the %template directive as
+
+ %template() std::vector<int>;
+ %template() std::vector<int, std::allocator<int> >;
+ %template() std::vector<int, MyAllocator<int> >;
+
+ Now we are closer to the cleaning/rewriting of the
+ python std/STL support, such that we recover support for
+ MSVC++ 6.0, and we can add support for other languages
+ too.
+
+
+12/02/2004: wsfulton
+ [Java] Fix for directors when wrapping methods using a member enum
+ and typesafe/proper enums enabled.
+
+12/01/2004: mmatus
+ - Fix typemaps to work with templates and default template
+ args, ie
+
+ template <class A, class B = int>
+ struct Foo {
+ };
+
+ %typemap(in) Foo<int> *{...}
+ %typemap(out) Foo<int,int> *{...}
+
+ Foo<int> * foo( Foo<int> *f1, Foo<int,int> *f2);
+
+ now 'f1', 'f2' and the return value resolve the provided
+ typemaps properly.
+
+ This is highly needed for proper STL support, see new
+ std_basic_string.i, std_sstream.i, etc.
+
+ - Added std_sstream.i, and fix std_basic_string.i to use
+ the new typemaps + template def. arg mechanism. Also,
+ added the needed std_alloc.i. Now, all the containers
+ can be modified to support std::allocator, like in:
+
+ template<class T, class A = std::allocator<T > >
+ class vector {
+ public:
+ ....
+ };
+
+ This change is only completed by now for basic_string.
+
+ - Fix for smart pointers + members + extensions:
+
+ %extend Foo {
+ int extension(int i, int j) { return i; }
+ int extension() { return 1; }
+ }
+
+ %inline %{
+
+ class Foo {
+ public:
+ int y;
+ static const int z;
+ };
+
+ class Bar {
+ Foo *f;
+ public:
+ Bar(Foo *f) : f(f) { }
+ Foo *operator->() {
+ return f;
+ }
+ };
+
+ now you can
+
+ f = Foo()
+ f.y = 3
+ a = f.z
+ f->extension()
+
+ b = Bar(f)
+ b.y = 3
+ a = b.z
+ b->extension()
+
+ - Other small errors fixes, mostly python.
+
+11/25/2004: wsfulton
+ [Java] Numerous director bug fixes so that the correct java types
+ and canonicalized types in the JNI code are emitted. Use of the
+ $javaclassname special variables in the director typemaps now
+ consistent with the non-director typemaps. The types used for
+ typemap lookups are also corrected in a few places. If you
+ previously had your own director typemaps, ensure they are using the
+ correct C++ type.
+
+ *** POTENTIAL INCOMPATIBILITY FOR JAVA DIRECTORS ***
+
+11/25/2004: wsfulton
+ const enum SWIGTYPE & typemaps added. These wrap const enum references
+ as if they were passed by value. Const enum references thus work the
+ same as const reference primitive types such as const double &,
+ const int & etc. Typemaps added for Java, C#, Ruby, Tcl, Perl and Pike.
+
+11/25/2004: wsfulton
+ [Java, C#] New special variable: $*javaclassname, similar to $javaclassname
+ and $&javaclassname. The new one removes a pointer from the C type before
+ obtaining the Java class name. One or more of $javaclassname,
+ $&javaclassname or $*javaclassname may now appear in a typemap. Likewise for
+ C# using csclassname instead of javaclassname.
+
+11/25/2004: wsfulton
+ The last vestiges of enums being handled as integers removed from the
+ internals. The wrapper methods use the enum type rather than an int
+ now. The net result is added type safety for enums when handled as
+ pointers, references etc. Previously in situations such as a method
+ taking a pointer to an enum, a pointer to an int or a pointer to an
+ enum of some other type could inadvertantly be passed to the method.
+ This is now fixed as the descriptor for an enum is no longer based on
+ an int, but the enum type instead. Anonymous enums are still handled
+ as integers.
+
+ The consequence for scripting language users in correct usage of enums
+ should not be noticeable. There is no change for any of the languages
+ where enums are passed by value - most of the scripting languages will
+ still accept an integer for an enum value and the strongly typed
+ languages still use either typesafe enums, integers or proper enums
+ depending on what the user configures. For Java and C# users a change
+ in the typewrapper class name has occurred (for enum pointers,
+ references etc). For example:
+
+ enum Numbers { one=1, two };
+ enum Numbers* number();
+
+ In Java and C# this must now be coded as
+
+ SWIGTYPE_p_Numbers n = modulename.number();
+
+ rather than
+
+ SWIGTYPE_p_int n = modulename.number();
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+11/21/2004: wsfulton/mmatus
+ Added missing deprecated warning for %name and remove remaining %name
+ usage in the SWIG libraries.
+
+11/21/04: mmatus
+ - [Python] Adding the PySwigObject to be used for carrying
+ the instance C/C++ pointers. This is used instead of
+ string and PyCObjects.
+
+ The new PySwigObject is even safer than PyCObject, and
+ more friendly than plain strings:
+
+ now you can do
+
+ print a.this
+ <Swig Object at _00691608_p_A>
+
+ print str(a.this)
+ _00691608_p_A
+
+ print long(a.this)
+ 135686400
+
+ print "%s 0x%x" % (a.this, a.this)
+ _00691608_p_A 0x8166900
+
+ the last one is very useful when debugging the C/C++
+ side, since is the pointer value you will usually get
+ from the debugger.
+
+ Also, if you have some old code that uses the string
+ representation "_00691608_p_A", you can use it now again
+ using 'str(ptr)', or by calling 'str = PyObject_Str(obj)'
+ in the C/C++ side.
+
+ This change is mainly for nostalgic swig users that miss
+ the string representation, but also allows to say again
+
+ if a.this == b.this:
+ return "a is b"
+
+ and well, since the change were really simple, maybe in
+ the future we will be able to do
+
+ next = a.this + 1
+
+ or add native python iteration over native C/C++ arrays,
+ ie, no need to create/copy new tuples when returning and
+ array or vector.
+
+ Also, a PySwigPacked object was adding to carry a member
+ method pointer, but this is probably a temporal solution
+ until a more general object for methods is added.
+
+ Be aware that to simplify maintaining and compatibility
+ with other tools, the old string and PyCObjects
+ representation could disappear very soon, and the
+ SWIG_COBJECTS_TYPES or SWIG_NO_OBJECT_TYPES macros will
+ have no effect at compilation time. Still, the three
+ mechanisms are present in the code just for testing,
+ debugging and comparison purposes.
+
+11/21/04: mmatus
+
+ - [Python] Adding back support for using the swig runtime code
+ inside the user code. We just allow the user to include
+ the minimal code needed to implement the runtime
+ mechanism statically, just as in done in the swig
+ modules.
+
+ To use the swig runtime code, for example with python,
+ the user needs include the following:
+
+ #include <Python.h> // or using your favorite language
+ #include <swigrun.swg>
+ #include <python/pyrun.swg> // or using your favorite language
+ #include <runtime.swg>
+
+ the files swigrun.swg, pyrun.swg and runtime.swg can
+ be checked out by using swig -co, or they can simply
+ be found by adding the swig lib directory to the
+ compiler include directory list, for example
+
+ SWIGLIB=`swig -swiglib`
+ c++ -I${SWIGLIB} ..
+
+ of better, using the CPPFLAGS, but that depends on your
+ environment.
+
+ This change can be ported to the other languages too,
+ you just need to isolate the needed runtime code in
+ a single file like 'pyrun.swg', and provide the
+ SWIG_Runtime_GetTypeList() method. Look at the
+ Lib/python/pyrun.swg file and the Examples/python/swigrun
+ example.
+
+11/15/04: mmatus
+ - Fix mixed_types.i + gcc-3.4, ie, arrays + references +
+ typedefs
+
+ - Fix multidim arrays + typedefs,ie
+
+ typedef char character[1];
+ typedef character word[64];
+
+ - Process protected/private bases in the same way before
+ we process protected/private members, ie, we check
+ for constructors, operator new, virtual members, etc.
+
+ - Fix Ruby/Java to work (or ignore) multi-inheritance +
+ directors. Allow other languages to define if it is
+ supported or not.
+
+ - Now you can run
+
+ SWIG_FEATURES="-directors -dirprot"
+ make check-ruby-test-suite
+ make check-python-test-suite
+ make check-java-test-suite
+ make check-ocaml-test-suite
+
+ and you will get only 'real' errors. ruby and python
+ compile with no errors, java shows some problems.
+
+Version 1.3.23 (November 11, 2004)
+==================================
+
+11/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.
+
+11/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); [ Note: %pythondynamic since deprecated ]
+
+ 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)
+==================================
+
+09/03/2004: wsfulton
+ The swig.m4 macro for use with the Autoconf/Automake/Libtool has
+ been removed and is no longer installed. Please use the new and better
+ maintained version derived from swig.m4 in the Autoconf macro archive.
+ See http://www.gnu.org/software/ac-archive/htmldoc/ac_pkg_swig.html and
+ http://www.gnu.org/software/ac-archive/htmldoc/ac_python_devel.html.
+
+09/01/2004: wsfulton
+ [Perl] Applied patch #1019669 from Christoph Flamm. Adds support
+ for %feature("shadow") in the same way as it works in Python. This
+ enables one to override the generated shadow/proxy methods, including
+ constructors and destructors. For example:
+
+ /* Let's make the constructor of the class Square more verbose */
+
+ %feature("shadow") Square(double w)
+ %{
+ sub new {
+ my $pkg = shift;
+ my $self = examplec::new_Square(@_);
+ print STDERR "Constructed an @{[ref($self)]}\n";
+ bless $self, $pkg if defined($self);
+ }
+ %}
+
+ class Square {
+ public:
+ Square(double w);
+ ...
+ };
+
+08/31/2004: mmatus
+ [Python] Incompatibility reported by Bill Clarke (llib@computer.org):
+
+ If you are using Sun Studio 8 (and possibly earlier
+ versions) to compile the output produced by swig
+ 1.3.22rc1, and you are using C++ and STL templates then
+ you need to use either "-runtime" or "-noruntime". If you
+ use neither of these options then you will probably get
+ compiler errors when trying to compile the wrapper file;
+ the error message will be like this: The name
+ SWIG_Python_ConvertPtr[...] is unusable in static
+ swigpy::traits_asptr[...] If you get this error message,
+ you need to regenerate your wrapper file using 'swig
+ -runtime' or 'swig -noruntime'.
+
+ You shouldn't get this problem with Sun Studio 9.
+
+ *** POTENTIAL INCOMPATIBILITY FOR PYTHON MODULE ***
+
+08/26/2004: wsfulton
+ [Perl] Applied #932333 from Ikegami Tsutomu. Fixes long long *OUTPUT
+ and unsigned long long *OUTPUT typemaps in typemaps.i.
+
+08/26/2004: wsfulton
+ Applied patch #857344 from Art Yerkes. Workaround for autoconf bug when
+ running 'make install'.
+
+08/26/2004: wsfulton
+ [Perl] Part of patch #982753 applied. This implements a %perlcode directive.
+ It allows one to add Perl code to the generated .pm file. Works the same
+ as %pythoncode.
+
+08/26/2004: wsfulton
+ [Java] Fix for directors when wrapping virtual methods with exception
+ specifications that were not simple types. Previously code was generated that
+ didn't compile, for example when the exception specification was a pointer.
+
+08/25/2004: wsfulton
+ [C#] Typemap fix for methods that return char *. The CLR would incorrectly
+ delete the memory pointed to by char *. Also applied the same correction to
+ the char array typemaps.
+
+08/24/2004: wsfulton
+ Fixes for -fmicrosoft error/warning message display:
+ - End of file (EOF) warning messages not displaying in correct format
+ - Some messages containing a file path were displaying a double backslash
+ instead of a single backslash
+
+08/23/2004: wsfulton
+ Applied patch #1011604 submitted by Charles Schwieters. Fix for 64 bit tcl
+ interpreters.
+
+08/23/2004: wsfulton
+ Fix for bug #875583 - enum forward declarations previously gave a syntax error.
+
+08/23/2004: mkoeppe
+ [Allegro CL] Use typemaps "ffitype" and "lisptype" to determine the FFI type
+ specifiers from the C type. This makes it possible, for instance, to control
+ whether a C "char" argument takes a Lisp character or a Lisp integer value.
+ The default (taking Lisp characters) is done by these built-in typemaps:
+ %typemap(ffitype) char ":char"; %typemap(lisptype) char "character";
+ If char means an integer instead, use these typemaps:
+ %typemap(ffitype) char ":char"; %typemap(lisptype) char "integer";
+
+08/22/2004: wsfulton
+ As discussed in bug #772453, the SWIG library directory is now installed
+ into a different default directory. The library used to be installed to
+ /usr/local/lib/swig1.3. It is now in the more usual architecture independent
+ directory and I have additionally used a version specific subdirectory as
+ the library will rarely work with older versions of SWIG. This release
+ will thus use /usr/local/share/swig/1.3.22 by default, which can be
+ tailored as before using './configure --swiglibdir'.
+
+08/17/2004: mkoeppe
+ [MzScheme] Add support to create native MzScheme structures from C structures.
+ To convert a C structure to an MzScheme structure, use the new runtime macro
+ SWIG_NewStructFromPtr in a typemap. Patch from Dmitriy Zavin.
+
+08/12/2004: wsfulton
+ Patch #837715 from Ben Reser to correctly detect Python lib directory
+ on 64 bit systems.
+
+08/12/2004: wsfulton
+ [C# and Java] Prevent memory leaks in the case of early return
+ from wrapper methods using const std::string & parameters. Modified
+ Mark Traudt patch #951565.
+
+08/12/2004: wsfulton
+ Bug #943783 with patch fixes php char * out typemap NULL values.
+
+08/03/2004: Ahmon Dancy <dancy@dancy>
+
+ [allegrocl] Additional case mode fixes. Also, make sure
+ foreign types are exported.
+
+07/24/2004: mkoeppe
+ [Guile] In -scm mode, SWIG modules now exchange their pointer type
+ information via the Guile interpreter. It is no longer necessary to build a
+ runtime library or to use -noruntime and -runtime etc.
+
+ The module (Swig swigrun) which was introduced in the change of 05/17/2004 is
+ no longer automatically built. If you need it, run SWIG on the interface file
+ swigrun.i.
+
+07/23/2004: wsfulton
+ [C#] Bug #917601 Mapping C++ bool fix from Mark Traudt
+
+07/23/2004: wsfulton
+ RPM fixes for latest CVS version including removal of runtime
+ library.
+
+07/23/2004: wsfulton
+ Patch #908955 from Robert H De Vries.
+ RPM file generation fix for Fedore Core 1 and Redhat AS2.1.
+
+07/12/2004: wsfulton
+ Patch #864689 from Robin Dunn:
+
+ This patch corrects two problems in the XML output of SWIG:
+
+ 1. There were often extra '/>\n' in the output.
+
+ 2. value attributes were output with '\n' in them but
+ since that is not technically legal most (all?) XML
+ parsers will strip them out. Replacing the '\n' with
+ the '&#10;' entity reference solves this as that is
+ legal and XML parsers will convert it to a '\n' when
+ reading the values back in.
+
+ This patch also adds a new global command line option
+ that will allow the parse tree to be written out in XML
+ *after* some other language module has been run, in
+ order to be able to get extra info that the language
+ module puts in the tree. In this way the XML is a
+ post-processed version of the tree rather than a
+ pre-processed version.
+
+ Command line option is -dump_xml or -xmlout <file>
+
+07/12/2004: wsfulton
+ [Java] Patch from Scott Michel to fix typesafe enums and proper enums
+ with directors.
+
+07/12/2004: wsfulton
+ HTML documentation (makechap.py) file generator missing end of line
+ patch #908951 from Robert de Vries.
+
+07/08/2004: wsfulton
+ The deprecated runtime library build has been removed. This also removes
+ the dependency on Libtool. Libtool is no longer required to build SWIG.
+ The associated -ldflags SWIG commandline option has also been removed.
+
+ The examples and test-suite testcases that used the runtime library have
+ been updated to use the replacement approach to using SWIG across
+ multiple modules, that is they use the -noruntime and -runtime commandline
+ options, see Modules.html. Effectively they build their own runtime
+ libraries using -runtime. The examples are import and import_template.
+ The test cases are in the imports and template_typedef_import directories.
+
+ Anyone who wants the original runtime libraries can either run the test-suite
+ or build the examples and use the appropriate shared object/DLL that is
+ generated with the -runtime commandline option. For example libimports_runtime.so
+ (Python calls it lib_imports_runtime.so) is generated after running the
+ 'make imports.multicpptest' testcase in the Examples/test-suite/<lang>
+ directory. Or use libruntime.so / runtime.dll after building the import
+ examples in Examples/<lang>/import.
+
+07/07/2004: mkoeppe
+ [Allegro CL] Convert character and string literals in constants to
+ CL syntax. Fix FF:DEF-FOREIGN-CALL for mixed-case C functions.
+
+06/27/2004: wsfulton
+ [Java] New feature for Java exceptions with format %javaexception(exceptionclasses).
+ This feature is a slight enhancement to %exception and the only difference is the
+ addition of the exception classes which are generated into a throws clause.
+ The 'exceptionclasses' is a comma separated list of classes which will be
+ added to the associated proxy method's throws clause. The 'exceptionclasses'
+ are specified like the exception classes in the 'throws' attribute in the
+ typemaps. This feature should be used for correctly handling checked exceptions
+ thrown from JNI code. For example:
+
+ %javaexception("java.lang.Exception") throwException %{
+ ... convert a std::logic_error into a java.lang.Exception using JNI code ...
+ %}
+
+ #include <stdexcept>
+ void throwException() {
+ throw std::logic_error("Logic error!");
+ }
+
+ will generate a method with a throws clause in the module class:
+
+ public static void throwException() throws java.lang.Exception { ... }
+
+06/27/2004: wsfulton
+ [C#] New %csconstvalue(value) feature directive for use with constants and
+ enums. This works the same way as %javaconstvalue. For C#, this directive
+ is the only way that one can fix wrapping of C/C++ enums with proper C#
+ enums if the enum item's initialiser cannot compile as C# code. This is
+ because Java enums can use a call into C code to initialise the enum item,
+ whereas in C#, the enum value must be a compile time constant. That is,
+ using %csconst(0) cannot be used in C# to initialise the C# enum item via
+ a PINVOKE call.
+
+06/27/2004: wsfulton
+ [Java] New %javaconstvalue(value) feature directive for use with constants and
+ enums. Sometimes the use of %javaconst(1) will produce code that won't compile
+ under Java. If a compile time constant is required, %javaconst(0) is not an
+ option. The %javaconstvalue directive achieves this goal and the value specified
+ is generated as Java code to initialise the constant. For example:
+
+ %javaconst(1);
+ %javaconstvalue(1000) BIG;
+ %javaconstvalue("new java.math.BigInteger(\"2000\")") LARGE;
+ %javaconstvalue(10) bar;
+ %{
+ const int bar = 10;
+ %}
+ %inline %{
+ #define BIG 1000LL
+ #define LARGE 2000ULL
+ enum Foo { BAR = ::bar };
+ %}
+
+ Generates:
+
+ public interface exampleConstants {
+ public final static long BIG = 1000;
+ public final static java.math.BigInteger LARGE = new java.math.BigInteger("2000");
+ }
+ public final class Foo {
+ public final static Foo BAR = new Foo("BAR", 10);
+ ...
+ }
+
+ Previously, none of BIG, LARGE or BAR would have produced compileable code
+ when using %javaconst(1).
+
+06/27/2004: wsfulton
+ %feature enhancements. Features can now take an unlimited number of attributes
+ in addition to the feature name and feature value. The attributes are optional
+ and are much the same as the typemap attributes. For example, the following
+ specifies two optional attributes, attrib1 and attrib2:
+
+ %feature(featurename, attrib1="attribval1", attrib2="attribval2") name "val";
+ %feature(featurename, val, attrib1="attribval1", attrib2="attribval2") name;
+
+06/27/2004: wsfulton
+ %feature improvements for the syntax that takes the feature value within the
+ %feature() brackets. The value specified is no longer restricted to being just
+ a string. It can be a string or a number. For example, this is now acceptable
+ syntax:
+ %feature("featurename",20.0);
+ whereas previously it would have to have been:
+ %feature("featurename","20.0");
+ Useful for features that are implemented as a macro, for example:
+ #define %somefeature(value) %feature("somefeature",value)
+ These will now work accepting either a string or a number:
+ %somefeature("Fred");
+ %somefeature(4);
+
+06/06/2004: wuzzeb (John Lenz)
+ [Chicken, Guile]
+ - Created the Examples/test-suite/schemerunme directory, which holds all the
+ runme scripts for guile and chicken (and possibly mzscheme...). The guile
+ and chicken _runme files then (load "../schemerunme/foo.scm").
+ - In chicken module, fix a few bugs invlolving dynamic casts.
+
+06/03/2004: wsfulton
+ Patch to fix wrapping of templated methods. ISO compliant compilers, like
+ Comeau and GCC-3.4.0, don't like the template specifier that SWIG was generating
+ when calling the method. This fix may break some non standard compliant compilers,
+ for example, Sun workshop compilers prior to version 6.2.p2. Patch submitted
+ by Bill Clarke.
+
+06/03/2004: wsfulton
+ [Java, C#] Undocumented special variable $imclassname removed.
+ New special variable $module is replaced by the module name, as specified
+ by %module or -module commandline option. $imclassname can be created from $module.
+
+06/03/2004: wsfulton
+ [C#] Same as for Java below. The new typemaps are named differently, namely,
+ csbody and csbody_derived. The deprecated typemaps are csgetcptr and
+ csptrconstructormodifiers.
+
+ *** POTENTIAL INCOMPATIBILITY FOR C# MODULE ***
+
+06/03/2004: wsfulton
+ [Java] Typemap changes for the Java proxy / typewrapper and enum classes. A new
+ typemap called javabody contains the essential support code for generation into the body
+ of these classes. There is also a new javabody_derived typemap which is used instead for
+ wrapped classes that have a wrapped base class. The code is basically, the getCPtr()
+ method and swigCPtr and swigCMemOwn member variables. These used to be hard coded
+ with no way to modify the code. The introduction of this typemap makes it possible for
+ the user to tailor nearly every aspect of the code generation.
+ The exception now is the code for director classes.
+
+ The javagetcptr and javaptrconstructormodifiers typemaps are deprecated and are
+ no longer used as the code that these generated can be put in the more flexible
+ javabody and javabody_derived typemaps.
+
+ *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
+
+ The following macros contributed by Scott Michel may help you upgrade if you have used
+ the javagetcptr typemap:
+
+ /* Utility macro for manipulating the Java body code method attributes */
+ %define SWIGJAVA_ATTRIBS(TYPENAME, CTOR_ATTRIB, GETCPTR_ATTRIB)
+ %typemap(javabody) TYPENAME %{
+ private long swigCPtr;
+ protected boolean swigCMemOwn;
+
+ CTOR_ATTRIB $javaclassname(long cPtr, boolean cMemoryOwn) {
+ swigCMemOwn = cMemoryOwn;
+ swigCPtr = cPtr;
+ }
+
+ GETCPTR_ATTRIB static long getCPtr($javaclassname obj) {
+ return (obj == null) ? 0 : obj.swigCPtr;
+ }
+ %}
+
+ %typemap(javabody_derived) TYPENAME %{
+ private long swigCPtr;
+
+ CTOR_ATTRIB $javaclassname(long cPtr, boolean cMemoryOwn) {
+ super($moduleJNI.SWIG$javaclassnameUpcast(cPtr), cMemoryOwn);
+ swigCPtr = cPtr;
+ }
+
+ GETCPTR_ATTRIB static long getCPtr($javaclassname obj) {
+ return (obj == null) ? 0 : obj.swigCPtr;
+ }
+ %}
+ %enddef
+
+ /* The default is protected getCPtr, protected constructor */
+ SWIGJAVA_ATTRIBS(SWIGTYPE, protected, protected)
+
+ /* Public getCPtr method, protected constructor */
+ %define PUBLIC_GETCPTR(TYPENAME)
+ SWIGJAVA_ATTRIBS(TYPENAME, protected, public)
+ %enddef
+
+ /* Public getCPtr method, public constructor */
+ %define PUBLIC_BODYMETHODS(TYPENAME)
+ SWIGJAVA_ATTRIBS(TYPENAME, public, public)
+ %enddef
+
+06/03/2004: wsfulton
+ [Java, C#] The contents of the class modifier typemaps and pragmas have changed.
+ They must now include the class type. Previously 'class' was hard coded.
+ This change enables flexibility into what type of class is generated,
+ for example the proxy class could be an interface instead of a class.
+
+ For Java this affects the javaclassmodifiers typemap and the jniclassclassmodifiers
+ and moduleclassmodifiers pragmas.
+
+ For C# this affects the csclassmodifiers typemap and the imclassclassmodifiers
+ and moduleclassmodifiers pragmas.
+
+ Unless you have overridden the default versions of these typemaps or pragmas, you
+ shouldn't be affected. However, if you have, upgrading is easy, for example
+
+ class Foo {};
+ %typemap(javaclassmodifiers) Foo "public final"
+
+ must now be:
+
+ class Foo {};
+ %typemap(javaclassmodifiers) Foo "public final class"
+
+
+ *** POTENTIAL INCOMPATIBILITY FOR C# MODULE ***
+ *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
+
+05/31/2004: wsfulton
+ Fix for C++ exception specifications that are references. Problem reported by
+ Oren Miller. Also improves the generated exception declarations in the
+ catch handler for pointers - a pointer is used instead of a reference to
+ a pointer. Added default throws typemaps for SWIGTYPE &, SWIGTYPE * and
+ SWIGTYPE[ANY] (Java and C#).
+
+05/31/2004: wsfulton
+ [Java, C#] Some minor typesafe enum improvements, including storing the name of
+ the enum item. The toSring() / ToString() methods are overridden to return this name.
+
+05/30/2004: wuzzeb (John Lenz)
+ [Chicken]
+ - Update how examples and the test suite are built.
+ - Symbol names are no longer converted to lower case
+ - Added union_runme.ss, which was copied and modified from the guile module
+
+05/26/2004: lballabio (Luigi Ballabio)
+ Committed on behalf of Marcelo (who still has problems with
+ the SourceForge CVS.)
+
+ Added Python typemaps for FILE* with (Python-only) test.
+
+5/24/2004: dancy
+
+ * Allegro CL module: Now using some macros (defined in
+ Lib/allegrocl/allegrocl.swg), swig-defconstant and swig-defun, for
+ defining constants and foreign functions. This makes the
+ generated file a bit neater.
+
+ Now strips a layer of parenthesis from constants.
+
+ Uses (* :void) instead of :foreign-address now.
+
+05/20/2004: wsfulton
+ Unnamed enum global variables are now supported in addition
+ to the recently added support for unnamed enum member variables.
+ For example:
+
+ struct Foo {
+ enum { enum1, enum2 } MemberInstance;
+ };
+ enum { enum3, enum4 } GlobalInstance;
+
+ The int typemaps are used for wrapping the get/set accessor methods.
+ If the sizeof an enum is not the same size as an int then setting the
+ variable will silently do nothing as the casts cannot be easily and portably
+ generated. If you need to solve this highly obscure situation, write
+ the assignment using the %exception feature.
+
+05/20/2004: wsfulton
+ [C#] C# enum wrapping mods. Similar to the Java module, enums can be wrapped using
+ one of 3 approaches:
+
+ 1) Proper C# enums - use %include "enums.swg"
+ 2) Typesafe enums - use %include "enumtypesafe.swg"
+ 3) Simple constant integers (original approach) - use %include "enumsimple.swg"
+
+ See each of these files for further details. Each of these files use typemaps
+ and a new feature to control the generated code. The feature is:
+
+ %csenum(wrapapproach);
+
+ where wrapapproach should be one of: "proper", "typesafe", "typeunsafe" or "simple".
+ [No implementation deemed necessary for type unsafe enums].
+
+ The default approach is proper C# enums. Anonymous enums are always wrapped by
+ constant integers.
+
+ *** POTENTIAL INCOMPATIBILITY FOR C# MODULE ***
+
+05/20/2004: wsfulton
+ [Java] Java enum support added. There are now 4 ways in which enums can be wrapped:
+
+ 1) Proper Java enums - use %include "enums.swg"
+ 2) Typesafe enums - use %include "enumtypesafe.swg"
+ 3) Type unsafe enums (constant integers) - use %include "enumtypeunsafe.swg"
+ 4) Simple constant integers (original approach) - use %include "enumsimple.swg"
+
+ See each of these files for further details. Each of these files use typemaps
+ and a new feature to control the generated code. The feature is:
+
+ %javaenum(wrapapproach);
+
+ where wrapapproach should be one of: "proper", "typesafe", "typeunsafe" or "simple".
+ The default typemaps will handle enums that may or may not have specified initial
+ values, for example ten is specified:
+
+ enum Numbers { zero, ten(10) };
+
+ However, the amount of generated Java code can be cut down, by modifying these typemaps
+ if none of the enums have initial values (proper Java enums and typesafe enums approach).
+
+ The default approach is typesafe enums. Anonymous enums are always wrapped by
+ constant integers.
+
+ *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
+
+05/11/2004: wsfulton
+ [Java, C#] Fix bug using %rename on enum items and when using
+ %javaconst(1) / %csconst(1)
+ For example, the following used to generate code that wouldn't compile:
+
+ %rename(Obj) Object;
+ enum Grammar { Subject, Object };
+
+04/28/2004: wsfulton
+ [Java, C#] Minor fixes when using combinations of the
+ javainterfaces, javabase, csinterfaces and csbase typemaps.
+
+05/18/2004: wsfulton
+ [Java] JVM link failure on some systems fixed when using std_vector.i.
+ Also adds default vector constructor for use from Java.
+
+05/17/2004: mkoeppe (Matthias Koeppe)
+
+ [Guile] New runtime functions SWIG_PointerAddress,
+ SWIG_PointerType, SWIG_IsPointerOfType, SWIG_IsPointer.
+
+ [Guile] In -scm mode, wrap several SWIG runtime functions
+ and export them into the module (Swig swigrun). The
+ runtime module is now built with "module" linkage.
+
+ [Guile] GOOPS proxy objects now also print the pointer
+ address of the C object.
+
+05/14/2004: lyle
+ Added Kou's patch for the Ruby %import directive so that modules
+ with "nested" names are handled properly. Consider an interface
+ file foo.i that has this %module declaration at its top:
+
+ %module "misc::text::foo"
+
+ Now consider another interface file spam.i that imports foo.i:
+
+ %import foo.i
+
+ Before this patch, this would result in the following code being
+ generated for spam_wrap.c:
+
+ rb_require("misc::text::foo");
+
+ With this patch, however, you'll get the correct path name
+ for the call to rb_require(), e.g.
+
+ rb_require("misc/text/foo");
+
+ See SourceForge Bug #928299.
+
+05/12/2004: wsfulton
+ Patch for emitting directors when %feature("director") specified
+ for a class with no virtual methods, but does have a virtual destructor.
+ Submitted by Kevin Smith.
+
+05/06/2004: mkoeppe (Matthias Koeppe)
+ New SWIG runtime function SWIG_TypePrettyName, which
+ returns an unmangled type name for a swig_type_info
+ object.
+
+ [Guile]: Use it for printing pointer objects.
+
+05/03/2004: dancy (Ahmon Dancy)
+
+ * Lib/allegrocl/allegrocl.swg: Updated comments about identifer
+ conversion.
+
+ * Sources/Modules/allegrocl.cxx: Register /dev/null for "header"
+ target. Also, disregard "const" qualifiers during type
+ conversion.
+
+
+05/02/2004: wuzzeb (John Lenz)
+ [Chicken] Fix bug 782468.
+ To fix this bug, the runtime code has been rewritten, and
+ pointers are now represented as a C_SWIG_POINTER_TYPE.
+
+ Chicken version > 1.40 is now required!
+
+ * Typemap incompatibility: typemaps no longer use chicken_words.
+ If a typemap needs some space, it should just call C_alloc
+
+ * argout typemaps no longer use the /* if ONE */ construct to
+ build an output list. A SWIG_APPEND_VALUE macro, exactly like
+ guile and mzscheme is now used.
+
+04/25/2004: mkoeppe (Matthias Koeppe)
+ [Guile] In the generated GOOPS code, don't create methods
+ that would not specialize any arguments; simply re-export
+ the primitive functions. (This is a performance
+ optimization which reduces load time and execution time.)
+
+ [Guile] In -gh mode, fix the "too many initializers" error
+ which was caused by an incompatible swig_type_info layout.
+
+ [Guile] The typemap for FILE * in ports.i now also accepts
+ a regular FILE * pointer object. Also a bug with Scheme
+ file ports that are open for input and output has been
+ fixed.
+
+04/25/2004: wsfulton
+ Change entry 03/21/2004 revoked. The change introduced another
+ inconsistency (reference typemaps beings used instead of
+ pointer typemaps for member variables as well as static
+ member variables and global variables for some languages,
+ but only for C++ and not C). This would break user's current
+ typemaps and introduce further inconsistencies. Alternative
+ solution required and being discussed.
+
+04/10/2004: mmatus (Marcelo Matus)
+
+ Added the -directors flag. This enables the director
+ mode for the interface and all the classes that
+ don't set the "feature:nodirector" explicitly.
+
+ You can use this in your module if you want to use the
+ director feature in all your classes, but it is most
+ intended for testing purposes, like:
+
+ make check-python-test-suite SWIG="../../../swig -directors"
+ make check-ruby-test-suite SWIG="../../../swig -directors"
+ make check-java-test-suite SWIG="../../../../swig -directors"
+
+ These commands will run the entire test-suite using
+ directors, and not only the specific 'directors_*'
+ cases. This should be done from time to time.
+
+04/10/2004: mmatus (Marcelo Matus)
+
+ [python] Added support for std::wstring and wchar_t,
+ for compiler and python versions that support them.
+
+ When needed, use
+
+ %inlcude std_string.i // 'char' strings
+ %inlcude std_wstring.i // 'wchar_t; strings
+
+
+04/10/2004: mmatus (Marcelo Matus)
+
+ [python] Fix the default behaviour (seg. fault) when an
+ inplace operator (+=,-=,...) was wrapped, as reported by
+ Lucriz (lucriz@sitilandia.it), when the most common
+ form was used:
+
+ A& A::operator+=(int i) { ...; return *this; }
+ ^^^^ ^^^^^^
+
+
+ ie, an object is returned and its contains the same 'this'
+ value than the input object, which is deleted after the
+ operation "a += b", leaving the result with no real
+ object, but a seg. fault.
+
+ To fix it, we needed to introduce a new feature and use an
+ old one:
+
+ %feature("self:disown") A::operator+=;
+ %feature("new") A::operator+=;
+
+ here, "self:disown" disable the ownership of the 'self'
+ or input object, and the "new" feature transfers the
+ ownership to the result object.
+
+ The feature/solution could also be used in other languages
+ that use gc and implement the inplace operators, or other
+ operators, in a similar way.
+
+ *** POTENTIAL INCOMPATIBILITY FOR Python MODULE ***
+
+ If you already are using the inplace operators in python,
+ and you implemented some kind of workaround to the problem
+ fixed here, it is possible you could end with 'free'
+ objects that never get deleted. If that is the case, and
+ you want to disable the current fix, use:
+
+ %feature("self:disown","") A::operator+=;
+ %feature("new","") A::operator+=;
+
+
+04/07/2004: cheetah (William Fulton)
+ [C#] C++ enums are no longer wrapped by integers, they are now wrapped by
+ C# enums. For Example, given C++:
+
+ enum AnEnum { foo, bar };
+ typedef AnEnum AnEnumeration;
+ void something(AnEnum e, AnEnumeration f);
+
+ The following is generated:
+
+ public enum AnEnum {
+ foo,
+ bar
+ }
+ public static void something(AnEnum e, AnEnum f) {...}
+
+ Note that a global enum like AnEnum above is generated into its own
+ file called AnEnum.cs. Enums defined within a C++ class are defined
+ within the C# proxy class. Some of the typemaps for modifying C# proxy
+ classes also work for enums. For example global enums can use
+
+ %typemap(csimports) to add in extra using statements.
+
+ Global enums and class enums can use
+
+ %typemap(csclassmodifiers) to make the enum private, public etc.
+ %typemap(csbase) to change the underlying enum type (enum base)
+
+ If we add this for the above example:
+
+ %typemap(csclassmodifiers) AnEnum "protected"
+ %typemap(csbase) AnEnum "long"
+
+ the following is generated:
+
+ protected enum AnEnum : long {
+ foo,
+ bar
+ }
+
+ *** POTENTIAL INCOMPATIBILITY FOR C# MODULE ***
+
+04/07/2004: cheetah (William Fulton)
+ Seg fault fix for empty enums, like
+ enum Foo {};
+
+03/21/2004: mmatus
+ [Note: this change revoked on 04/25/2004]
+ [Python] Makes the following 'var' cases more uniform:
+
+ std::string ga;
+
+ struct A {
+ static std::string sa;
+ std::string ma;
+ };
+
+
+ now the three variables (ga, sa, ma) can be assigned as:
+
+
+ cvar.ga = "hello";
+ A.sa = "hello";
+ a.ma = "hello";
+
+ ie, now 'ma' will also use a std::string typemap 'in' if
+ defined, before it was only accepting a 'p_std_string'
+ pointer. Note, however, that 'ma' will not use the
+ 'varin/varout' typemaps (that probably could be more
+ natural), but it will pick up the 'in' typemap for const
+ std::string& (which is easier).
+
+ The changes in cwrap.c and lang.cxx will probably fix the
+ behaviour in other languages that do not overload the
+ membervarHandler method "too much".
+
+
+03/21/2004: mmatus
+ [Python] Disabling the default instantiations like:
+
+ %template() std::pair<int,int>;
+
+ for all the primitive types and STL containers/classes.
+ They are expensive, specially for pair and map, and the
+ previous behaviour also requires the user to perform
+ manual instantiations. Still, if the speed difference is
+ not important, it can be re-enabled by defining the macro
+ SWIG_STD_DEFAULT_INSTANTIATION (see std_common.i).
+
+ Also, normalizing the INPUT/OUTPUT/INOUT typemaps. Now
+ they use the same conversors than the rest of the
+ typemaps, and you can use them for std::pair, std::string
+ and all the other STL types, like in:
+
+ void p_inoutd(std::pair<double, double> *INOUT);
+
+ Added the attribute.i and implicit.i files with macros to
+ transform functions pairs like 'set_x'/'get_x'
+ (or 'T& x()'/'const T& x() const') into an attribute,
+ and allowing the use of implicit constructors in typemaps
+ (see the files for more details).
+
+03/21/2004: mkoeppe
+ [Guile] Fix the documentation strings of functions with
+ anonymous arguments.
+
+03/18/2004: mmatus
+ [Python] More general std_string.i interface.
+ Now you can wrap it using
+
+ %template(string) std::basic_string<char>;
+
+ and use the std::string as a base class:
+
+ struct A : std::string {
+ };
+
+ But more important, swig will recognize
+ both std::basic_string<char> and std::string as
+ the same type.
+
+03/16/2004: mmatus
+ Previously added, but not mentioned before:
+
+ - friend declaration support, swig now emits a global
+ function in the same class scope.
+
+ - ref/unref features: to mix ref counting C++ classes
+ and native script ref counting mechanisms (like in python).
+
+ Use it like:
+
+ %feature("ref") RCObj "$this->ref();"
+ %feature("unref") RCObj "$this->unref();"
+
+ And the class RCObj, and all the derived ones, will
+ perform the right ref/unref calls when a new pointer
+ is returned to the target language, or when the target
+ language attempts to delete the object.
+
+ See the refcount.i file in the test-suite for more
+ details.
+
+
+03/16/2004: mmatus
+ [Python] Using the new %fragment support, major rewrote
+ of the python swig library, including:
+
+ - Almost automatic template/typemap instantiation for
+ the STL components. For example, now you can write:
+
+ %template(vector_i) std::vector<int>;
+
+ and a specialized vector_i class is emitted with all
+ the needed typemaps. No need to use the old
+ 'specialize_vector' macros.
+
+ Note you can also define
+
+ %template(matrix_i) std::vector<std::vector<int> >;
+ %template(vector_pii) std::vector<std::pair<int,int> >;
+
+ - The empty template instantiation
+
+ %template() std::vector<int>;
+
+ defines the vector typemaps, but no proxy class. For all the
+ fundamental types, the empty template instantiation are
+ defined, so, you can say
+
+ %include std_vector
+
+ int func(const std::vector<int>& a);
+
+ where the proper typemap is applied to 'a', but no
+ std::vector<int> proxy is generated.
+
+
+ - All the STL containers present a more uniform behavior and
+ more complete interface declaration. The following are
+ now supported:
+
+ std::vector<T>
+ std::list<T>
+ std::deque<T>
+ std::set<T>
+ std::multiset<T>
+ std::map<T>
+ std::multimap<T>
+
+ not a container, but also supported:
+
+ std::pair<T,U>
+
+ also, more typemaps are defined for all of them,
+ including varin, varout, typecheck, etc.
+
+ - Initial attempt to implement the STL containers
+ considering allocators, ie:
+
+ std::vector<T,A>
+
+ it is partially working, but it is just a workaround
+ while swig improves its template type support.
+
+
+ Please test with your particular setup. It seems to be
+ working with g++ 3.2.2, g++ 2.96, Intel icc and SGI CC
+ compilers, plus python 1.5.2, 2.0 and 2.3, but since
+ we are using templates, there is a chance you can find
+ some problems when using with an old C++ compiler.
+
+03/16/2004: mmatus
+
+ - Allowing the empty %template directive, such as
+
+ %template() std::vector<int>;
+
+ to process the class "typedef"s and "typemap"s. Before
+ only the internal "typedef"s were processed.
+
+ This makes possible to emit the default in/out
+ typemaps without the need of wrapping an specialized
+ vector instance.
+
+ - Adding the preprocessor extension #@ which mangles the
+ following macro argument, like in:
+
+ #define macro(X) #@X
+ macro(int) -> int
+ macro(std::string) -> std_s_s_string
+
+ - Fragments can now be "type specialized", as the typemaps. The
+ syntax is as follows
+
+ %fragment("name","header")
+ { /* a type independent fragment (old syntax) */ }
+ %fragment("name" {Type}, "header")
+ { /* the fragment is type dependent */}
+
+ Now fragments can also be used inside templates:
+
+ template <class T>
+ struct A {
+ %fragment("incode"{A<T>},"header") {
+ /* 'incode' specialized fragment */
+ }
+
+ %typemap(in,fragment="incode"{A<T>}) {
+ /*
+ here we use the 'type specialized'
+ fragment "incode"{A<T>}
+ */
+ }
+ };
+
+
+03/11/2004: cheetah (William Fulton)
+ [Java] Director bug which meant that some virtual functions overridden in
+ Java were not being called on some operating systems. Bug reported and fixed
+ by Robert de Vries and Scott Michel.
+
+03/02/2004: mkoeppe (Matthias Koeppe)
+ [Guile] In -scm mode, don't forget to check the type of string arguments.
+
+02/24/2004: cheetah (William Fulton)
+ [C#] New commandline option -namespace <name>. This allows one to specify
+ a C# namespace into which all C# classes are generated.
+
+02/23/2004: mkoeppe (Matthias Koeppe)
+ [MzScheme] Use FUNC_NAME rather than a bogus typemap variable for signalling
+ errors. Call scheme_wrong_type with a zero-based argument number.
+ Reported by Ondrej Pacovsky, SF #902621.
+
+ [Guile] Define FUNC_NAME also in the dispatch wrapper for overloaded
+ functions. Patch by John Lenz, SF #896255.
+
+02/22/2004: mkoeppe (Matthias Koeppe)
+ [Guile] In -scm mode, don't try to invoke a null destructor function.
+
+02/20/2004: cheetah (William Fulton)
+ Fixes so that the SWIG source will compile using the Digital Mars Compiler
+ (formerly Symantic compiler) on Windows. Submitted by Scott Michel.
+
+02/13/2004: mkoeppe (Matthias Koeppe)
+ [MzScheme] New command-line argument -noinit. Use it for building
+ the runtime library, where we don't want to define the functions
+ scheme_initialize etc. Reported by Tim Brown, SF #891754.
+
+ [MzScheme] Don't produce invalid C code when invoked with the
+ -declaremodule option. Reported by Tim Brown, SF #891108.
+
+ [Guile] Build the runtime library with passive linkage, to rename
+ the SWIG_init function uniquely.
+
+02/12/2004: cheetah (William Fulton)
+ [Java, C#] Patch submitted by Bill Hoffman which prevents SWIG from crashing
+ when a file for the typewrapper class cannot be opened.
+
+02/11/2004: cheetah (William Fulton)
+ [Java, C#] Overloading changes:
+ - Methods which are overloaded in const only no longer generate Java
+ code that won't compile - the first method parsed is used and a
+ warning is displayed. Note that this behaviour is slightly different
+ to the scripting languages which always uses the non-const method.
+ - Warning messages 509 and 512 replaced by new warning number 516, which
+ is more relevant to these statically typed languages as the overloaded
+ methods aren't 'shadowed', they are ignored.
+
+01/23/2004: mkoeppe (Matthias Koeppe)
+ [Guile] Replace the "known_classes" hash table by a node
+ attribute. Methods of classes in C++ namespaces now get
+ the proper specializer in the GOOPS declaration.
+ Reported by rm@mh-freiburg.de.
+
+01/23/2004: mkoeppe (Matthias Koeppe)
+ [Guile] Uniquify the argument names in GOOPS shadow method
+ declarations. Reported by rm@mh-freiburg.de.
+
+01/21/2004: sunshine (Eric Sunshine)
+ Revived the NextStep port of SWIG.
+
+ Fixed fatal problem in DohStrstr() caused by difference in strstr()
+ implementation which made %apply become entirely dysfunctional. On
+ NextStep, strstr("foo","") evaluates to NULL; whereas, on modern
+ platforms, it evaluates to "foo". %apply relies extensively upon
+ strstr("foo","") evaluating to non-NULL, therefore it failed
+ catastrophically when faced with NextStep's strstr().
+
+ Added `bool' check to configure.in since NextStep's C++ compiler
+ does not supply this type. swig.h now fakes up `bool' if needed.
+
+ Worked around NextStep C++ compiler bug in which C++ code is
+ disallowed inside extern "C" functions. This problem affected all
+ language modules, since they publish hook functions of the form:
+ extern "C" Language *swig_foo(void) { return new FOO(); }
+ Fixed by creating a C++ wrapper:
+ static Language *new_swig_foo() { return new FOO(); }
+ extern "C" Language *swig_foo(void) { return new_swig_foo(); }
+
+ Ensured that Swig_copy_string() is used in place of strdup() since
+ NextStep does not supply strdup().
+
+ Fixed detection of Ruby library name and location in configure.in.
+ Problem 1: Assumed that library always resided in Ruby's "archdir",
+ which was correct for Ruby 1.6.x, but which is incorrect for Ruby
+ 1.8.x, in which case the library normally resides in Ruby's
+ "libdir". Problem 2: Assumed that the library could always be
+ linked via "-l"+RUBY_INSTALL_NAME (where RUBY_INSTALL_NAME
+ typically is "ruby"), however this failed for platforms, such as
+ NextStep, which do not support shared libraries. In this case, the
+ static library name in 1.8.x is libruby-static.a, thus
+ -lruby-static is required. The new logic works correctly for
+ static and shared libraries for 1.6.x and 1.8.x.
+
+ Fixed detection of Perl CFLAGS in configure.in for NextStep.
+ Detection code extracted CFLAGS from Perl's %Config hash but
+ neglected to add a newline to the value before passing it through
+ `sed'. NextStep's ancient `sed' discards input which is not
+ terminated with a newline, thus Perl CFLAGS always evaluated to the
+ empty string.
+
+01/16/2004: cheetah (William Fulton)
+ Tidy up in the exception handling code that is generated when
+ C++ exception specifications are wrapped with the throws typemap.
+ This redundant code is no longer generated:
+
+ catch(...) {
+ throw;
+ }
+
+01/12/2004: wsfulton on behalf of mmatus (marcelo matus)
+ if a method uses %exception and the method requires the use
+ of the throws typemap, the code in a throws typemap will be
+ generated inside the try body. For example:
+
+ %exception method {
+ try {
+ // method action
+ $action
+ } catch (int i) {
+ // method int catch handler
+ } catch (...) {
+ // method generic catch handler
+ }
+ }
+ %typemap(throws) Except %{
+ // throws typemap Except catch handler
+ %}
+
+ %inline %{
+ class Except {};
+ void method(int i) throw (Except);
+
+ Will generate:
+
+ {
+ try {
+ // method action
+ try {
+ method(arg1);
+ }
+ catch(Except &_e) {
+ // throws typemap Except catch handler
+
+ }
+
+ } catch (int i) {
+ // method int catch handler
+ } catch (...) {
+ // method generic catch handler
+ }
+ }
+
+
+ As can be seen, the inner try catch block is for the throws typemaps.
+ Previously, this was reversed so that the inner try catch block
+ was the %exception code. In the example above, it would have been
+ impossible to catch Except as the catch all (...) would catch the
+ exception instead.
+
+Version 1.3.21 (January 11, 2004)
+=================================
+
+01/10/2004: cheetah (William Fulton)
+ The output format for both warnings and errors can be selected for
+ integration with your favourite IDE/editor. Editors and IDEs can usually
+ parse error messages and if in the appropriate format will easily take you
+ directly to the source of the error. The standard format is used by
+ default except on Windows where the Microsoft format is used by default.
+ These can be overridden using command line options, for example:
+
+ $ swig -python -Fstandard example.i
+ example.i:4: Syntax error in input.
+ $ swig -python -Fmicrosoft example.i
+ example.i(4): Syntax error in input.
+
+01/09/2004: beazley
+ Fixed [ 871909 ] simple namespace problem.
+ This was a problem using anonymous structures in a namespace.
+ For example:
+
+ namespace ns {
+ typedef struct {
+ int n;
+ } S;
+ };
+
+ Reported by Josh Cherry.
+
+01/09/2004: beazley
+ Fixed some broken Perl examples.
+
+12/28/2003: cheetah (William Fulton)
+ [Java and C#] Fixes for wrapping covariant (polymorphic) return types.
+ For example:
+
+ struct Base {
+ virtual ~Base();
+ virtual Base* copy() const = 0;
+ };
+ struct Derived : Base {
+ virtual Derived* copy() const;
+ };
+
+ The Derived::copy proxy method returns Base not Derived. A warning is issued
+ about this. Previously the pointer used by the proxy class was incorrectly
+ treated as a Base* instead of a Derived*.
+
+12/18/2003: cheetah (William Fulton)
+ Fix so that Windows paths are displayed correctly when reporting errors.
+ An error previously would have been shown something like:
+
+ .?xample.i:14: Syntax error in input.
+
+ instead of:
+
+ .\example.i:14: Syntax error in input.
+
+
+Version 1.3.20 (December 17, 2003)
+==================================
+
+12/17/2003: beazley
+ Last minute modifications. Perl5 module now generates shadow classes
+ by default like all of the other modules. PHP4 wrappers no longer
+ include "config.h".
+
+12/14/2003: beazley
+ Weakened warning message related to constructor names so that an
+ unusual nested-class wrapping technique would work again (apparently
+ it worked in some older SWIG releases). For example:
+
+ class Scope {
+ class ClassA;
+ class ClassB;
+ };
+ class Scope::ClassA {
+ ...
+ };
+ class Scope::ClassB {
+ ...
+ }
+
+ Note: There is still some odd interaction with the SWIG symbol
+ table/type system that will need to be looked at in a future release.
+ Reported by Gustavo Niemeyer.
+
+
+12/11/2003: cheetah (William Fulton)
+ [Java] Protected class methods are wrapped as protected Java methods
+ when using the dirprot director feature. This can be changed using
+ %javamethodmodifiers to something else should the need arise, for
+ example, private or package access.
+
+12/11/2003: cheetah (William Fulton)
+ [Java, C#]
+ %javamethodmodifiers (Java) and %csmethodmodifiers (C#) operate slightly
+ differently. Previously this feature had to be present to set the method
+ modifiers. Now it is only used if it exists for the method being wrapped.
+ The default is "public" as previous however, when wrapping protected
+ director methods it is "protected". This change will not affect existing
+ use of the %javamethodmodifiers or %csmethodmodifiers.
+
+12/11/2003: mmatus (Marcelo Matus)
+
+ This fix some recurring reports about keywords not been
+ properly identified and warned, and it solves the problem
+ of how to add a test file to the test-suite such that it
+ doesn't use any keyword of all the supported languages
+ (and doing it without compiling the test for all the
+ supported languages, thing that is not always possible,
+ and without requiring you to know all the supported
+ language keywords, thing that is always impossible).
+
+ So these are the changes globally speaking:
+
+ - Uniform the definition of the keyword warnings through
+ the supported languages: all the languages has now a
+ separate file that defines the keywords or bad names:
+
+ python/pythonkw.swg
+ chicken/chickenkw.swg
+ ....
+
+ - Added keyword list for most of the languages that didn't
+ have one (using the new separated file).
+
+ - Added the "All keywords" warning support: -Wallkw option.
+
+ This option allows you to include all the known keywords
+ for all the supported languages, and can be used as:
+
+ swig -Wallkw ....
+
+ This will help to the process of adding a test-suite
+ file that can be compiled in all the swig supported
+ languages, and it will be also helpful for users who
+ want to create multi-language libraries.
+
+ And these are the detailed changes (mostly file addition):
+
+ - For the languages that already have some sort of keyword
+ warning list, move it to an external languagekw.swg
+ file, ie:
+
+ move keywords from python.swg -> pythonkw.swg
+ move keywords from chicken.swg -> chickenkw.swg
+ move keywords from tcl8.swg -> tclkw.swg
+
+ and re-include languagekw.swg from language.swg.
+
+ - For the language that didn't have a keyword list, and
+ for the ones that I could find a list, add the
+ languagekw.swg file, ie:
+
+ csharp/csharpkw.swg
+ java/javakw.swg
+ php4/phpkw.swg
+ pike/pikekw.swg
+ ruby/rubykw.swg
+
+
+ also add a line in language.swg to include
+ languagekw.swg, but now it is commented!!!, like in
+ java.swg:
+
+ /* java keywords */
+ /* please test and activate */
+ //%include "javakw.swg"
+
+ ie, there will be no change in how swig runs normally
+ until the language maintainer test and uncomment that
+ line.
+
+ So, please check each languagekw.swg file (I left the
+ link to the keyword list source for checking), and after
+ testing, uncomment the %include line.
+
+ - Added the file allkw.swg, which includes all the
+ languagekw.swg files.
+
+ For the languages that has no languagekw.swg file right
+ now, and if they need one, add the file into the
+ language directory, and add the corresponding include
+ line into the allkw.swg file.
+
+ - Added the -Wallkw that includes the allkw.swg file.
+ Note that the old -lallkw.swg option couldn't be used
+ since it include the file after it would be needed.
+
+
+ Hopefully, the -Wallkw option will be added to the default
+ rules in the related test-suite Makefiles, so, when
+ creating a new test, or adding a new swig library file
+ (like _std_deque.i), swig will warn you if you are using a
+ bad name, considering all the language where it needs to
+ run.
+
+ Right now you can test it by using:
+
+ make check-python-test-suite SWIG="swig -Wallkw"
+
+ or using your favorite target language, it doesn't matter.
+
+ And yes, there are several examples that are using
+ reserved keywords, specially from csharp.
+
+ *** Remember ****: the new keyword warning lists are not
+ included by default in any of language that before didn't
+ have one. To enable the keyword warnings as the default
+ behavior, the inclusion of the languagekw.swg file has to
+ be uncommented at each language.swg file.
+
+ So, all the language maintainers, please check the
+ keywords list.
+
+ Also, you can add buit-in names, and not only keywords, like
+ 'True/False' in python. Remember that you can be more
+ specific and refer only to member names, like *::configure
+ or *::cget (see an example in the tcl8/tcl8kw.swg file),
+ or only global names, like ::range (see an example in the
+ python/pythonkw.swg file.
+
+ Just to be consistent, use the following codes:
+
+ - Use code 314 for keyword and/or fatal bad names.
+ - Use code 321 for buit-in and/or not fatal bad names.
+
+ so, they can't be disabled/enabled independently (see
+ python/pyhtonkw.swg for examples).
+
+ **** And don't add any new test file without checking it
+ with the -Wallkw option!! (that includes me) *****.
+
+
+12/11/2003: cheetah (William Fulton)
+ SF bug #854634
+ Added support for accepting the Unix directory separator '/' on
+ Windows and the Mac in addition to the native one ( '\' on
+ Windows). This can be used in %import, %include and commandline
+ options taking a path, for example -I. On Cygwin, both the Windows
+ and Unix directory separator can now be used (was '/' only).
+
+12/10/2003: mmatus (Marcelo Matus)
+
+ [python] Implementing the runtime "reprotected" director
+ members, if you have:
+
+ %feature("director") B;
+
+ class Bar {
+ public:
+ virtual ~Bar();
+ virtual int hello() { return do_hello();)
+
+ protected:
+ virtual int do_hi() {return 0;}
+ virtual int do_hello() {return 0;}
+ };
+
+ then, at the python side
+
+ import my_module
+
+ class Foo(my_module.Bar):
+ def do_hello(self):
+ return 1
+ pass
+
+ b = Bar() # Pure C++ Director class
+ f = Foo() # C++ Director + python methods
+
+ b.hello() # Ok, and it calls C++ Bar::do_hello()
+ f.hello() # Ok, and it calls Python Foo::do_hello()
+
+ b.do_hi() # RuntimeError, do_hi() is protected!!
+ f.do_hi() # RuntimeError, do_hi() is protected!!
+
+ b.do_hello() # RuntimeError, do_hello() is protected!!
+ f.do_hello() # Ok, since it its redefined in python.
+
+ Here Bar.do_hello is always protected, but Foo.do_hello
+ is "public", because it is redefined in python. Before,
+ all the 'do_hello' methods were public.
+
+ This seems to be a good compromise between C++ and python
+ philosophies, ie, all the director protected methods keep
+ protected at the user side (C++ way) until they are
+ redefined (python way, were all defined methods are always
+ public). And this is not only a good compromise, it also
+ seems to be the only way to do it :).
+
+ Now ruby has native director protected members, and python
+ pure runtime support. I guess these are the two possible
+ extreme cases. And hopefully, they could be used as
+ templates to modify the other languages that support
+ directors, so they can "reprotect" the protected director
+ members at the target language side.
+
+ This finished the director protected support for the
+ python language. Ocalm will need to add the
+ "reprotection" later.
+
+12/10/2003: mmatus (Marcelo Matus)
+
+ The following case (reported by Lyle Johnson) was fixed:
+
+ %rename(x) Foo::y();
+
+ class Foo {
+ public:
+ void y();
+
+ protected:
+ int x;
+ };
+
+ swig warned that the symbol 'x' was already defined, and
+ the renaming fails. 'x' was not emitted, since it is
+ protected, but it was kept in the symbol table with too
+ much information.
+
+ Now swig works for all the cases (plain, director and
+ dirprot) again. This was fixed by allowing the parser.y to
+ decide much closer what to do with 'x'. Before all the
+ discarding or generation was resolved at the lang.cxx
+ stage. Also the changes in parser.y to implement the
+ director protected mode are now much more encapsulated, and
+ they get disabled if the mode is not enabled. Before the
+ deactivation was done at the generation stage (lang.cxx).
+
+ By the other hand, if the director mode is enabled, and
+ %rename is done, reusing a protected member name, there is
+ a pathological case:
+
+ %rename(x) Foo::y();
+
+ class Foo : public A {
+ public:
+ void y();
+
+ protected:
+ int x; /* works */
+ static int x; /* works */
+ static void x(); /* works */
+ typedef void x(); /* works */
+
+ virtual void x(); /* always fails, as it should, since
+ Foo::x() will be emitted in the
+ director */
+
+ void x(); /* always fails, but sometimes it shouldn't,
+ since the Foo::x() will not be emitted if
+ it is not virtual */
+
+ };
+
+ The last case is not always right because at the parser.py
+ stage it is not possible to decide if the protected member
+ Foo::x() could or not conflict with the renamed Foo::y(),
+ since Foo::x() could be virtual by inheritance.
+
+ I guess this just an intrinsic limitation, and no much can
+ be done about it without resorting into larger changes to
+ postpone, under certain conditions, the multiply symbol
+ detection (lang.cxx stage).
+
+ So, by now, it is just considered a well known "feature" in
+ the director protected mode. The good news is that it seems
+ to be a rare case, and it can be avoided by the user by
+ hiding 'x' before renaming 'y':
+
+ %rename(_x) Foo::x();
+ %rename(x) Foo::y();
+
+
+12/08/2003: mmatus (Marcelo Matus)
+ The virtual method detections now properly
+ treats the following cases:
+
+ namespace foo { typedef int Int; }
+ struct A {};
+ typedef A B;
+
+ struct Foo {
+ virtual ~Foo() {}
+
+ virtual Foo* cloner() = 0;
+ virtual int get_value() = 0;
+ virtual A* get_class() = 0;
+ virtual void just_do_it() = 0;
+ };
+
+ struct Bar : Foo
+ {
+ Bar* cloner();
+ foo::Int get_value();
+ B* get_class();
+ void just_do_it();
+ };
+
+ All the Foo and Bar methods are virtual. A new attribute
+ "virtual:type" record the base polymorphic type. In the
+ previous cases we have:
+
+ type : Bar virtual:type : Foo
+ type : foo::Int virtual:type : int
+ type : B virtual:type : A
+ type : void virtual:type : void
+
+ This attribute is useful in languages (java+directors)
+ that could have problems redefining Bar* Bar::cloner().
+
+ If you never had code like the above, you will see no
+ effects. But if you have some code like that, you
+ will see some effects since some methods that
+ before were not properly treated as virtual,
+ will start to act like that. This could enlarge
+ your director classes.
+
+
+12/08/2003: mmatus (Marcelo Matus)
+ The director protected member support (dirprot)
+ is disabled by default.
+
+ It can be enable by using '-dirprot' or by adding
+ the option to the module declaration, like:
+
+ %module(directors="1",dirprot="1") my_module
+
+ This module option was added to properly compile the
+ director_protected.i and director_nested.i examples.
+
+ The feature has been tested with python[2.2,2.3]
+ and ruby[1.6.7], both at compilation and runtime, and
+ java[j2sdk1.4.1_01], but only at compilation (my java
+ installation doesn't run any of the director examples,
+ olds nor news).
+
+ Please test for ocaml and java.
+
+ The errors reported by William and Scott were fixed,
+ except for a warning about SWIG_JavaThrowExecption()
+ multiply defined. I can't reproduce this error with my
+ examples. We will wait for Scott to send us a minimal
+ case.
+
+
+12/07/2003: mmatus (Marcelo Matus)
+ The director protected member support has been
+ completly moved out from python.cxx, and now
+ resides in the common lang.cxx, emit.cxx and
+ allocate.cxx files.
+
+ This means it should work for all the other languages
+ that currently support directors, ie, python, java, ocalm
+ and ruby.
+
+ The change has been tested with python (compilation+runtime)
+ and java (just compilation).
+
+ Please add runtime tests for the missing languages
+ and test it.
+
+ The '-nodirprot' option was moved to the principal main,
+ and can be used from all the languages.
+
+12/07/2003: cheetah (William Fulton)
+ [Java] Fixed and improved error checking of STRING_OUT typemaps in
+ various.i.
+
+12/04/2003: mmatus (Marcelo Matus)
+
+ - Now the virtual members with no explicit declarator
+ are properly identified:
+
+ struct A {
+ virtual int f() = 0;
+ };
+
+ struct B : A {
+ int f();
+ };
+
+ Here, B::f() is virtual, and the director and the
+ virtual elimination mechanism now recognize that.
+
+ - [C#] This fix also fixes the problem where 'override' was not being
+ used on any overridden virtual method, so for struct B above,
+ this C# code is generated:
+
+ public class B : A {
+ ...
+ public override int f() {
+ ...
+ }
+ ...
+ }
+
+ - Initial support for protected virtual methods. They are now
+ properly emitted when using with director (python only by
+ now).
+
+ %feature("director") A;
+ struct A {
+ protected:
+ virtual int f1() = 0;
+ };
+
+ %feature("director") B;
+ struct B : A{
+ protected:
+ int f1();
+ virtual f2();
+ };
+
+ This can be dissabled by using the '-nodirprot' option.
+
+ - The feature 'nodirector' is working now at the top level,
+ so, it must work for all the languages:
+
+ %feature("director") A;
+ %feature("nodirector") A::f2;
+
+ struct A {
+ virtual int f1();
+ virtual int f2();
+ };
+
+ in this case, only 'f1' is exported to the director class.
+
+ - Added director support for const TYPE& arguments (python).
+
+12/02/2003: cheetah (William Fulton)
+ [Java] Fix for INOUT and OUTPUT typemaps in typemaps.i for when the JNI type
+ is bigger than the C type. For example, unsigned long (32bits on most systems)
+ is mapped to jlong (64bits). Returned value was incorrect. Bug reported by
+ Brian Hawley.
+
+12/02/2003: cheetah (William Fulton)
+ [C# and Java] Better fix for entry dated 05/11/2003. Fixes the following
+ typemaps:
+
+ Java: javabase, javainterfaces, javaimports, javaclassmodifiers,
+ javaptrconstructormodifiers, javafinalize, javagetcptr & javacode.
+ C#: csbase, csinterfaces, csimports, csclassmodifiers,
+ csptrconstructormodifiers, csfinalize, csgetcptr & cscode.
+
+ It also fixes bug in using arrays of C structs with arrays_java.i
+ as reported Scott Michel.
+
+12/02/2003: beazley
+ [Perl] Fixed [ 852119 ] recursive inheritance in output .pm, perl5.
+ Reported by William Dowling.
+
+12/02/2003: beazley
+ [Tcl] Fixed [ 755382 ] calling func(const vector<T>& p) evaluates p[0] in interp.
+ The Tcl type checker was improperly handling the interpreter result when
+ type violations were supposed to be ignored.
+ Reported by Flaviu Popp-Nowak.
+
+11/30/2003: cheetah (William Fulton)
+ Fixed [ 545058 ] configure's --with-tclincl has no effect
+
+11/30/2003: cheetah (William Fulton)
+ [Java] Fixed [ 766409 ] missing symbol SWIG_JavaThrowException during module load
+ SWIGs internal functions are all static as there is no need for different SWIG
+ generated modules to share any code at runtime.
+
+11/30/2003: beazley
+ [Tcl] Added support for C++ pointers to members.
+
+11/28/2003: cheetah (William Fulton)
+ Fixed [ 848335 ] Directors: #include wrapper .h file - was incorrectly
+ adding a directory to the generated #include "foo_wrap.h" statement
+ in some situations.
+
+11/28/2003: cheetah (William Fulton)
+ [Java] Fixed [ 849064 ] JAVA : Access modifier for derived class wrong.
+ The delete() method is always public now. It used to be protected whenever a
+ destructor was non public. An UnsupportedOperationException runtime
+ exception is thrown instead of making delete() protected now.
+
+11/28/2003: beazley
+ [Perl5] Added support for C++ pointers to members.
+
+11/28/2003: beazley
+ Fixed [ 850151 ] PYVERSION with python2.3 in configure of SWIG 1.3.19 (Maybe).
+
+11/28/2003: beazley
+ Fixed [ 850666 ] #include extra line added.
+ This should fix some problems with getting correct line numbers on
+ error messages.
+
+11/26/2003: beazley
+ Fixed another one of Marcelo's evil template bugs (infinite
+ recursion). [ 849504 ] template and typedef -> inf. recursion.
+
+11/26/2003: beazley
+ Fixed parsing problem with declarations like this:
+
+ int *x = &somearray[0];
+
+11/25/2003: beazley
+ Fixed [ 756552 ] missing default argument class scope with "|".
+ This is really only a band-aid fix for use of class-enums in
+ expressions. For example:
+
+ class A {
+ public:
+ enum Flag { flag1 = 0x1, flag2 = 0x2 };
+ void foo(int x = flag1 | flag2);
+ };
+
+ Note: there are still some (more subtle) cases that are broken,
+ but hard to fix due to an issue with template expansion. Will
+ address later.
+ Reported by Dmitry Mironov.
+
+11/25/2003: beazley
+ Incorporated [ 840878 ] support for %inline { ... } (PATCH).
+ This adds support for the following:
+
+ %inline {
+ ... some code ...
+ }
+
+ The difference between this and %inline %{ ... %} is that the
+ enclosed text is processed by the SWIG preprocessor. This
+ allows special macros and other processing to be used in
+ conjunction with %inline.
+ Contributed by Salvador Fandino Garcia.
+
+11/25/2003: beazley
+ Fixed [ 836903 ] C++ inconsistency (with void arguments).
+ SWIG was having difficulty with f() vs f(void) in C++ programs.
+ For instance:
+
+ class A {
+ public:
+ virtual void f(void) = 0;
+ };
+
+ class B {
+ public:
+ virtual void f(); // Not matched to f(void) correctly
+ };
+
+ The parser now normalizes all declarations of the form f(void)
+ in C++ classes to f(). This should fix a variety of subtle
+ problems with inheritance, optimizations, overloading, etc.
+ Problem reported by Partho Bhowmick.
+
+11/25/2003: beazley
+ [Perl5] Incorporated [ 841074 ] better croaking (PATCH). This fixes some problems
+ with strings and provides some new error functions.
+ Contributed by Salvador Fandino Garcia.
+
+11/25/2003: beazley
+ Fixed [ 791835 ] Default argument with cast: txt = (char *)"txt" syntax Error.
+ The parser should now accept things like this:
+
+ void foo(char *s = (char *) "Hello");
+
+ Problem reported by Claudius Schnorr.
+
+11/24/2003: beazley
+ [Tcl] Fixed problem with cross module linking. Previously modules referred
+ to base classes through a global variable. Now, the module looks up base
+ classes through the type system itself---avoiding the need to link to a global
+ like before. Caveat: modules with base classes must be loaded before
+ modules with derived classes.
+
+11/24/2003: mkoeppe (Matthias Koeppe)
+ [Guile] In -scm mode, use () to represent null pointers,
+ as it is done in -gh mode.
+
+11/23/2003: mkoeppe (Matthias Koeppe)
+ Add a generated script "preinst-swig", which can be used
+ to invoke SWIG before it has been installed. It arranges
+ that the runtime libraries from the source directory are
+ used.
+
+11/23/2003: mkoeppe (Matthias Koeppe)
+ [Guile] In -gh mode, don't forget to call SWIG_Guile_Init.
+ Add a SWIG_contract_assert macro.
+
+11/23/2003: mkoeppe (Matthias Koeppe)
+ [MzScheme] Update the configure check for the dynext object to work
+ with MzScheme 205.
+
+11/20/2003: mmatus
+ Fixed the include/import error reported by Kerim Borchaev,
+ where two files with names like
+
+ 'dir1/hello.i'
+ 'dir2/hello.i'
+
+ can not be include at the same time. Swig was including
+ just the first one, assuming the second one was not a
+ different one, since it was checking/keeping just the
+ basename 'hello.i'.
+
+11/19/2003: beazley
+ Changes to the SWIG runtime library support.
+ - The -c command line option has been renamed to -noruntime
+ - New command line option: -runtime. When supplied, this
+ inserts the symbol SWIG_GLOBAL into the wrapper code. This,
+ in turn, makes all of the runtime support functions globally
+ visible.
+ - New library file: swigrun.i. Used to create modules
+ for runtime library (if needed).
+
+11/18/2003: cheetah (William Fulton)
+ 'make srcrpm' rpmbuild fix - patch from Joe Cooper
+
+11/18/2003: mkoeppe (Matthias Koeppe)
+ [Guile] Change meaning of configure option --with-guile to
+ the name of the Guile executable. The new option --with-guile-prefix
+ can be used to specify the tree where Guile is
+ installed. (However, usually it suffices to use the
+ single option --with-guile-config.)
+ When running the run tests test-suite, make sure to use the
+ version of Guile that SWIG was configured for.
+
+11/17/2003: mkoeppe (Matthias Koeppe)
+ [Guile] Improvements to object-ownership management in
+ "-scm" mode. (They do not apply to the default "-gh" mode.)
+ * Renamed the smob type that indicates that the object can
+ be garbage collected from "collected swig" to "collectable
+ swig", which is more precise.
+ * Export the destructor functions again. It is now
+ allowed to explicitly call destructors, even for
+ garbage-collected pointer objects. A pointer object
+ that has been passed to a destructor is marked in a
+ special way using a new smob type, "destroyed swig".
+ (This helps avoid nasty memory bugs, where references to
+ dead C objects are still held in Scheme. Moreover, the
+ garbage collector will not try to free a destroyed
+ object once more.)
+ * Destructor-like functions can also mark their arguments
+ as destroyed by applying the typemap SWIGTYPE *DESTROYED.
+ (It calls the function SWIG_Guile_MarkPointerDestroyed.)
+ * Functions that "consume" their objects (or that "own"
+ them after the call) can mark their arguments as
+ not garbage collectable. This can be done by applying
+ the typemap SWIGTYPE *CONSUMED. (It calls the function
+ SWIG_Guile_MarkPointerNoncollectable.)
+ * The macro TYPEMAP_POINTER_INPUT_OUTPUT from library
+ pointer-in-out.i creates additional typemaps
+ PTRTYPE *INPUT_CONSUMED, PTRTYPE *INPUT_DESTROYED.
+ They mark the passed pointer object likewise.
+ The typemap PTRTYPE *OUTPUT creates a garbage-collectable
+ pointer object, like %newobject does for a returned
+ pointer. Use the new typemap PTRTYPE *OUTPUT_NONCOLLECTABLE
+ to create a pointer object that will not be garbage collected.
+
+11/17/2003: mkoeppe (Matthias Koeppe)
+ [Guile] Handle $input in "freearg" typemaps.
+ Never qualify GOOPS slot names with the class name.
+ Handle optional arguments properly in the GOOPS methods.
+
+11/16/2003: cheetah (William Fulton)
+ Fixes for installation to work with the upcoming Automake-1.8.
+ mkinstalldirs was being used by a non-Automake makefile.
+ mkinstalldirs is being phased out and so was not being
+ created by Automake. install-sh used instead.
+
+11/16/2003: cheetah (William Fulton)
+ [Java] Numerous director improvements, tweaks and bug fixes since
+ the initial implementation have been contributed by Scott Michel.
+
+11/12/2003: beazley
+ [Python] When %feature("shadow") is used to add code to shadow
+ classes, the special variable $action expands to the name of the
+ underlying wrapper function that would have been called normally.
+
+11/12/2003: beazley
+ [Python] When generating proxy class code, SWIG emits a few
+ default methods for __repr__() and other Python special
+ methods. Some of these methods are emitted after all of the
+ contents of a class. However, this makes it hard to override
+ the methods using %pythoncode and some other directives that
+ allow code to be inserted into a class. These special methods
+ are now emitted into the code *before* all of the other methods.
+ Suggested by Eric Jones.
+
+11/11/2003: beazley
+ Preprocessor enhancement. For include statements like this:
+
+ %include "foo/bar.i"
+
+ the directory "foo" is now added to the search path while
+ processing the contents of bar.i. Thus, if bar.i includes other
+ files in the same directory, they will be found. Previously,
+ you would have to add additional directories using -I to make this
+ work correctly. Note: the C preprocessor seems to behave in
+ an identical manner on many (most? all?) systems.
+ Suggested by Kerim Borchaev.
+
+11/11/2003: beazley
+ Configuration changes to make SWIG work on Mac OSX 10.3.x (Panther).
+ Tested with Python, Tcl, Perl, and Ruby---all of which seem to work.
+
+11/08/2003: cheetah (William Fulton)
+ [Java] Fixed the typemaps in various.i which were mostly broken.
+ char **STRING_IN and char **STRING_RET typemaps replaced with
+ STRING_ARRAY. float *FLOAT_ARRAY_RETURN typemap removed.
+
+11/08/2003: beazley
+ [Tcl] Tcl module now emits a safe module initialization function by
+ default. It can be removed by running 'swig -nosafe'.
+
+11/04/2003: mkoeppe (Matthias Koeppe)
+ [Guile] Only use the SCM_ API when the function
+ `scm_slot_exists_p' exists (needed for GOOPS support).
+ This function was renamed during the Guile 1.5 series
+ from `scm_slots_exists_p'.
+ Report the right runtime library when invoked with
+ -scm -ldflags.
+
+11/03/2003: mkoeppe (Matthias Koeppe)
+ [Chicken] Fix #782052. The --with-chickencfg configure
+ option (and others) were not accepted.
+
+11/02/2003: mkoeppe (Matthias Koeppe)
+ [Guile] Merge new set of GOOPS changes by John Lenz.
+ GOOPS objects are now manipulated directly by the C code.
+ Some fixes to typemap-GOOPS interaction.
+
+11/02/2003: mkoeppe (Matthias Koeppe)
+ [Guile] Remove the file argument to -scmstub and -goops.
+ The Scheme files are now always called MODULE.scm or
+ MODULE-primitive.scm, where MODULE is the module name and
+ "primitive" can be changed by the -primsuffix option.
+ The Scheme files are now placed in the directory given by
+ the -outdir option, or the current directory.
+ (Patch by John Lenz, slightly modified.)
+
+ *** INCOMPATIBILITY [Guile] ***
+
+11/02/2003: mkoeppe (Matthias Koeppe)
+ Unify the pointer-conversion runtime API. The standard
+ functions are:
+ * SWIG_NewPointerObj (POINTER, TYPE, FLAGS)
+ -- Create an scripting object that represents a typed
+ pointer. FLAGS are language specific.
+ * SWIG_ConvertPtr (INPUT, RESULT, TYPE, FLAGS)
+ -- Get a pointer from the scripting object INPUT and
+ store it in the place RESULT. When a type mismatch
+ occurs, return nonzero.
+ * SWIG_MustGetPtr (INPUT, TYPE, ARGNUM, FLAGS)
+ -- Get a pointer from the scripting object INPUT and
+ return it. When a type mismatch occurs, throw an
+ exception. If ARGNUM > 0, report it as the
+ argument number that has the type mismatch.
+ [Guile]: No changes.
+ [MzScheme]: No changes.
+ [Perl]: Add the function SWIG_NewPointerObj.
+ The function SWIG_MakePtr is kept.
+ The function SWIG_MustGetPtr is currently not
+ supported.
+ [Python]: Add the function SWIG_MustGetPtr.
+ [Ruby]: Add the function SWIG_MustGetPtr.
+ [Tcl]: Remove the "interp" argument of
+ SWIG_NewInstanceObj, SWIG_ConvertPtr,
+ SWIG_ConvertPacked, and SWIG_ConvertPtrFromString.
+ The function SWIG_MustGetPtr is currently
+ not supported.
+ No changes to Pike because its pointer conversion code did
+ not look complete. No changes to PHP4, because I did not
+ understand its runtime code. No changes to Chicken
+ because major changes are expected soon anyway. No
+ changes to Java, OCaml, C# because they do not seem to
+ have a pointer-conversion runtime API.
+
+ *** INCOMPATIBILITY [Tcl] ***
+
+11/02/2003: mkoeppe (Matthias Koeppe)
+ [Perl5, PHP4, Pike, Python, Ruby, Tcl]: Use the
+ preprocessor to rename external functions of the SWIG
+ runtime API to follow the naming convention
+ SWIG_<language>_<function>. This should allow linking
+ more than one interpreter into a program.
+
+10/31/2003: cheetah (William Fulton)
+ [C#] Fix since introducing the exception and std::string delegates.
+ The fix overcomes linker errors when using more than one SWIG module.
+ Problem reported by Andreas Schörk.
+
+10/31/2003: beazley
+ Incorporated patch: [ 823302 ] Incr Tcl support.
+ Contributed by Alexey Dyachenko.
+ Note: needs documentation.
+
+10/31/2003: beazley
+ Incorporated patch: [ 829325 ] new Python Module options and features.
+ Robin Dunn writes:
+
+ This patch makes a number of changes to the SWIG python module.
+
+ 1. Add -apply option, and change the default code
+ output to use the foo(*args, **kw) calling syntax
+ instead of using apply(). If the -apply option is
+ given then code is generated as before. This is very
+ similar to Patch #737281 but the new -modern option
+ makes the second half of that patch unnecessary so it
+ is not included here.
+
+ 2. Add -new_repr option. This is the same as my Patch
+ #797002 which I will mark as closed since it is no
+ longer needed. When this new option is used then the
+ __repr__ methods that are generated for proxy classes
+ will be more informative and give details about the
+ python class and the C++ class.
+
+ 3. Add %feature("addtofunc"). It allows you to insert
+ one or more lines of code inside the shadow method or
+ function that is already generated, instead of
+ replacing the whole thing like %feature("shadow") does.
+ For __init__ it goes at the end, for __del__ it goes
+ at the begining and for all others the code generated
+ is expanded out to be like
+
+ def Bar(*args, **kwargs):
+ val = _module.Foo_Bar(*args, **kwargs)
+ return val
+
+ and the "addtofunc" code is inserted just before the
+ return statement. If the feature is not used for a
+ particular method or function then the shorter code is
+ generated just like before.
+
+ 4. A little bit of refactoring to make implementing
+ addtofunc a little easier.
+
+ 5. Added a -modern command-line flag that will cause
+ SWIG to omit the cruft in the proxy modules that allows
+ it to work with versions of Python prior to 2.2. The
+ result is a simpler, cleaner and faster python proxy
+ module, but one that requires Python 2.2 or greater.
+
+10/31/2003: beazley
+ Incorporated patch: [ 829319 ] XML module tweaks.
+ This adds a new command line option -xmllite that
+ greatly reduces the amount of emitted XML code by
+ eliminating some fields mostly used in SWIG's
+ internal processing. Contributed by Robin Dunn.
+
+10/31/2003: beazley
+ Incorporated patch: [ 829317 ] Adds DohSplitLines function.
+ Contributed by Robin Dunn.
+
+10/29/2003: beazley
+ Fixed [ 827907 ] argout objects not being wrapped properly (PATH).
+ Patch contributed by Salvador Fandiño García.
+
+10/29/2003: beazley
+ Fixed [ 826996 ] perl type checking ignores perl subclasses.
+ This enhancement makes it so wrapped classes and structs can
+ be subclassed in Perl and used normally.
+ Patch contributed by Salvador Fandiño García.
+
+10/16/2003: cheetah (William Fulton)
+ [C#] IntPtr marshalled with a void* instead of int in C function
+ declarations. The casts thus look more conventional, for example:
+
+ // old
+ DllExport double SWIGSTDCALL CSharp_get_Shape_x(int jarg1) {
+ ...
+ Shape *arg1 = (Shape *) 0 ;
+ arg1 = *(Shape **)&jarg1;
+ ...
+ }
+ // new
+ DllExport double SWIGSTDCALL CSharp_get_Shape_x(void * jarg1) {
+ ...
+ Shape *arg1 = (Shape *) 0 ;
+ arg1 = (Shape *)jarg1;
+ ...
+ }
+
+
+10/14/2003: beazley
+ Fixed a subtle problem with overloaded methods and smart pointers.
+ If a class has overloaded methods like this:
+
+ class Foo {
+ public:
+ int bar(int x);
+ static int bar(int x, int y);
+ };
+
+ and the class is used as a smart pointer:
+
+ class FooPtr {
+ public:
+ Foo *operator->();
+ };
+
+ The SWIG would try to expose the static member Foo::bar
+ through FooPtr---resulting bogus wrapper code and a compiler
+ error.
+
+ Due to the way in which overloading is handled, it is
+ extremely difficult to eliminate the static method in
+ this case. Therefore, it is still exposed. However,
+ the generated code now compiles and works.
+
+10/05/2003: mkoeppe (Matthias Koeppe)
+ [Guile, MzScheme, Chicken]: Remove symbol clashes between
+ the runtime libraries by renaming all extern common.swg
+ functions with the preprocessor.
+
+10/05/2003: mkoeppe (Matthias Koeppe)
+ [Guile] Added basic GOOPS support, contributed by John Lenz.
+ See the documentation for details.
+
+ *** NEW FEATURE ***
+
+10/04/2003: mkoeppe (Matthias Koeppe)
+ [Guile] New option, -only-setters, which disables
+ traditional getter and setter procedures for structure slots.
+
+10/03/2003: mkoeppe (Matthias Koeppe)
+ [Guile] Added run test for reference_global_vars by John Lenz.
+
+09/30/2003: beazley
+ Partial solution to [ 792180 ] C++ smart-pointer/namespace mixup revisited.
+ The problem is not easy to fix (at least it doesn't seem so), but is
+ related to the instantiation of qualified templates inside of other
+ namespaces. SWIG now generates an error message in this case rather
+ than generating broken wrappers.
+
+09/30/2003: beazley
+ Fixed [ 800012 ] ENTER macro from CORE/scope.h clashes with libc search.h.
+ Reported by Britton Leo Kerin.
+
+09/30/2003: beazley
+ Fixed [ 811518 ] Casting ints to doubles (w/ solution?)
+ Addresses a problem with overloading in the Perl module.
+ Reported by Gerald Dalley.
+
+09/28/2003: mkoeppe
+ [Guile with -scm option] Fix typo in generated code for
+ procedures-with-setters. Reported by John Lenz.
+
+09/26/2003: beazley
+ Fixed [ 812528 ] externs not correct when throw is in signature.
+ Reported by Joseph Winston.
+
+09/23/2003: cheetah (William Fulton)
+ SWIG was generating a number of symbols that didn't comply with
+ the ISO C/C++ standard, in particular ISO/IEC 14882:1998(E) 17.4.3.1.2
+ where double underscores are forbidden as well as symbols starting with
+ an underscore followed by an upper case letter. Most of these have
+ been rooted out. See new section added to internals.html development
+ manual 'Symbol Naming Guidelines for Generated C/C++ Code'.
+
+09/23/2003: cheetah (William Fulton)
+ Director typemap name changes:
+ inv => directorin
+ outv => directorout
+ argoutv => directorargout
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+09/19/2003: mrose (Mark Rose)
+ [Python] Director constructors now default to __disown = 0,
+ which is the intended behavior and fixes the director_finalizer
+ test case under python.
+
+09/12/2003: cheetah (William Fulton)
+ [C#] - Typemaps added for std::string and const std::string &.
+ - New delegate for creating a C# string given a char *. It
+ can be used by calling SWIG_csharp_string_callback as shown
+ in the std::string 'out' typemap. Useful if the return type is
+ mapped to a C# string and the calling function is responsible
+ for cleaning up memory as the C# garbage collector doesn't
+ free the memory created in C/C++ and then returned as a C# string.
+ - The exception delegates have moved into an inner class in the
+ intermediate class, thereby freeing up the static constructor.
+
+09/11/2003: beazley
+ (Internals)
+ Major refactoring of iteration over lists and hashes. The
+ DOH library now uses iterators. They work like this:
+
+ List *l = (some list);
+
+ Iterator i;
+ for (i = First(l); i.item; i = Next(i)) {
+ // i.item contains the actual list item.
+ // i.item is NULL at end of list
+ ...
+ }
+
+ Hash *h = (some hash);
+ Iterator j;
+ for (j = First(h); j.item; j = Next(j)) {
+ // j.item contains hash table item
+ // j.key contains hash table key
+ // Both j.item and j.key are NULL at end
+ ...
+ }
+
+ The old iteration functions Firstitem(), Nextitem(), Firstkey(),
+ and Nextkey() are gone.
+
+ The new iterators are simpler, result in better memory use,
+ and may be faster. Also, there are no longer any problems
+ iterating over the same list/hash in multiple places at
+ the same time. For example, this is fine:
+
+ Iterator i,j;
+ for (i = First(l); i.item; i = Next(i)) {
+ for (j = First(l); j.item; j = Next(j)) {
+ ...
+ }
+ }
+
+ (This never worked in previous versions).
+ *** POTENTIAL INCOMPATIBILITY ***. This will probably break
+ third party extensions to SWIG (or give them further encouragement
+ to join the SWIG CVS-tree :-).
+
+09/10/2003: mkoeppe (Matthias Koeppe)
+ [Guile] Fix memory leaks in the "list-vector.i" typemaps.
+
+09/09/2003: mkoeppe (Matthias Koeppe)
+ [Chicken] Use C_mk_bool rather than C_mkbool. This fixes
+ the wrapping of boolean values for Chicken 1.10 and newer.
+ Reported by Dave <hundo@yahoo.com> / Felix Winkelmann
+ <felix@proxima-mt.de>.
+
+09/05/2003: cheetah (William Fulton)
+ [Java] Directors implemented for Java. In summary this is a big new feature
+ which supports upcalls from C++ to Java. Code is generated to support C++
+ callbacks to call into Java and true polymorphic behaviour for Java classes
+ derived from C++ classes. See java.html for details. Contributed by
+ Scott Michel.
+
+09/05/2003: Tiger
+ Created contract example directory at /SWIG/Examples/contract
+ Added simple contract examples (simple_c & simple_cxx)
+ Modified contract module's output format
+
+ *** NEW FEATURE ***
+
+09/01/2003: cheetah (William Fulton)
+ Test-suite build improvements:
+ - Multiple build directories working for the test suite, so it is now
+ possible to run configure in multiple subdirectories and run the test
+ suite in each of these sub directories.
+ - 'make distclean' fixed so it doesn't bomb out on the Examples directory
+ when using multiple subdiretory builds. Required the following directories
+ to be moved:
+ Examples/GIFPlot/Perl -> Examples/GIFPlot/Perl5
+ Examples/GIFPlot/Php -> Examples/GIFPlot/Php4
+ These new directories used to be symbolic links to the old directory.
+ Also the Examples/test-suite/Perl symbolic link has been removed.
+ - Running the test-suite, other than from the root directory, say
+ in Examples/test-suite/python will now display all the code being
+ executed.
+ - The following 3 C# compilers are detected during configure and work with
+ the test-suite: Mono, Portable.NET and Microsoft.
+
+09/01/2003: Tiger
+ Added inheritance support for design by contract feature.
+
+09/01/2003: beazley
+ Fixed [ 794914 ] Wrong types in template specialization.
+ SWIG was not handling arguments correctly in template
+ partial specialization. For example,
+
+ template<class T> class Foo<T *> {
+ public:
+ T *blah();
+ };
+
+ %template(FooInt) Foo<int *>;
+
+ in this class, the return type of blah was set to
+ 'int **', but it should really be 'int *'. This has been
+ fixed, but it will affect all prior uses of partial
+ specialization.
+
+09/01/2003: beazley
+ Fixed [ 786394 ] Patch for generated perl code does not compile under RedHat9.
+ Reported by Scott Finneran.
+
+09/01/2003: beazley
+ Fixed [ 791579 ] (unsigned) long long handled incorrectly (Tcl).
+ This was an error in the Tcl typemaps.i file.
+ Reported by Kjell Wooding.
+
+09/01/2003: beazley
+ Fixed [ 797573 ] no way to rename classes coming from C structures.
+ This problem relates to renaming of anonymous structures with a
+ typedef. For example:
+
+ %rename(Bar) Foo;
+ typedef struct {
+ ...
+ } Foo;
+
+ Reported by Britton Leo Kerin.
+
+09/01/2003: beazley
+ Fixed [ 797576 ] -help seems to imply that only tcl-specific options exist.
+ Added a comment to alert user to other options.
+ Reported by Britton Leo Kerin.
+
+09/01/2003: beazley
+ Fixed [ 798205 ] Segfault in SWIG_ConvertPtr.
+ Reported by Prabhu Ramachandran.
+
+08/30/2003: mrose (Mark Rose)
+ Modified the director typemaps in python/std_complex.i to use the
+ new-style macro and conversion functions, which eliminated some
+ redundant code. Fixed a few bugs in these typemaps as well, although
+ more testing is needed.
+
+08/29/2003: mrose (Mark Rose)
+ Completed initial support for wrapping abstract classes with directors.
+ Constructor wrappers will be generated for abstract classes that have
+ directors, and instances of the director classes will be created regardless
+ of whether the proxy class has been subclassed in the target language.
+ No checks are made during construction to ensure that all pure virtual
+ methods are implemented in the target language. Instead, calls to
+ unimplemented methods will throw SWIG_DIRECTOR_PURE_VIRTUAL_EXCEPTION
+ exceptions in C++.
+
+ Integrated Prabhu Ramachandran's typemap patches, which provide director
+ typemap support for enums and std::size_t, and fix a couple bugs in the
+ director std::vector<> typemaps.
+
+08/29/2003: cheetah (William Fulton)
+ [C#] Implemented exception handling for throwing C# exceptions from C/C++ code.
+ A few delegate functions are available for calling which then throw the C#
+ exception. Use the SWIG_CSharpThrowException function from C/C++ typemaps.
+ See the generated wrapper code or csharphead.swg for all available exceptions.
+ Example:
+
+ SWIG_CSharpThrowException(SWIG_CSharpException, "exception description");
+
+ The 'throws' typemaps are also now implemented, so code is automatically
+ generated to convert any C++ exception into a C# System.Exception when the C++
+ method declares an exception specification such as:
+
+ int foo() throw(Bar);
+
+ Also any parameters that are references to a C++ class or a class passed by value
+ and are passed as a C# null will now throw a C# NullReferenceException.
+
+08/29/2003: cheetah (William Fulton)
+ [C#] Fix to match the calling convention of all pinvoke methods so that they
+ match the calling convention used by default in the C# 'static extern' declarations
+ (__stdcall is used on Windows).
+
+08/19/2003: cheetah (William Fulton)
+ [Java] Reworked std::string typemaps. Fixes a number of string in std namespace
+ problems. For example %template vector<string>. The templated class' get method
+ wasn't returning a Java String, but a SWIGTYPE_p_string. Reported
+ by Zach Baum.
+
+08/15/2003: beazley
+ Fixed [ 763522 ] 1.3.19 segfault in SwigType_add_pointer/DohInsertitem.
+ Related to problem with unnamed class handling in Perl module.
+
+08/15/2003: beazley
+ Fixed [ 763563 ] Missing indication of optional arguments.
+ Tcl module. Reported by Krzysztof Kozminski.
+
+08/15/2003: beazley
+ Fixed [ 787432 ] long param handled as int. Tcl module
+ now uses Tcl_GetLongFromObj to convert integer values.
+
+08/11/2003: beazley
+ Fixed [ 775989 ] numeric template parameters. There were
+ some errors in template expansion related to the use of
+ arrays where the array dimension was a template parameter.
+ It should work now. Reported by Bryan Green.
+
+08/10/2003: mrose (Mark Rose)
+ Added a director typemap (outv) for return by value and cleaned up up a few
+ of the commented director typemaps.
+
+08/10/2003: mrose (Mark Rose)
+ Fixed constructor generation for director classes to ignore private
+ constructors. Protected constructors are also ignored for now, pending
+ a solution to the problem of wrapping classes that only define protected
+ constructors.
+
+08/07/2003: cheetah (William Fulton)
+ New commandline option -outdir <dir> to specify where the language specific
+ files are to be generated. This is useful for target languages like Python,
+ Java etc which generate proxy files in the appropriate language.
+ This option does not apply to the C/C++ wrapper file.
+
+08/07/2003: cheetah (William Fulton)
+ On Windows the generated files (other than the _wrap.c or _wrap.cxx files)
+ were sometimes incorrectly being generated into the current directory unless
+ the input file used the Unix path separator. The Windows path separator
+ should now be used. Bug reported by Robert Davies.
+
+08/07/2003: beazley
+ Added array variable set typemap to Perl module.
+
+08/07/2003: beazley
+ Fixed [ 775677 ] Array init causes codegen bug..
+
+08/07/2003: beazley
+ Fixed [ 779062 ] Class"\n"::foo not supported. SWIG
+ should now correctly handle whitespace in between
+ namespace qualifiers. For example "A :: Foo :: Bar".
+
+07/31/2003: cheetah (William Fulton)
+ Fixes for parameters which are classes that are passed by value and have
+ a default value. A copy constructor for SwigValueWrapper is required
+ (SF #780056). Also fixed memory leak in these circumstances. These mods
+ also fix SF #780054.
+
+07/28/2003: beazley
+ Improved run-time error message for pointers in Python module.
+ Contributed by Zooko.
+
+07/10/2003: ballabio (Luigi Ballabio)
+ [Almost all languages] Wrappers for std::pair added.
+ Typemaps for Python, Ruby, Guile and MzScheme.
+
+07/01/2003: mkoeppe (Matthias Koeppe)
+ [Chicken] Handle the case of more than one argout typemap
+ per function.
+
+06/29/2003: cheetah (William Fulton)
+ [Java, C#] SF #670949 request. The destructor wrapper function name is now
+ configurable. A new attribute called methodname in the
+ javadestruct/javadestruct_derived (Java) or csdestruct/csdestruct_derived (C#)
+ typemaps specifies the method name. For example in Java the destructor is
+ wrapped by default with the delete method:
+
+ %typemap(javadestruct, methodname="delete") SWIGTYPE {...}
+
+06/27/2003: cheetah (William Fulton)
+ [Java, C#] The throws attribute for adding exception classes to the throws
+ clause also now works with the following typemaps:
+ newfree
+ javain, javaout (Java)
+ csin, csout (C#)
+
+ For example, the 'AnException' will be added to the throws clause in the
+ proxy function:
+
+ %typemap(javaout, throws="AnException") int {
+ int returnValue=$jnicall;
+ if (returnValue==0) throw new AnException("Value must not be zero");
+ return returnValue;
+ }
+
+06/25/2003: mrose (Mark Rose)
+ [Python] Director typemap marshalling checks for null pointers when
+ walking the parameter list instead of relying soley on the parameter
+ count. Cures a segfault that occured for multiple argument inv typemaps.
+ Someone with more Swig experience should probably review this code.
+
+06/24/2003: mkoeppe (Matthias Koeppe)
+ [Chicken] Don't emit calls to "C_check_for_interrupt",
+ which may result in an endless loop. Patch by felix@proxima-mt.de.
+
+06/20/2003: cheetah (William Fulton)
+ [C#] Finalizers now use destructor syntax as the override which was used in
+ the Finalize method is not in the ECMA standards, spotted by the MS compiler.
+
+06/10/2003: cheetah (William Fulton)
+ [C#] A number of changes have been made to remove the Java naming
+ that was used in the C# module.
+
+ Typemap name changes:
+ jni -> ctype
+ jtype -> imtype
+ jstype -> cstype
+ javain -> csin
+ javaout -> csout
+ javainterfaces -> csinterfaces
+ javabase -> csbase
+ javaclassmodifiers -> csclassmodifiers
+ javacode -> cscode
+ javaimports -> csimports
+ javaptrconstructormodifiers -> csptrconstructormodifiers
+ javagetcptr -> csgetcptr
+ javafinalize -> csfinalize
+
+ Feature name changes:
+ javaconst -> csconst
+ javamethodmodifiers -> csmethodmodifiers
+
+ Pragma changes:
+ pragma(java) -> pragma(csharp)
+ jniclassbase -> imclassbase
+ jniclassclassmodifiers -> imclassclassmodifiers
+ jniclasscode -> imclasscode
+ jniclassimports -> imclassimports
+ jniclassinterfaces -> imclassinterfaces
+
+ Special variable name changes:
+ $javaclassname -> $csclassname
+ $javainput -> $csinput
+ $jnicall -> $imcall
+
+ This will break SWIG interface files that use these typemaps, features
+ and pragmas. Please update your code or use macros for backwards
+ compatibility.
+
+ *** POTENTIAL INCOMPATIBILITY FOR C# MODULE ***
+
+06/10/2003: mkoeppe (Matthias Koeppe)
+ [MzScheme] Applied MzScheme module updates contributed by
+ John Lenz <jelenz@students.wisc.edu>.
+
+ - Updated mzscheme to use SWIG's common runtime type
+ system from common.swg.
+
+ - The Lib/mzscheme directory has been reorganized to
+ standardize names across the language modules:
+ mzscheme.i was moved to mzscheme.swg, mzscheme.swg and
+ mzschemedec.swg have been removed, mzrun.swg (which
+ contains the runtime code) has been added.
+
+ - The swig_proxy structure was renamed to swig_mz_proxy.
+ swig_mz_proxy now contains a pointer to a swig_type_info
+ structure.
+
+ - Added varin and varout typemaps for SWIGTYPE [] and
+ SWIGTYPE &.
+
+ - Garbage collection by calling scheme_add_finalizer() has
+ been added.
+
+ *** NEW FEATURE [MzScheme] ***
+
+06/10/2003: cheetah (William Fulton)
+ [Java] New typemaps: javadestruct and javadestruct_derived
+ for the C++ destructor wrapper. The javadestruct version gets used by
+ classes at the top of an inheritance chain and the javadestruct_derived
+ version gets used by other classes.
+
+ [C#] cildispose and cildisposeoverride typemaps replaced by
+ csdestruct and csdestruct_derived typemaps. The delete()
+ method has been removed and its functionality put into these
+ typemaps designed for the Dispose() method.
+
+ - New typemaps csinterfaces and csinterfaces_derived replace
+ the javainterfaces typemap. Also fixes the peculiarity of all classes
+ in an inheritance chain individually deriving from the IDisposable
+ interface.
+
+ - New typemap csfinalize for finalizers. C++ destructors are now called
+ by garbage collector during finalization. Problem reported by
+ Andreas Schörk.
+
+06/10/2003: Tiger
+ Modified contract code for error message output.
+ Contract code can now print out simple error message.
+ Modified contract code to prepare for inheritance
+
+06/03/2003: mkoeppe
+ [Guile] Applied Guile module updates contributed by
+ John Lenz <jelenz@students.wisc.edu>.
+
+ - SWIG currently uses Guile's gh_ API, which is marked as
+ deprecated in Guile 1.6 and will be removed in Guile
+ 1.9. This change introduces a command-line flag "-scm"
+ which causes SWIG to generate wrappers that use Guile's
+ SCM API instead; this requires Guile >= 1.6.
+
+ - The Lib/guile directory has been reorganized to
+ standardize names across language modules: guiledec.swg
+ and guile.swg have been moved into guile_gh_run.swg,
+ guile.i has been moved to guile_gh.swg, guile_scm.swg
+ and guile_scm_run.swg which contain the SCM API stuff
+ have been added
+
+ - ghinterface.i, which contains the defines from the gh_
+ functions to the scm_functions has been added
+
+ - The API for dealing with pointer objects is now
+ SWIG_ConvertPtr, SWIG_MustGetPtr, SWIG_NewPointerObj.
+
+ - Added varin and varout typemaps for SWIGTYPE [] and SWIGTYPE &
+
+ - Garbage collection has been added.
+
+ *** NEW FEATURE [Guile] ***
+
+06/01/2003: cheetah (William Fulton)
+ Dimensionless arrays such as
+
+ int foo[] = {1, 2};
+ extern int bar[];
+
+ produce a warning that the variable is read-only. Depending on the target
+ language, this used to cause compile errors or generate a setter that
+ generated a runtime error. A setter cannot be automatically generated
+ because the array size cannot be determined by SWIG. A varin, globalin
+ or memberin typemap (depending on the target language) must be written
+ by the user.
+
+05/29/2003: beazley
+ Refinement to default typemap matching and arrays. When an
+ array is declared like this:
+
+ int foo[4];
+
+ The default typemap now resolves to
+
+ SWIGTYPE [ANY]
+
+ If no match is found for that, it then resolves to
+
+ SWIGTYPE []
+
+ If no array dimension is specified in the original declaration,
+ the SWIGTYPE [] is used right away.
+
+ Note: This change has been made to resolve problems related to
+ arrays with and without dimensions. For example, sometimes SWIG
+ was generating setter functions for array variables with no dimensions
+ (an error). Likewise, SWIG sometimes made arrays with dimensions
+ read-only (also an error). This fixes the arrays_global test
+ problem.
+
+05/28/2003: beazley
+ Fixed subtle type handling bug with references and pointers.
+ If you had functions like this:
+
+ typedef Foo Bar;
+
+ Foo *func1();
+ void func2(Bar &x);
+
+ Then func2() wouldn't accept objects returned by func1()
+ because of a type error. It should work now.
+ Reported by Brian Yang.
+
+05/21/2003: cheetah (William Fulton)
+ Fixes to some of the Visual C++ example project files which would not
+ work with spaces in the paths held in the environment variables used to
+ point to the target language's library / include directory.
+ SF bug #740769
+
+05/21/2003: songyanf (Tiger)
+ Added -contracts option.
+ First try of the idea of "Wrap by Contract":
+ build up realiable cross-language module by wrapping with SWIG.
+ Implemented basic assertion
+ (preassertion & postassertion & invariant)
+ for simple C/C++ functions.
+
+ Current format of contracts are:
+ %contract class_name :: func_name (paras...) {
+ require:
+ boolean exprs;
+ exprs;
+ ensure:
+ boolean expr;
+ exprs;
+ invariant:
+ boolean expr;
+ exprs;
+ }
+
+ *** NEW FEATURE ***
+
+05/19/2003: cheetah (William Fulton)
+ Build tweaks. There were a few preprocessor definitions which were
+ specified in the Makefile for passing on the commandline when compiling.
+ These are now all defined in swigconfig.h. Autoconf doesn't normally
+ allow installation directories to be defined in this config header file,
+ but an autoconf archive macro enables this. This macro along with future
+ autoconf macros are going to be put in the Tools/config directory.
+
+ 'swig -version' now reports the target build platform.
+
+05/11/2003: cheetah (William Fulton)
+ [C# and Java] Fix to the following typemaps:
+
+ javabase, javainterfaces, javaimports, javaclassmodifiers,
+ javaptrconstructormodifiers, javafinalize, javagetcptr & javacode.
+
+ These are the typemaps for modifying/generating proxy classes.
+ Previously the typemaps would use the proxy class name and not the
+ C++ type, which was inconsistent with all other typemaps.
+
+ In most circumstances the proxy class name and the C++ class name/type
+ is the same except for classes in namespace, templated classes etc. so
+ this shouldn't affect most cases.
+
+ *** POTENTIAL INCOMPATIBILITY FOR JAVA and C# MODULES ***
+
+05/09/2003: cheetah (William Fulton)
+ Visual C++ Project files have been added so that the runtime libraries
+ can be built on Windows (for Tcl, Perl, Python and Ruby).
+
+05/01/2003: beazley
+ Fixed problem with return by value, const, and private constructors.
+ For example:
+
+ class B {
+ private:
+ B();
+ public:
+ B(const B&);
+ };
+
+ class A {
+ ...
+ const B returnB() const;
+ ...
+ };
+
+ Problem and patch suggestion reported by Bill Hoffman.
+
+04/29/2003: cheetah (William Fulton)
+ Build changes:
+ - Single autoconf invocation - autoconf in the Tools directory has gone.
+
+ - Libtool bootstrapped when running autogen.sh. This requires anyone
+ using the cvs version of SWIG to have libtool installed on their
+ machine. Suggest version 1.4.2 or higher, preferably the latest - 1.5.
+
+ - Automake is now used to build the runtime libraries in conjunction
+ with libtool.
+
+ - Runtime libraries are now successfully built as DLLs on Cygwin.
+
+ - Skipping languages is no longer just determined in the top level
+ makefile but in configure.in. This info is used for building
+ the runtime libraries and for running the examples and test-suite.
+
+ - These changes have fixed multiple build directory builds, that is
+ building from directories other than the top level directory.
+ Installation from multiple build directories also working. An initial
+ configure in the top level directory is no longer needed as described
+ in 04/02/2003 entry. A 'make distclean' will be needed before building
+ in a directory other than the top level directory if the autotools
+ have been run from this top level directory at some point, but
+ autoconf will tell you this. Note that 'make check' only works from
+ the top level directory at the moment.
+
+04/28/2003: beazley
+ Fixed [ 723471 ] Wrapper_print() fails with preprocessor directives.
+
+04/28/2003: beazley
+ Minor refinement of const static member variable handling
+ described in CHANGES 08/11/2002. Previously, SWIG merely
+ checked to see if there was an initializer in the declaration.
+ Now, SWIG additionally checks to make sure the static member
+ is const.
+
+04/25/2003: ljohnson (Lyle Johnson)
+ [Ruby] Added a kind of limited support for multiple inheritance,
+ activated using the -minherit command-line option. I've also updated
+ the "C++ Inheritance" section of the Ruby documentation to discuss
+ how this works, and its limitations. Also also modified the minherit.i
+ test case to run against this.
+
+04/25/2003: ljohnson (Lyle Johnson)
+ [Ruby] Added the -globalmodule command-line option for the Ruby
+ module, for wrapping stuff into the global module (Kernel) instead
+ of a nested module. Updated documentation accordingly.
+
+04/23/2003: mrose (Mark Rose)
+ Fixed symname error in director calls to Python methods
+ that extend C++ operators.
+
+ Stopped director destructor wrappers from calling __set_up,
+ which was leaving the director flag in an inconsistent state.
+
+04/23/2003: beazley
+ Fixed problem with namespace resolution and nested namespaces.
+ Reported by Alfred Lorber (and Marcelo Matus).
+
+04/16/2003: cheetah (William Fulton)
+ Patch for Java examples and test-suite to run on Mac OS X.
+
+04/15/2003: ljohnson (Lyle Johnson)
+ [Ruby] Incorporated Nobu Nakada's patches for supporting the Ruby
+ 1.8 allocation framework.
+
+04/15/2003: ljohnson (Lyle Johnson)
+ [Ruby] Replaced all uses of the deprecated STR2CSTR() macro with the
+ safer StringValuePtr() macro. For more information, see ruby-talk:67059
+ and follow-ups to that post.
+
+04/11/2003: beazley
+ Fixed problem with preprocessor macro expansion. For example:
+
+ #define min(x,y) ((x) < (y)) ? (x) : (y)
+ int f(int min);
+
+ Reported by Sebastien Recio.
+
+04/10/2003: cheetah (William Fulton)
+ [Java] Added a runtime check to typemaps in arrays_java.i library to check
+ that the Java array passed in is the same size as the C array and throw an
+ exception if not.
+
+ Also fix to use delete instead of free for arrays created using new.
+
+04/07/2003: cheetah (William Fulton)
+ Remove GCC3 warning when compiling the examples and test-suite:
+
+ cc1plus: warning: changing search order for system directory "/usr/include"
+ cc1plus: warning: as it has already been specified as a non-system directory
+
+ See SF patch #715531 submitted by Gerald Williams
+
+04/03/2003: cheetah (William Fulton)
+ [C#] Improved wrapping of enums and constants. These were previously
+ wrapped as C# variables rather than constants. Either these are wrapped
+ as readonly (runtime) constants or compile time constants, depending on
+ the %javaconst directive (The directive is likely to change name soon).
+ For example wrapping:
+ %javaconst(0);
+ #define ABC 22
+ %javaconst(1) XYZ;
+ #define XYZ 33
+ is now:
+ public static readonly int ABC = examplePINVOKE.get_ABC();
+ public const int XYZ = 33;
+
+04/03/2003: cheetah (William Fulton)
+ [Java] Global constants and enums are put in their own interface called
+ xxxConstants, where xxx is the module name. This is an improvement as
+ it is possible to derive (implement) a Java class from the xxxConstants
+ interface to improve the syntax; namely when wrapping:
+ enum {ONE=1, TWO, THREE};
+ accessing these from a Java class implementing xxxConstants is neater:
+ int number = ONE;
+ than the previous:
+ int number = xxx.ONE;
+
+ Patch submitted by Dave Dribin.
+
+04/02/2003: cheetah (William Fulton)
+ Build improvements for multiple builds. This allows one to build
+ the SWIG executable and runtime libraries for different platforms/compilers
+ etc by running configure in different directories. This isn't 100% just
+ yet and won't be until libtool is better configured... a 'configure' and
+ 'make distclean' needs to be run in the root directory before it all works.
+ For example:
+ $ ./configure
+ $ make distclean
+ $ mkdir config1; cd config1; ../configure CC=gcc CXX=g++; make; cd ..
+ $ mkdir config2; cd config2; ../configure CC=cc CXX=c++; make; cd ..
+
+ To be improved. A 'make check' does not work yet either.
+
+04/01/2003: beazley
+ Fixed template partial specialization argument expansion bug.
+ This showed up when trying to use std_vector.i with vectors
+ of pointers.
+
+03/31/2003: cheetah (William Fulton)
+ Fix for parallel make builds of SWIG, for example
+ make -j 4
+ Build failure reported by Bill Clarke.
+
+03/28/2003: beazley
+ Released 1.3.19.
+
+
+
+Version 1.3.19 (March 28, 2003)
+===============================
+
+03/28/2003: beazley
+ Variety of minor bug fixes to the 1.3.18 release including:
+
+ - Segmentation fault with %extend directive.
+ - Typemap variable substitution bug.
+ - Expression evaluation bug.
+ - Large memory leak with template expansion.
+
+Version 1.3.18 (March 23, 2003)
+===============================
+
+03/21/2003: beazley
+ Fixed two problems with the %extend directive, overloading, and
+ template expansion. See the 'template_extend_overload' and
+ 'template_extend_overload_2' tests in Examples/test-suite for
+ details.
+
+03/20/2003: cheetah (William Fulton)
+ [C#] Added some typemaps as suggested by Andreas Schoerk for handling
+ parameters that are passed as pointers or by reference. These have
+ been put in typemaps.i.
+
+03/20/2003: beazley
+ Fixed a C++ scoping bug related to code like this:
+
+ class Foo {
+ public:
+ int Foo::bar();
+ };
+
+ Previously, SWIG just tossed out the Foo::bar() declaration. Now,
+ the declaration is wrapped provided that the prefix is exactly the
+ same as the current scope (including any enclosing namespaces).
+ Reported by Bruce Lowery.
+
+03/20/2003: beazley
+ Incorporated [ 696516 ] Enabling exception processing for data member access.
+ In some compilers, attribute access can generate exceptions. However,
+ SWIG ordinarily assumes that no exceptions will be raised. To disable this,
+ use the %feature("allowexcept"). For example:
+
+ %feature("allowexcept") Foo::x;
+ ...
+ class Foo {
+ public:
+ int x; /* Exception handling enabled */
+ ...
+ };
+
+ Patch contributed by Yakov Markovitch.
+
+03/20/2003: beazley
+ Incorporated Patch. [ 701860 ] Improve Performance (python proxies).
+ Gives a performance boost to proxy class code and the management of the
+ .this and .thisown attributes. Contributed by Mike Romberg.
+
+03/19/2003: cheetah (William Fulton)
+ [C# and Java] Added missing vararg support.
+
+03/18/2003: mrose (Mark Rose)
+ Removed code related to tagging individual methods for directors.
+ The concept of having directors for some but not all virtual methods
+ of a class is deeply flawed. The %feature("nodirector") tag is also
+ gone.
+
+ Directors are off by default. To enable them for a class, issue
+ %feature("director") classname; which will create director methods
+ for every virtual method in the hierarchy of the class.
+
+03/17/2003: beazley
+ Fixed a subtle problem with passing arguments of type function. For
+ example:
+
+ int foo(int x(int, int));
+
+ or
+
+ typedef int binop_t(int, int);
+ int foo(binop_t x);
+
+ In old versions, this would produce code that wouldn't compile. Now,
+ SWIG merely adds an extra pointer, making these declarations the same
+ as:
+
+ int foo(int (*x)(int, int));
+
+ typedef int binop_t(int, int);
+ int foo(binop_t *x);
+
+ Reported by Garth Bushell.
+
+03/17/2003: mrose (Mark Rose)
+ Fixed the return statement for director base class calls that have no
+ return value.
+
+03/15/2003: beazley
+ Fixed a problem with const smart-pointer wrapping. For example:
+
+ class Foo {
+ public:
+ int x;
+ void bar() const;
+ void spam();
+ };
+
+ class Blah {
+ ...
+ const Foo *operator->();
+ ...
+ };
+
+ In this case, only "x" and "bar" are visible from Blah (since application
+ of spam violates constness). Moreover, access to "x" is read-only.
+
+03/15/2003: mrose (Mark Rose)
+ Cleaned up two signed versus unsigned comparisons in python/std_vector.i.
+
+03/15/2003: cheetah (William Fulton)
+ [C#] Global variables are wrapped using properties instead of get and set methods.
+ Member variable wrapping bug fixes, for example wrapping pointers work now.
+ Typemaps are used for all variable wrapping to generate the property code.
+
+03/13/2003: mrose (Mark Rose)
+ Fixed a bug in the virtual method unrolling for directors.
+ The order of unrolling is now from base to derived, to ensure
+ that the most derived implementation of a director method is
+ found.
+
+ Director methods for pure virtual methods now throw
+ DIRECTOR_PURE_VIRTUAL_EXCEPTION if _up is set.
+
+03/12/2003: cheetah (William Fulton)
+ [C#] Polymorphism fix: virtual functions now use the appropriate
+ keyword in the C# proxy class, virtual or override.
+ Some 'using System;' statement fixes needed by the Mono compiler.
+
+03/11/2003: beazley
+ Fixed subtle bug in the application of SwigValueWrapper<> to
+ template classes with default constructors. Reported by
+ Bruce Lowery.
+
+03/11/2003: beazley
+ The $descriptor(type) variable is now expanded in code supplied to
+ %extend. This is useful for certain kinds of advanced wrapping
+ (especially container classes).
+
+03/11/2003: luigi
+ Support for std::map.
+ (a) Integration with scripting language (a la std::vector) for
+ Python, Ruby, MzScheme, and Guile;
+ (b) Simple wrapper for other languages
+
+03/10/2003: beazley
+ Fixed problem with escape sequences in string and character constants. SWIG
+ wasn't parsing certain octal codes correctly.
+
+03/07/2003: beazley
+ Fixed a variety of subtle preprocessor problems reported by
+ Sebastien Recio.
+
+ (a) Empty preprocessor values no longer generate "bad constant
+ value" errors. For example:
+
+ #define FOO
+ #define FOO BAR
+
+ (b) Macro names can now span multiple lines (technically valid,
+ although questionable practice). For example:
+
+ #define A_LONG_MACRO_\
+ NAME 42
+
+ (c) Whitespace is no longer required before certain macro values.
+ For example:
+
+ #define FOO"Hello"
+ #define BAR\
+ "Hello"
+
+03/07/2003: ljohnson (Lyle Johnson)
+ [Ruby] Added missing long long and unsigned long long typemaps
+ in the Lib/ruby/typemaps.i library file.
+
+03/07/2003: mrose (Mark Rose)
+ Added Examples/python/callback to demostrate how directors can
+ be used to implement callbacks in Python
+ Added Examples/python/extend to demonstrate virtual method
+ calls from C++ to Python (really the same as the callback
+ example, just a different context).
+ Added four tests for very basic director functionality. These
+ have runtime tests under python.
+ The Python module now emits #define SWIG_DIRECTORS near the
+ top of the output file if directors are enabled. This is useful
+ for disabling parts of tests in target languages that don't
+ support directors.
+
+03/06/2003: mrose (Mark Rose)
+ Added a section to Doc/Manual/Python.html on cross language
+ polymorphism (directors).
+
+03/06/2003: mrose (Mark Rose)
+ The short-lived "-fdirectors" command line option has been
+ removed. To enable directors, instead use the extended %module
+ directive as follows:
+
+ %module(directors="1") modulename
+
+03/06/2003: cheetah (William Fulton)
+ The long long typemaps have been rewritten so that they can be more
+ easily used with non ISO compilers, like Visual C++. For example
+ if you are wrapping the Windows 64 bit type __int64 the long long
+ typemaps can be used with %apply:
+
+ %apply long long { __int64 };
+ __int64 value1(__int64 x);
+
+ __int64 will now appear in the generated code instead of long long.
+
+03/06/2003: beazley
+ *** DEVELOPER CHANGE ***
+ Swig module mutation has been changed slightly. When a language
+ class method wants to save node attributes, it now uses one of the
+ following functions:
+
+ Swig_require()
+ Swig_save()
+
+ The first argument to these functions is a namespace in which
+ saved attributes are placed. For example,this code
+
+ Node *n;
+ Swig_save("cDeclaration",n,"type","parms","name",NIL);
+
+ saves the attributes as "cDeclaration:type", "cDeclaration:parms",
+ and so forth. If necessary, a language module can refer to
+ old values by using this special namespace qualifier.
+
+ In addition to this, a special attribute "view" contains the name
+ of the last namespace used to save attributes. In the above
+ example, "view" would have the value "cDeclaration". The value
+ of "cDeclaration:view" would have the previous view and so forth.
+
+ Swig_restore(n) restores a node to the state before the last
+ Swig_require() or Swig_save() call.
+
+ Note: This change makes it easier for language modules to refer
+ to old values of attributes.
+
+
+03/06/2003: mrose (Mark Rose)
+ Merged the cross-language polymorphism patch. When enabled, C++
+ "proxy" classes (called directors) are generated for each specified
+ C++ class. Directors pass method calls from C++ to Python, similar
+ to the way the usual proxy (shadow) classes pass method calls from
+ Python to C++. Together, these two types of proxies allow C++
+ classes that are extended in Python to behave just like ordinary
+ C++ classes and be used in C++ like native objects.
+
+ This feature is still very experimental and is disabled by default.
+ To enable director support, specify '-fdirectors' on the SWIG command
+ line or in the SWIG_FEATURES environment variable. In the interface
+ file, add %feature("director") to generate directors for all classes
+ that have virtual methods.
+
+ See http://stm.lbl.gov/~tm2/swig/ProxyDoc.html for more details.
+
+
+03/03/2003: beazley
+ Fixed a small glitch in typemap local variable replacement. If you had
+ a typemap like this:
+
+ %typemap(in) type ($1_type temp) {
+ ...
+ temp = ...;
+ ...
+ }
+
+ and no occurrence of "$1_type" appeared in the body, then the local
+ variable type wouldn't be substituted.
+
+03/03/2003: cheetah (William Fulton)
+ [C#] New version of the CSharp module which is typemap based.
+ It also uses ECMA C# and no longer uses Microsoft Visual C++.NET
+ glue. This means that it will work on non-Windows platforms.
+ Contributed by Neil Cawse.
+
+02/27/2003: beazley
+ Fixed [ 653548 ] error parsing casting operator definition.
+ SWIG now ignores casting operators declared outside of a class.
+ For example:
+
+ inline A::operator char *() { ... }
+
+ Bug reported by Martin Casado.
+
+02/27/2003: beazley
+ Added support for anonymous bit-fields. For example:
+
+ struct Foo {
+ int x : 4;
+ int : 4;
+ int y : 8;
+ };
+
+ Anonymous bit-fields are ignored by SWIG. Problem
+ reported by Franz Höpfinger.
+
+02/26/2003: cheetah (William Fulton)
+ [Java] Better typemaps in the Examples/java/typemap example and also
+ fixes subtle bug when using the StringBuffer typemaps more than once.
+
+02/26/2003: beazley
+ Fixed [ 642112 ] Constants char bug.
+
+02/26/2003: beazley
+ Fixed [ 675337 ] Partial template specialization not entirely working.
+ There was a subtle problem related to the naming and ordering of
+ template partial specialization arguments. Matching worked okay,
+ the resulting templates weren't expanded correctly.
+
+02/25/2003: beazley
+ Fixed problem with parsing (and generating code) for
+ references to arrays. For example:
+
+ int foo(int (&x)[10]);
+
+02/25/2003: beazley
+ Fixed [ 635347 ] Compilation warning from libpy.c.
+ Reported by Daniel L. Rall.
+
+02/25/2003: beazley
+ Fixed a subtle problem with virtual method implementation
+ checking and typedef.
+
+ typedef int *intptr;
+
+ struct A {
+ virtual int *foo() = 0;
+ };
+ struct B : public A {
+ virtual intptr foo() { };
+ };
+
+ SWIG was treating these declarations as different even though
+ they are the same (via typedef).
+
+02/25/2003: ljohnson (Lyle Johnson)
+ [Ruby] Added range checking for the NUM2USHRT macro, per [ 675353 ].
+
+02/24/2003: beazley
+ Fixed a subtle problem with the code that determined if a class is abstract
+ and can be instantiated. If you had classes like this:
+
+ struct A {
+ virtual int foo(int) = 0;
+ };
+ struct B : virtual A {
+ virtual int foo(int);
+ };
+
+ struct C : virtual A {
+ };
+
+ /* Note order of base classes */
+ struct D : B, C { }; /* Ok */
+ struct E : C, B { }; /* Broken */
+
+ then SWIG determined that it could instantiate D(), but not E().
+ This inconsistency arose from the depth-first search of the
+ inheritance hierarchy to locate the implementations of virtual
+ methods. This problem should now be fixed---SWIG will attempt
+ to locate any valid implementation of a virtual method by
+ traversing over the entire hierarchy.
+
+02/22/2003: cheetah (William Fulton)
+ [Java] Fix for using enum typemaps. The Java final static variable type
+ can be set using the jstype typemap, enabling enums to be mapped to
+ something other than int. Bug reported by Heiner Petith.
+
+02/21/2003: songyanf (Tiger)
+ Added CSharp (C#) module prototype
+ i.e. csharp.cxx & csharp.h at Source/Modules/.
+ They are for test usage only now and need improvement.
+ The interface also need to be modified.
+
+ *** NEW FEATURE ***
+
+02/20/2003: songyanf (Tiger)
+ Fixed problem with typedef with -fvirtual.
+ Similar as beazley's modification today.
+
+02/20/2003: beazley
+ Added support for gcc-style variadic preprocessor macros.
+ Patch [ 623258 ] GCC-style vararg macro support.
+ Contributed by Joe Mason.
+
+02/20/2003: beazley
+ Fixed [ 605162 ] Typemap local variables.
+ Reported by Lyle Johnson.
+
+02/20/2003: beazley
+ Fixed problem with abstract classes and typedef. For example:
+
+ class Foo {
+ public:
+ virtual void foo(int x) = 0;
+ };
+
+ typedef int Integer;
+ class Bar : public Foo {
+ public:
+ virtual void foo(Integer x);
+ };
+
+ SWIG was getting confused about the latter method---making Bar
+ abstract. Reported by Marcelo Matus.
+
+02/19/2003: cheetah (William Fulton)
+ [Java] %javaconst(flag) can also be used on enums as well as constants.
+ This feature enables true Java compiler constants so that they can be
+ used in Java switch statements. Thanks to Heiner Petith for patches.
+
+02/19/2003: songyanf (Tiger)
+ Modified -fcompact feature to deal with PP lines
+
+02/18/2003: beazley
+ Fixed [ 689040 ] Missing return value in std_vector.i.
+ Reported by Robert H. de Vries.
+
+02/18/2003: beazley
+ Fixed a few evil scoping problems with templates, namespaces, and the
+ %extend directive. Problem reported by Luigi Ballabio.
+
+
+02/18/2003: cheetah (William Fulton)
+ [Ruby] Improved support for Visual C++ and other native Windows compilers.
+ It is no longer necessary to specify "/EXPORT:Init_<module>", where <module> is the
+ swig module name when linking using these native Windows compilers.
+
+02/15/2003: songyanf (Tiger)
+ Added -fvirtual option.
+ Reduce the lines and size of the wrapper file
+ by omitting redifined virtual function in children classes.
+
+ Modified -compact option to -fcompact option
+
+ Added -small option.
+ -small = -fvirtual -fcompact
+ And it can be extended by future feature options,
+ which are used to reduce wrapper file szie.
+
+ Added SWIG_FEATURES environment variable check.
+ To dynamically set the feature options such as -fcompact & -fvirtual
+ *** NEW FEATURE ***
+
+02/13/2003: lenz
+ Updated Doc/Manual/Perl5.html to talk about C++ compile problems
+ configure.in now checks for PERL5_CCFLAGS
+ Runtime/Makefile.in and Example/Makefile.in now use PERL5_CCFLAGS
+ Added Lib/perl5/noembed.h which contains all the known macro conflicts
+
+02/12/2003: beazley
+ Fixed [ 685410 ] C++ Explicit template instantiation causes SWIG to exit.
+ Fixes a syntax error with declarations similar to this:
+
+ template class std::vector<int>;
+
+ SWIG now ignores the instantiation and generates a warning message.
+ We might do more later. Reported by Thomas Williamson.
+
+02/11/2003: cheetah (William Fulton)
+ Rewrote bool typemaps to remove performance warning for compiling generated code
+ under Visual C++.
+
+02/11/2003: cheetah (William Fulton)
+ Fix for wrapping reference variables (const non-primitive and all non-const types)
+ for example:
+ int& i;
+ Class& c;
+ const Class& c;
+
+02/11/2003: beazley
+ Fixed more very subtle preprocessor corner cases related to recursive
+ macro expansion. For example:
+
+ #define cat(x,y) x ## y
+
+ cat(cat(1,2),3) // Produces: cat(1,2)3
+
+ #define xcat(x,y) cat(x,y)
+
+ xcat(xcat(1,2),3) // Produces 123
+
+ See K&R, 2nd Ed. p. 231.
+
+02/10/2003: cheetah (William Fulton)
+ Fixed [ 683882 ] - patch submitted by F. Postma for SWIG to compile on HP-UX.
+
+02/10/2003: beazley
+ Fixed subtle preprocessor argument expansion bug. Reported by Marcelo Matus.
+
+02/10/2003: songyanf
+ Added -compact option.
+ Reduce the lines and size of the wrapper file
+ by omitting comments and combining short lines.
+ *** NEW FEATURE ***
+
+02/07/2003: beazley
+ Fixed [ 651355 ] Syntax error with cstring.i
+ Reported by Omri Barel.
+
+02/07/2003: beazley
+ Fixed [ 663632 ] incompatibility with standard cpp.
+ This is a refinement that fixes this problem:
+
+ // Some macro with an argument
+ #define FOO(x) x
+
+ int FOO; /* Not a macro---no arguments */
+
+02/05/2003: beazley
+ Fixed [ 675491 ] parse error with global namespace qualification.
+ Submitted by Jeremy Yallop.
+
+02/04/2003: beazley
+ Fixed bug in varargs processing introduced by the numinputs typemap parameter.
+
+01/08/2003: ttn
+ [xml] Fix string-replacement ordering buglet.
+ Thanks to Gary Herron.
+
+12/23/2002: cheetah (William Fulton)
+ Further build changes:
+ - The SWIG executable is now built using a single Makefile.
+ - This makefile is generated by Automake (Source/Makefile.am).
+ - Dependency tracking and tags support are in this makefile.
+ - Automake 1.7.2 and Autoconf 2.54 minimum versions are needed to build SWIG from CVS.
+ - Running ./autogen.sh now installs Autoconf/Automake support files into
+ Tools/config and these files are no longer stored in CVS.
+ - Bug fixes in 'make install' for systems using .exe executable extension and
+ ./configure --with-release-suffix=whatever
+
+12/16/2002: cheetah (William Fulton)
+ More build changes:
+ - Autoconf's AC_CANONICAL_HOST replaces proprietary approach for detecting build host.
+ - Autoconf support files moved to Tools/config.
+
+12/16/2002: cheetah (William Fulton)
+ Modifications to run on MacOS, submitted by Bernard Desgraupes.
+ Mainly ensuring generated files are output in the appropriate directory for
+ some modules.
+
+12/11/2002: cheetah (William Fulton)
+ Various build modifications and bug fixes:
+ - Simplification of version string. Use autoconf's PACKAGE_VERSION instead.
+ - Build time removed from SWIG version.
+ - Using standard autoconf config header generation.
+ - Updated old autoconf macros as reported by autoupdate.
+ - Removed $prefix in autoconf from search paths as autoconf won't expand them.
+ - Subtle bug fix where 'make prefix=/somewhere; make clean; make prefix=/somwhere/else'
+ produced an executable using the incorrect library directories.
+ - Added -ldflags commandline option for MzScheme, Ocaml, Pike and PHP.
+ - Fixed reporting of compiler used when using -version commandline option.
+ - SWIG web address added to -version commandline option.
+
+12/11/2002: beazley
+ Minor fix to Tcl dynamic cast typemaps. Reported by
+ Kristopher Blom.
+
+12/10/2002: beazley
+ Fixed subtle template argument replace bug. Reported by
+ Chris Flatley.
+
+12/10/2002: beazley
+ Reverted CHANGES 09/03/2002, preprocessor argument evaluation. Arguments
+ are not evaluated during collection, K&R, p. 230.
+
+12/06/2002: beazley
+ Fixed [ 649022 ] Compilation problems with KAI/KCC
+
+12/02/2002: beazley
+ SWIG 'rel-1-3' CVS branch merged back into the main branch.
+
+
+Version 1.3.17 (November 22, 2002)
+==================================
+
+11/19/2002: beazley
+ Fixed [ 613922 ] preprocessor errors with HAVE_LONG_LONG.
+
+11/19/2002: beazley
+ Fixed [ 615480 ] mzscheme SWIG_MustGetPtr_.
+
+11/19/2002: beazley
+ Fixed [ 635119 ] SWIG_croak causes compiler warning.
+
+11/16/2002: cheetah (William Fulton)
+ [Java] Added typemaps for pointers to class members.
+
+11/15/2002: cheetah (William Fulton)
+ [Java] Bug fix: Overloaded C++ functions which cannot be overloaded in Java
+ once again issue a warning.
+
+11/14/2002: cheetah (William Fulton)
+ [Java] Handling of NULL pointers is improved. A java null object will now
+ be translated to and from a NULL C/C++ pointer by default. Previously when
+ wrapping:
+
+ class SomeClass {...};
+ void foo(SomeClass *s);
+
+ and it was called from Java with null:
+
+ modulename.foo(null)
+
+ a Java NullPointerException was thrown. Extra typemaps had to be written in
+ order to obtain a NULL pointer to pass to functions like this one. Now the
+ default wrapping will detect 'null' and translate it into a NULL pointer.
+ Also if a function returns a NULL pointer, eg:
+
+ SomeClass *bar() { return NULL; }
+
+ Then this used to be wrapped with a SomeClass proxy class holding a NULL
+ pointer. Now null is returned instead. These changes are subtle but useful.
+ The original behaviour can be obtained by using the original typemaps:
+
+ %typemap(javaout) SWIGTYPE {
+ return new $&javaclassname($jnicall, true);
+ }
+ %typemap(javaout) SWIGTYPE *, SWIGTYPE &, SWIGTYPE [] {
+ return new $javaclassname($jnicall, $owner);
+ }
+ %typemap(javagetcptr) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [] %{
+ protected static long getCPtr($javaclassname obj) {
+ return obj.swigCPtr;
+ }
+ %}
+
+ *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
+
+
+11/12/2002: beazley
+ Fixed problem with abstract methods and signatures. For example:
+
+ class abstract_foo {
+ public:
+ virtual int meth(int meth_param) = 0;
+ };
+
+
+ class abstract_bar : public abstract_foo {
+ public:
+ int meth(int meth_param_1, int meth_param_2) { return 0; }
+ };
+
+ In this case, abstract_bar is still abstract.
+
+ Fixes [ 628438 ] Derived abstract class not abstract.
+ Reported and patched by Scott Michel.
+
+11/11/2002: beazley
+ Fixed a matching problem with typemaps and array dimensions. For example, if you
+ had this:
+
+ typedef char blah[20];
+
+ and a typemap:
+
+ %typemap() char [ANY] {
+ ... $1_dim0 ...
+ }
+
+ then $1_dim* variables weren't be expanded properly. It should work now.
+ Problem reported by Pankaj Kumar Goel.
+
+11/07/2002: mkoeppe
+ Added an experimental new module that dumps SWIG's parse
+ tree as (Common) Lisp s-expressions. The module is
+ invoked with SWIG's -sexp command-line switch. The output
+ can be read into Common Lisp. There is (prototype)
+ example Lisp code that generates Foreign Function Interface
+ definitions for use with Kevin Rosenberg's UFFI.
+
+ *** EXPERIMENTAL NEW FEATURE ***
+
+11/07/2002: mkoeppe
+ Removed duplicate declaration of "cpp_template_decl" in
+ parser.y; bison 1.75 complained.
+
+11/06/2002: cheetah (William Fulton)
+ [Java] Default primitive array handling has changed like arrays of classes.
+ C primitive arrays are no longer wrapped by a Java array but with a pointer
+ (type wrapper class). Again the changes have been made for efficiency reasons.
+ The original typemaps have been moved into arrays_java.i, so the original
+ behaviour can be obtained merely including this file:
+
+ %include "arrays_java.i"
+
+ The array support functions are no longer generated by default. They are only
+ generated when including this file, thus this often unused code is only
+ generated when specifically requiring this type of array support.
+
+ *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
+
+11/05/2002: ljohnson (Lyle Johnson)
+ [Ruby] Added support for nested module declarations (as was
+ previously added for the Perl module). So a %module directive
+ of the form:
+
+ %module "Outer::Inner::Foo"
+
+ will nest everything as (in Ruby code):
+
+ module Outer
+ module Inner
+ module Foo
+ # stuff goes here
+ end
+ end
+ end
+
+11/05/2002: mkoeppe
+ [MzScheme] Add an argument (-declaremodule) that generates
+ code to correctly declare a primitive module extension.
+ Patch submitted by Bruce Butterfield.
+
+11/02/2002: cheetah (William Fulton)
+ [Java] Added patch submitted by Michael Cahill to remove unused parameter
+ warnings for the jenv and cls parameters. This patch also also allows one
+ to use "void" in the jni typemap for any type without code being generated
+ attempting to return a value.
+
+10/29/2002: cheetah (William Fulton)
+ [Java] Array handling is different. Arrays of classes are no longer wrapped
+ with proxy arrays, eg wrapping
+
+ class X {...};
+ X foo[10];
+
+ used to be wrapped with these Java getters and setters:
+
+ public static void setFoo(X[] value) {...}
+ public static X[] getFoo() {...}
+
+ This approach is very inefficient as the entire array is copied numerous
+ times on each invocation of the getter or setter. These arrays are now
+ wrapped with a pointer so it is only possible to access the first array element
+ using a proxy class:
+
+ public static void setFoo(X value) {...}
+ public static X getFoo() {...}
+
+ Arrays of enums have also been similarly changed. This behaviour is now like the
+ other SWIG language's implementation and the array library should be used to
+ access the other elements. The original behaviour can be achieved using the
+ macros and typemaps in arrays_java.i, for example:
+
+ %include "arrays_java.i"
+ JAVA_ARRAYSOFCLASSES(X)
+ class X {...};
+ X foo[10];
+
+ *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
+
+10/29/2002: cheetah (William Fulton)
+ [Java] Two new typemaps javain and javaout for generating the proxy class
+ and type wrapper class method calls to the JNI class. The new typemaps are
+ really used for transforming the jstype (used in proxy class and type wrapper
+ classes) to the jtype (used in the JNI class) and visa versa. A javain typemap
+ is required whenever an in typemap is written and similarly javaout for an out
+ typemap. An example is probably best to show them working:
+
+ %typemap(javain) Class "Class.getCPtr($javainput)"
+ %typemap(javain) unsigned short "$javainput"
+ %typemap(javaout) Class * {
+ return new Class($jnicall, $owner);
+ }
+
+ %inline %{
+ class Class {};
+ Class * bar(Class cls, unsigned short ush) { return new Class(); };
+ %}
+
+ The generated proxy code is then:
+
+ public static Class bar(Class cls, int ush) {
+ return new Class(exampleJNI.bar(Class.getCPtr(cls), ush), false);
+ }
+
+
+ Some new special variables have been introduced in order to use these typemaps.
+ Here $javainput has been replaced by 'cls' and 'ush'. $jnicall has been replaced by
+ the native method call, 'exampleJNI.bar(...)' and $owner has been replaced by 'false'.
+ $javainput is analogous to the $input special variable. It is replaced by the parameter name.
+ $jnicall is analogous to $action in %exception. It is replaced by the call to the native
+ method in the JNI class.
+ $owner is replaced by either true if %newobject has been used otherwise false.
+
+ The java.swg file contains default javain and javout typemaps which will produce the same code
+ as previously. This change is only of concern to those who have written their own typemaps as
+ you will then most likely have to write your own javain and javaout typemaps.
+
+ The javaout typemap also makes it possible to use a Java downcast to be used on abstract
+ proxy base classes. See the Java documentation on dynamic_cast.
+
+ *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
+
+10/24/2002: ttn
+ [Methodology] Upgaded to libtool 1.4.3, presumably w/ better
+ support for newish platforms (like MacOS X).
+
+10/21/2002: ttn
+ Fixed Runtime/Makefile.in bug -- thanks to Richard Calmbach.
+
+10/18/2002: ttn
+ Fixed typo in doh.h -- thanks to Max Horn.
+
+Version 1.3.16 (October 14, 2002)
+=================================
+
+10/13/2002: beazley
+ Fixed bug with %extend directive and %feature reported
+ by William Fulton.
+
+10/13/2002: beazley
+ Added OpenVMS build directory (vms). Contributed by
+ Jean-François Pieronne.
+
+10/09/2002: cheetah (William Fulton)
+ [Java] Added throws clause to the native functions in the JNI class.
+ The throws clause is the same as the one generated for proxy functions
+ and module class functions.
+
+09/27/2002: beazley
+ Fixed some problems with the %import directive and classes that
+ were defined but not wrapped. Problem reported by Leslie Brooks,
+ Gerry Woods, and others.
+
+09/23/2002: cheetah (William Fulton)
+ [Java] Some error checking added:
+ 1) OutOfMemoryException check in the char * typemaps.
+ 2) As SWIG treats pointers, references and passing by value all the
+ same, it is possible to pass a NULL pointer to a function that expects
+ an object passed by value or by reference. A NullPointerException is
+ now thrown under this scenario.
+
+09/20/2002: ttn
+ [Methodology] Reworked "make clean" and "make install"
+ to be more table driven.
+ [Docs] Explain how to extend "make install" w/ extra-install.list.
+
+09/15/2002: beazley
+ Deprecation of the "ignore" typemap. The "ignore" typemap has
+ been deprecated in favor of a generalization of the "in" typemap.
+ To ignore an argument, use something like this instead:
+
+ %typemap(in,numinputs=0) int *output (int temp) {
+ $1 = &temp;
+ }
+
+ This change fixes a number of subtle bugs related to the interaction
+ of the "in" and "ignore" typemaps (which were supposed to be
+ mutually exclusive).
+
+ The use of the numinputs argument is reserved for future expansion.
+ Currently, values >1 will generate an error. However, future
+ releases of SWIG may utilize that to support multi-input typemaps.
+
+ %typemap(ignore) still works, but generates a warning message and is
+ translated to %typemap(in,numinputs=0).
+
+ *** POTENTIAL INCOMPATIBILITY ***
+ *** NEW FEATURE ***
+
+09/15/2002: beazley
+ Fixed segmentation fault for unnamed structures. For example:
+
+ typedef struct {
+ } *blah;
+
+
+ Reported by Roger Gibson.
+ Note: we might be able to generate wrappers in special cases.
+
+09/13/2002: beazley
+ Minor modification to generated wrapper functions. Pointer arguments are now
+ always set to an initial value of 0. Simplifies typemap writing and cleanup
+ code (since you can rely on zero-value initialization). This also greatly
+ reduces the need to ever write an "arginit" typemap.
+
+09/12/2002: beazley
+ Minor enhancement to smart-pointer support. If operator->()
+ is part of an ignored base class like this,
+
+ %ignore Bar;
+
+ class Foo {
+ public:
+ int blah();
+ };
+
+ class Bar { /* Ignored */
+ public:
+ ...
+ Foo *operator->();
+ ...
+ };
+
+ class Spam : public Bar { };
+
+ then methods from Foo are still available. For example,
+
+ >>> s = Spam()
+ >>> s.blah()
+ 0
+ >>>
+
+ The only catch is that the operator->() itself is not available
+ (since it wasn't wrapped). Therefore, there won't be any
+ __deref__() operation unless it is explicitly added to Spam
+ (either using %extend or just placing operator->() in the
+ definition of Spam).
+
+09/11/2002: ttn
+ [Methodology] Reworked "make check" to be more table driven.
+ [Docs] Docuemented methodology in Manual/Extending.html.
+
+09/11/2002: ttn
+ [Docs] Prefixed Manual/*.html with "<!DOCTYPE html ...>" to
+ pander dotingly to (over-)sensitive editors.
+
+09/10/2002: ttn
+ [Guile] Converted Examples/guile/simple "make check"
+ behavior to actually check execution results. Reduced
+ iteration counts so that the test doesn't take too long.
+
+09/10/2002: beazley
+ SWIG-1.3.15 released.
+
+
+Version 1.3.15 (September 9, 2002)
+==================================
+
+09/09/2002: beazley
+ Fixed nasty runtime type checking bug with subtypes and inheritance
+ and templates.
+
+09/09/2002: cheetah (William Fulton)
+ [Java] Java exception classes for a method's throws clause can be generated by
+ specifying them in a comma separated list in the throws attribute in any one
+ of the following typemaps: in, out, check, freearg, argout and throws. A classic
+ example would be to convert C++ exceptions into a standard Java exception:
+
+ %typemap(throws, throws="java.io.IOException") file_exception {
+ jclass excep = jenv->FindClass("java/io/IOException");
+ if (excep)
+ jenv->ThrowNew(excep, $1.what());
+ return $null; // or use SWIG_fail
+ }
+
+ class file_exception {...};
+ void open(const char *filename) throw(file_exception);
+
+ The Java method will then be declared with a throws clause:
+
+ public static void open(String filename) throws java.io.IOException {...}
+
+09/08/2002: mkoeppe
+ * [Guile] Improved the documentation system. The arglist no
+ longer gets cluttered with type specification, making it
+ more readable. (Also the ILISP function C-u M-x
+ `arglist-lisp' RET works better this way.) The types of
+ arguments are explained in an extra sentence after the
+ arglist.
+
+ There are now two documentation-related typemap arguments:
+
+ %typemap(in, doc="$NAME is a vector of integers",
+ arglist="$name") int *VECTOR { ... }
+
+ The "arglist" texts of all arguments of a function make up
+ its arglist in the documentation. The "doc" texts of all
+ arguments are collected to make a sentence that describes
+ the types of the arguments. Reasonable defaults are
+ provided.
+
+ As usual, $name is substituted by the name of the
+ argument. The new typemap variable $NAME is like $name,
+ but marked-up as a variable. This means that it is
+ upper-cased; in TeXinfo mode ("-procdocformat texinfo") it
+ comes out as @var{name}.
+
+ The directives %values_as_list, %values_as_vector,
+ %multiple_values now also have an effect on the
+ documentation. (This is achieved via the new pragmas
+ return_nothing_doc, return_one_doc, return_multi_doc.)
+
+ Documentation has also improved for variables that are
+ wrapped as procedures-with-setters (command-line switch
+ "-emit-setters").
+
+ * [Guile] Emit constants as _immutable_ variables. (This
+ was broken recently.)
+
+09/07/2002: mkoeppe
+ [Guile] Updated the typemaps in list-vector.i.
+
+09/07/2002: mkoeppe
+ Short-circuit the typechecks for overloaded functions.
+ (The changes in code generation are visible in the new
+ testcase "overload_complicated".)
+
+09/06/2002: cheetah (William Fulton)
+ [Java] Solution for [ 596413 ]
+ New typemap so that the Java proxy classes and type wrapper classes
+ wrapper constructor modifier can be tailored by users. The default value is
+ protected. Normally SWIG generates a constructor like this which can only
+ be accessed within one package:
+
+ protected Bar(long cPtr, boolean cMemoryOwn) {
+ ...
+ }
+
+ If you are using SWIG across multiple packages or want to use this constructor
+ anyway, it can now be accessed outside the package. To modify use for example:
+
+ %typemap(javaptrconstructormodifiers) SWIGTYPE "public"
+
+ to change to public for all proxy classes and similarly for all type wrapper classes:
+
+ %typemap(javaptrconstructormodifiers) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [] "public"
+
+09/06/2002: cheetah (William Fulton)
+ [Java] Added throws typemaps for the Java module. C++ exceptions get converted into
+ java.lang.RuntimeException Java exceptions.
+
+ Warning: This may change from java.lang.Runtime exception in the future.
+
+09/05/2002: cheetah (William Fulton)
+ [Java] Fix for variables declared as references.
+
+09/05/2002: beazley
+ Fixed [ 605162 ] Typemap local variables. Reported by Lyle Johnson.
+
+09/05/2002: ljohnson (Lyle Johnson)
+ [Ruby] More updates to the Ruby module documentation, including
+ a new typemap example that demonstrates how to collect key-value
+ pairs from an argument list into a Hash.
+
+09/05/2002: beazley
+ Fixed bug with template expansion and constructors.
+
+ template<class T> class Foo {
+ public:
+ Foo<T>() { }
+ };
+
+ The extra <T> in the constructor was carried through in the
+ name--causing runtime problems in generated modules.
+ Reported by Jordi Arnabat Benedicto.
+
+09/05/2002: mkoeppe
+ [Guile] Support overloading.
+
+09/04/2002: ljohnson (Lyle Johnson)
+ [Ruby] Updated typemaps for long long and unsigned long long types
+ to use Ruby 1.7 support for these types when available.
+
+09/04/2002: ljohnson (Lyle Johnson)
+ [Ruby] Added output typemaps for const reference to primitive
+ types.
+
+09/04/2002: mkoeppe
+ [Guile] Fix pass-by-value typemaps. Reported by Arno
+ Peters via Debian bugtracking (#156902), patch by Torsten
+ Landschoff <torsten@debian.org>.
+
+09/03/2002: samjam (Sam Liddicott)
+ Better reference support.
+ Functions that want a void** can take a NULL by reference and
+ the void* will be made for you and then passed-by-reference
+
+ Also all integer-class native types can be passed by reference
+ where an int* or int& etc is needed
+
+09/03/2002: beazley
+ Changed the evaluation order of preprocessor macro arguments.
+ Arguments are now expanded by the preprocessor *before* they
+ are passed to macro expansion. This fixes a subtle expansion
+ bug reported by Anthony Heading.
+
+09/03/2002: beazley
+ Fixed the file include order (again, apparently). See 2/27/99.
+
+09/02/2002: beazley
+ [Perl] Better exception handling support. Since Perl error handling
+ relies on setjmp/longjmp, wrapper functions have been modified slightly
+ to provide an extra block scope:
+
+ XS(foo) {
+ char _swigmsg[SWIG_MAX_ERRMSG] = "";
+ const char *_swigerr = _swigmsg;
+ {
+ /* Normal wrapper function here */
+ ...
+ SWIG_croak("An error occurred\n");
+ ...
+ XSRETURN(argvi); /* Successful return */
+ fail:
+ /* cleanup code */
+ }
+ croak(_swig_err);
+ }
+
+ The macro SWIG_croak(x) sets the value of _swigerr to x and
+ executes a "goto fail". The whole wrapper function is enclosed
+ block scope to provide proper cleanup of C++ objects. Since
+ croak executes a longjmp(), there is no way to properly reclaim
+ resources if this executes in the same scope as the wrapper
+ function.
+
+ The _swigmsg[] variable is normally unused, but can be used
+ to store small error messages using sprintf or snprintf. It
+ has a capacity of at least 256 bytes (SWIG_MAX_ERRMSG).
+
+09/02/2002: beazley
+ [Tcl] Added better support for exceptions. Instead of returning TCL_ERROR,
+ use the macro SWIG_fail to return with an error. This ensures that
+ arguments are properly cleaned up. Exception specifiers are now
+ handled by default.
+
+09/02/2002: ljohnson (Lyle Johnson)
+ [Ruby] The type-checking system for the Ruby module has had a flaw
+ in that some types which should be considered equivalent
+ weren't. This bug was best demonstrated by the inherit_missing.i
+ test suite case, which defines a base class "Foo" that is
+ subclassed by "Bar". The "Foo" class isn't actually wrapped (i.e.
+ it's not directly accessible from Ruby) but we'd still like to be
+ able to pass "Bar" instances to functions expecting Foos and have
+ that work; it wasn't. The revised implementation (similar to that
+ used for some other language modules) adds a new instance variable
+ (__swigtype__) to each object that indicates its SWIG type;
+ that is, each "Bar" instance will now have a string instance
+ variable called "__swigtype__" whose value is "_p_Bar".
+
+ Unless developers were taking advantage of this low-level
+ implementation detail, they shouldn't notice any compatibility
+ problems; nevertheless, I'm marking it as a "potential
+ incompatibility".
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+09/01/2002: ljohnson (Lyle Johnson)
+ [Ruby] Fixed SF Bug #603199.
+
+08/08/2002: cheetah (William Fulton)
+ [Java] Added OUTPUT, INPUT and INOUT typemaps in typemaps.i for C++
+ references.
+
+08/27/2002: mkoeppe
+ [Guile] Fixed error in "lib_std_vector" testcase and
+ compiler warning in "lib_cdata" testcase.
+
+08/27/2002: ljohnson (Lyle Johnson)
+ [Ruby] Added the "%mixin" directive, which allows the user to
+ specify a comma-separated list of module names to mix-in to a
+ class. So, for example, if you'd like to specify that Ruby's
+ Enumerable module should be mixed-in to your class Foo, you'd
+ write:
+
+ %mixin Foo "Enumerable";
+
+ or to specify that the modules Fee, Fie and Fo should be mixed
+ in to Foo:
+
+ %mixin Foo "Fee,Fie,Fo";
+
+ *** NEW FEATURE ***
+
+08/27/2002: ljohnson (Lyle Johnson)
+ [Ruby] Modified the %alias directive so that multiple aliases
+ can be specified for an instance method by using a comma-separated
+ list of aliases.
+
+08/27/2002: ljohnson (Lyle Johnson)
+ [Ruby] Added "throw" typemaps for the Ruby module.
+
+08/26/2002: beazley
+ Two new command line options for printing dependencies.
+ 'swig -M' lists all file dependencies. 'swig -MM' lists
+ dependencies, but excludes files in the SWIG library.
+ Example:
+
+ % swig -M -python example.i
+ example_wrap.cxx: \
+ /u0/beazley/Projects/lib/swig1.3/swig.swg \
+ /u0/beazley/Projects/lib/swig1.3/python/python.swg \
+ example.i \
+ example.h
+
+ % swig -MM -python example.i
+ example_wrap.cxx: \
+ example.i \
+ example.h
+
+ *** NEW FEATURE ***
+
+08/26/2002: beazley
+ Fixed [ 597599 ] union in class: incorrect scope.
+ Reported by Art Yerkes.
+
+08/26/2002: beazley
+ Fixed [ 600132 ] Default argument with namespace.
+ Reported by Shibukawa Yoshiki.
+
+08/24/2002: beazley
+ Automatic C++ exception handling enabled for all language modules. This is
+ pretty simple. If you have a class like this:
+
+ class Foo {
+ };
+ class Bar {
+ public:
+ void blah() throw(Foo);
+ }
+
+ then the generated wrapper code looks like this:
+
+ wrap_Bar_blah() {
+ ...
+ try {
+ arg1->blah();
+ }
+ catch (Foo &_e) {
+ /* "throw" typemap code inserted. $1 = _e */
+ }
+ catch (...) {
+ throw;
+ }
+ }
+ The "throw" typemap can be used to raise an error in the target
+ language. It can do anything. Here is a very simple example:
+
+ %typemap("throw") Foo {
+ PyErr_SetString(PyExc_RuntimeError, "Foo exception");
+ return NULL;
+ }
+
+ To make this work in each language module, simply define a few default
+ "throw" typemaps for SWIGTYPE, SWIGTYPE *, int, const char *, and a
+ few common exception types. That's all there is to it.
+
+ Automatic exception handling can be disabled using -noexcept or
+ setting the NoExcept global variable to 1.
+ *** NEW FEATURE ***
+
+08/23/2002: beazley
+ [ Python ]
+ Automatic translation of C++ exception specifications into error handling code.
+ For example:
+
+ class Foo {
+ };
+ class Bar {
+ public:
+ void blah() throw(Foo);
+ }
+
+ In this case, Foo is wrapped as a classic-style class (compatible
+ with exception handling). Furthermore, you can write Python code
+ like this:
+
+ b = Bar()
+ try:
+ b.blah();
+ except Foo,e: # Note use of exception class here!
+ # Handle Foo error
+ ...
+
+ The object "e" in the exception handler is just a wrapped Foo
+ object. Access it like a normal object.
+
+ If an exception is not wrapped as a class, a RuntimeError
+ exception is raised. The argument to this exception is
+ the exception object. For example:
+
+ class Bar {
+ public:
+ void blah() throw(int);
+ }
+
+ b = Bar()
+ try:
+ b.blah();
+ except RuntimeError,e:
+ print e.args[0] # Integer exception value
+
+ Comments:
+
+ - If a class is used as an exception, it *must* be wrapped
+ as a Python classic-style class (new classes don't work).
+
+ - Automatic exception handling is compatible with %exception.
+
+ - Use -noexcept to turn off this feature.
+
+ - The newly introduced "throw" typemap is used to raise
+ Python errors (naturally).
+
+ *** EXPERIMENTAL NEW FEATURE ***
+
+08/23/2002: beazley
+ Information from throw() specifiers is now stored in the parse
+ tree. For example:
+
+ class Foo {
+ public:
+ int blah() throw(spam,bar);
+ }
+
+ The stored information is fully corrected for namespaces and works
+ with templates. Uses will follow.
+
+08/22/2002: beazley
+ Exception handling code is no longer applied to member access
+ function. For example, in this code
+
+ %exception {
+ try {
+ $action
+ } catch(whatever) {
+ ...
+ }
+ }
+
+ class Foo {
+ public:
+ int x;
+ ...
+ }
+
+ The exception handling code is not applied to accessor functions
+ for Foo::x. This should reduce the amount of extra code
+ generated.
+
+ Caveat: Exception handling code *is* used when attributes are
+ accessed through a smart-pointer or a synthesized attributed
+ added with %extend is used.
+
+08/22/2002: beazley
+ Made more patches to hopefully eliminate problems when compiling SWIG
+ as a 64-bit executable.
+
+08/22/2002: beazley
+ Fixed a bug with const reference members, variables, and static members.
+ For example:
+
+ class Foo {
+ public:
+ static const int &ref;
+ };
+
+ SWIG was trying to generate "set" functions which wouldn't compile.
+
+08/21/2002: beazley
+ Made the warning message for "Class X might abstract" off by default.
+ Enable with -Wall.
+
+08/21/2002: beazley
+ Refined handling of const and non-const overloaded methods. If
+ a class defines a method like this:
+
+ class Foo {
+ public:
+ int bar(int);
+ int bar(int) const;
+ }
+
+ Then the non-const method is *always* selected in overloading and
+ the const method silently discarded. If running with -Wall, a warning
+ message will be generated.
+
+08/19/2002: beazley
+ Better support for using declarations and inheritance. Consider this:
+
+ class Foo {
+ public:
+ int blah(int x);
+ };
+
+ class Bar {
+ public:
+ double blah(double x);
+ };
+
+ class FooBar : public Foo, public Bar {
+ public:
+ char *blah(char *x);
+ using Foo::blah;
+ using Bar::blah;
+ };
+
+ Now SWIG wraps FooBar::blah as an overloaded method that uses all
+ accessible versions of blah(). See section 15.2.2 in Stroustrup, 3rd Ed.
+
+ SWIG also supports access change through using declarations. For example:
+
+ class Foo {
+ protected:
+ int x;
+ int blah(int x);
+ };
+
+ class Bar : public Foo {
+ public:
+ using Foo::x;
+ using Foo::blah;
+ };
+
+
+ Caveat: SWIG does not actually check to see if declarations imported
+ via 'using' are in the inheritance hierarchy. If this occurs, the
+ wrapper code won't compile anyways---not sure it's worth worrying about.
+
+08/18/2002: beazley
+ Modified overloading dispatch to not include nodes with an "error" attribute.
+ A language module can set this if a node couldn't be wrapped and you don't want
+ it included in the dispatch function.
+
+08/18/2002: beazley
+ Enhancement to overloaded function dispatch. The dispatcher is now aware of
+ inheritance relationships. For example:
+
+ class Foo { };
+ class Bar : public Foo { };
+
+ void spam(Foo *f);
+ void spam(Bar *b);
+
+ In this case, the dispatcher re-orders the functions so that spam(Bar *b) is
+ checked first---it is more specific than spam(Foo *f).
+
+08/17/2002: beazley
+ Added -Werror command line option. If supplied, warning messages are treated
+ as errors and SWIG will return a non-zero exit code.
+
+08/17/2002: beazley
+ Fixed [ 596135 ] Typedef of reference can't compile. For example:
+
+ typedef int &IntRef;
+ void foo(IntRef i);
+
+ SWIG-1.3.14 generated code that wouldn't compile.
+
+Version 1.3.14 (August 12, 2002)
+================================
+
+08/11/2002: mmatus
+ Static const members initialized during declaration, and
+ only them, ie:
+
+ struct A
+ {
+ static const int a = 1 ; // this one
+ static const int b; // not this one
+ };
+
+ are emitted like constants (equivalent to enums or
+ explicit %constant).
+
+ This is because they cannot be added directly to 'cvar'
+ since they lack the needed reference (well, you can force
+ them to have a real reference, but in an ugly way which
+ goes completely again the original purpose of initialize
+ them during declaration, you also have to deal with extra
+ linking matters, and it take a while to figure out what is
+ the problem and how to solve it).
+
+ Please test it with your preferred target language, and
+ not only the code generation, but really run the example
+ in the test-suite (static-const-member-2.i) because the
+ problem and the solution cannot be "fully" appreciated
+ until you try to load the module and run it.
+
+ In some target languages (python specially), this can
+ produces a difference in the way that the static constant
+ members 'a' and 'b' are internally wrapped. Hopefully,
+ they still can be accessed in the same way.
+
+
+08/11/2002: mmatus
+ [python] Now static const members can be accessed in a more
+ natural way, ie, if you have
+
+ struct A
+ {
+ typedef unsigned int viewflags;
+ static const viewflags forward_field = 0;
+ static const viewflags backward_field;
+ };
+
+ now you can do:
+
+ print A.backward_field
+
+ and also
+
+ a = A()
+ print a.forward_field
+
+ Note that if the static const members don't have an
+ initializer (like backward_field), still you can access
+ them in the same way in the python side, but the
+ implementation is a quite different: backward_field will
+ still appear in the cvar entity, and also, you are
+ responsible to initialize it in some code unit, and link it
+ properly. forward_field, by the other hand, will not
+ appear in the cvar entity but only as a A member, similar
+ to what happen with enum or %constant members.
+
+08/11/2002: mmatus
+ [python] Common code in the __setattr__/__getattr__ now
+ goes to two "free" methods at the beginning of the proxy
+ file, from where each class use it. This change reduces
+ the size of the proxy file, specially if you wrap a lot of
+ small classes in one module (up to 33% in some cases),
+ making it faster to load too.
+
+08/09/2002: beazley
+ [Perl5] If a function that returns char * returns NULL,
+ undef is returned to the Perl interpreter.
+
+08/09/2002: beazley
+ Fix to conversion operators and namespaces. For example:
+
+ namespace ns {
+ struct Foo { };
+ struct Bar {
+ operator Foo*();
+ };
+ }
+
+ In the wrapper code, SWIG was using ->operator Foo*()
+ when it should have been using ->operator ns::Foo*().
+
+ Note: if using %rename with a conversion operator, you
+ might have to do this:
+
+ %rename(toFooPtr) ns::operator ns::Foo*();
+ // ^^^^ note extra qualifier
+ namespace ns {
+ ...
+
+
+08/09/2002: beazley
+ [Python] Minor enhancement to 'const' variable declarations.
+ Normally const declarations are wrapped as read-only variables
+ accessible only through the cvar attribute (see SWIG.html for
+ a discussion of why). However, in many programs, "const"
+ declarations may just be constants---making the cvar. access
+ awkward. To fix this, "const" declarations are now available
+ both through cvar. and as a simple name. For example:
+
+ const int FOO = 42;
+
+ In Python:
+
+ >>> print example.cvar.FOO
+ 42
+ >>> print example.FOO
+ 42
+
+ Note: There are cases where the value of a "const" variable
+ might change. For example:
+
+ char *const BAR = "Hello World";
+
+ In this case, the pointer itself can not change, but the
+ data being pointed to could be modified. In these situations,
+ cvar.BAR should be accessed to obtained the current value.
+
+08/08/2002: beazley
+ [Python] Fixed generation of the proxy code (.py files) to more
+ closely follow the order of declarations as they appear in
+ the .i file. In the past, all of the class wrappers appeared
+ first, followed by function stubs, inserted Python code, and
+ other details.
+
+08/08/2002: cheetah (William Fulton)
+ [Java] Proxy method _delete() changed to delete(). There shouldn't ever
+ be a wrapped function called delete() as it is a C++ keyword and there
+ is no such thing as a member function in C.
+
+ *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
+
+ Backwards compatibility can be achieved by adding the function back in
+ for all proxy classes:
+ %typemap(javacode) SWIGTYPE %{
+ public void _delete() {
+ delete();
+ }
+ %}
+
+ Java backwards compatibility summary
+ ------------------------------------
+
+ There are a number of changes that have been made in improving the Java module
+ for ver 1.3.14. If at all possible change your code to take advantages of the
+ improvements. If you were using proxy classes you may not notice any backwards
+ compatibility issues. Here is an example which will help with most backwards
+ compatibility problems where it is not possible to modify the code that uses
+ the generated output:
+
+ Replace:
+ %module modulename
+
+ With:
+ %module (jniclassname="modulename") modulename;
+ %typemap(javacode) SWIGTYPE %{
+ public long getCPtr$javaclassname() {
+ return swigCPtr;
+ }
+ public void _delete() {
+ delete();
+ }
+ %}
+ %pragma(java) jniclassclassmodifiers="public";
+
+ The proxy constructors that took parameters (long cPtr, boolean cMemoryOwn)
+ were public and are now protected. If you were making use of these then you'll
+ have to modify your code and the best solution would be to use the new type
+ wrapper classes.
+
+ The other main areas are the pragmas and global variable wrapping. Replace
+ the pragmas with one of the new directives or typemaps mentioned below and use
+ %rename on the variables.
+
+ If you were not using proxy classes, you will have to define a jstype typemap
+ as well as a jtype typemap.
+
+08/08/2002: cheetah (William Fulton)
+ [Java] Fix for wrapping two dimension array variables.
+
+08/07/2002: beazley
+ [Python,Tcl]
+ Object management now has a much better sense of ownership.
+ Ownership bits is changed whenever an object is stored in a
+ global variable or structure member. For example:
+
+ struct Foo {
+ int val;
+ Foo *next;
+ };
+
+ Now in Python
+
+ >>> f = Foo()
+ >>> f.thisown
+ 1
+ >>> g = Foo()
+ >>> g.next = f # Assign a pointer
+ >>> f.thisown # Notice ownership change
+ 0
+ >>>
+
+ This scheme is mostly a conservative heuristic designed to
+ provide segmentation faults. It could cause a memory leak
+ if ownership is changed unnecessarily. In this case, you can
+ either write a typemap (that doesn't change ownership), or
+ manually set the thisown attribute back to 1.
+
+08/07/2002: beazley
+ [Tcl] Major usability improvements to the object interface.
+ Suppose you had code like this:
+
+ struct Foo {
+ int x;
+ int spam();
+ };
+
+ void blah(Foo *f);
+
+ In past versions of SWIG, you could create objects and use
+ them like this:
+
+ % Foo f
+ % f configure -x 3
+ % f spam
+ 37
+
+ The only problem is that if you tried to call blah(), it didn't
+ work:
+
+ % blah f
+ Type Error. Expected _p_Foo
+ %
+
+ Instead, you had to do this:
+
+ % blah [f cget -this]
+
+ SWIG now automatically extracts the -this pointer, avoiding this
+ problem. This means that saying "blah f" is perfectly legal and
+ everything will still work normally.
+
+ Caveat: Since pointer strings start with a leading underscore (_),
+ don't use this in object names. For example:
+
+ % Foo _f
+ % blah _f # Potential crash
+
+ Objects now have a -thisown attribute that shows the ownership.
+ This builds upon the CHANGES 11/24/2001 entry.
+
+08/07/2002: samjam, Sam Liddicott
+ Properly implemented pointer system using php resources.
+ Still need to work out whether or not to let script-users call
+ destructors directly
+
+08/06/2002: beazley
+ Upgraded mzscheme module to support version 201 and added
+ overloading support.
+
+08/05/2002: beazley
+ Added parsing support for extra grouping (in very limited cases).
+ For example:
+
+ typedef int (FuncPtr)(int, double);
+
+ *** EXPERIMENTAL ***
+
+08/03/2002: ljohnson (Lyle Johnson)
+ [Ruby] Updates to typemaps.i as those done previously for Perl,
+ Python and Tcl modules. Now supports reference types with INPUT,
+ OUTPUT and INOUT typemaps.
+
+08/02/2002: beazley
+ New library file cstring.i added. Provides macros for
+ manipulating char * data.
+
+08/02/2002: beazley
+ Deprecated the %new directive. Use %newobject instead. For
+ example:
+
+ %newobject foo;
+ ...
+ char *foo();
+
+ %newobject follows the same rules as %rename, %ignore, %feature,
+ etc.
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+08/01/2002: cheetah (William Fulton)
+ [Java] New attribute 'jniclassname' for the module directive allows a way of
+ changing the JNI class name from the default which uses the modulename with JNI
+ appended after it.
+
+ %module (jniclassname="name") modulename
+
+ If 'name' is the same as 'modulename' then the module class name gets changed
+ from 'modulename' to modulenameModule.
+
+08/01/2002: beazley
+ Fixed problem with file include order. Language specific
+ directories should take precedence over generic directories.
+ For example: "swig_lib/python/foo.i" should be loaded before
+ "swig_lib/foo.i". I thought this was the case already, but
+ apparently it has been broken for quite some time.
+
+08/01/2002: beazley
+ Added std_deque.i library file. Work in progress.
+
+08/01/2002: beazley
+ [Python,Tcl,Perl]
+ Improvements to typemaps.i. INPUT/INOUT typemaps perform better
+ error checking. Typemaps are now supplied for references like
+ int &OUTPUT, double &INOUT, etc.
+
+08/01/2002: beazley
+ [Python] Deprecated the T_* and L_* typemaps in typemaps.i.
+ Multiple return values are always placed in a tuple. Deprecated
+ the BOTH typemaps. This is now INOUT (e.g., int *INOUT).
+
+ *** POTENTIAL INCOMPATIBILITY FOR PYTHON MODULE ***
+
+08/01/2002: beazley
+ Deprecated the array.i, carray.i, and timer.i library files.
+
+08/01/2002: beazley
+ Deprecated the pointer.i library file. Use cpointer.i instead.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+08/01/2002: cheetah (William Fulton)
+ [Java] For consistency the global variable getters and setters use the JavaBean
+ property design pattern like member variables always have. This means if you are
+ wrapping a variable called foo, the getter is called getFoo() and the setter is
+ called setFoo(). Before the recent changes to the Java module the getters and
+ setters were called get_foo() and set_foo(). If you really want the original
+ function names use the %rename directive like this: %rename(_foo) Foo;
+
+07/31/2002: beazley
+ Fixed casting problem with multiple inheritance. If you had this,
+
+ class foo {};
+ class bar : public foo {};
+ class baz : public foo {};
+ class spam : public bar, public baz {};
+
+ then the wrappers wouldn't compile due to an ambiguous cast.
+ Reported by Art Yerkes.
+
+07/30/2002: cheetah (William Fulton)
+ [Java] Due to new static typechecking all pointers held in a Java long are part of
+ the internal workings and this pointer value in the Java long has become abstracted
+ data. The type wrapper constructor and getCPtr() methods are as such protected.
+ If you need to mess around with pointers from Java or for example create a proxy
+ class or type wrapper class around a null pointer, add a function/constructor
+ to do so with the %javacode typemap. You can also make getCPtr() public again with
+ the %javagetcptr typemap.
+
+07/30/2002: cheetah (William Fulton)
+ [Java] Fixes for %typemap(ignore). In particular when ignoring the last parameter
+ in a function. Also for all parameters in constructors. These mods have also fixed
+ multi-argument typemaps for proxy classes - SF 581791.
+
+07/30/2002: cheetah (William Fulton)
+ [Java] %newobject (replacement for %new) now implemented for Java.
+
+07/29/2002: beazley
+ Fixed problem with typemap copies, %apply, and %clear inside
+ C++ namespaces.
+
+07/28/2002: cheetah (William Fulton)
+ [Java] The JNI class now has package access as the class modifier
+ has been changed from "public" to nothing. This has been done
+ as this class is now more for the internal workings of SWIG since the module
+ class has static type checking for all types.
+
+ *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
+
+ Backwards compatibility can be achieved by using the %jniclassclassmodifier
+ pragma to change it back to "public".
+
+07/28/2002: cheetah (William Fulton)
+ [Java] Proxy/Shadow classes are generated by default. The -proxy and
+ -shadow command line options are deprecated. If you want to use the
+ low-level functional interface then use the new -noproxy commandline option.
+
+ *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
+
+07/28/2002: cheetah (William Fulton)
+ [Java] Remaining pragmas shakeup. These were the remaining pragmas and their
+ new names where changed:
+
+ modulebase
+ modulecode
+ moduleclassmodifiers
+ moduleimport => moduleimports
+ moduleinterface => moduleinterfaces
+
+ The moduleimports works slightly differently to how the moduleimport pragma worked.
+ Now it actually takes code which gets placed before the class definition so the
+ whole import statement has to be given, for example:
+
+ %pragma(java) moduleimports=%{
+ import java.io.*;
+ import java.math.*;
+ %}
+
+ The moduleinterfaces is slightly different to the old moduleinterface in that if
+ more than one interface is required they must be comma separated in one use of
+ the pragma, for example:
+
+ %pragma(java) moduleinterfaces="Serializable, MyInterface"
+
+ These last two pragmas are consistent with the javainterfaces and javaimports
+ typemap.
+
+ A similar set of pragmas has been introduced, namely:
+
+ jniclassbase
+ jniclasscode
+ jniclassclassmodifiers
+ jniclassimport
+ jniclassinterface
+
+ These work in the same way as their module counterparts. Note that previously
+ the moduleXXX pragmas worked on the old module class which is now called the
+ JNI class (the class with the native functions). The jniclassXXX pragmas now
+ work on the new module class (the class that has all the global functions and
+ global variable getters and setters when using proxy classes, plus all other
+ remaining functions when using the low-level procedural interface).
+
+ In summary the contents of the pragmas make up a class like this:
+
+ <jniclassimports>
+ <jniclassmodifiers> class modulename extends <jniclassbase> implements <jniclassinterfaces> {
+ <jniclasscode>
+ ... SWIG generated functions ...
+ }
+}
+ *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
+
+07/28/2002: cheetah (William Fulton)
+ [Java] Deprecated modulemethodmodifiers pragma and replaced with
+ a better %feature based directive called %javamethodmodifiers.
+ A useful example would be for synchronisation in multi-threaded apps:
+
+ %javamethodmodifiers foo(int a) "public synchronized";
+
+ Changes this function from the default ("public") to "public synchronized".
+
+ *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
+
+07/26/2002: beazley
+ Several directives now allow optional configuration parameters.
+ These include:
+
+ %module(name="value", name="value", ...) modulename
+ %import(name="value", ...) "filename.i"
+ %extend(name="value", ...) classname {
+ ...
+ }
+
+ These currently have no effect and are reserved for
+ future expansion.
+
+07/26/2002: beazley
+ Enhancements to smart-pointer handling. SWIG only provides
+ extra support for a smart-pointer if operator->() returns
+ a proper pointer. For example:
+
+ Foo *operator->();
+
+ If operator->() returns an object by value or reference,
+ then SWIG examines the returned object to see if it also
+ implements operator->(). If so, SWIG chases operator->()
+ until it can find one that returns a pointer. This allows
+ cases like this to work:
+
+ class Foo {
+ public:
+ void blah();
+ };
+
+ class Bar {
+ ...
+ Foo *operator->();
+ ...
+ };
+
+ class Spam {
+ ...
+ Bar operator->();
+ ...
+ };
+
+ For example:
+
+ >>> s = Spam()
+ >>> s.blah() # Invokes Foo::blah()
+
+ The s.blah() call actually invokes:
+
+ ((s.operator->()).operator->())->blah();
+
+07/26/2002: beazley
+ Fixed a bug with typedef and references. For example:
+
+ typedef Foo & FooRef;
+ FooRef blah();
+
+ Previous versions of SWIG generated code that wouldn't
+ compile.
+
+07/25/2002: beazley
+ Wrapping of static methods has been improved in proxy classes. In older
+ versions of SWIG, if you had this:
+
+ class Foo {
+ public:
+ static void bar();
+ };
+
+ The static method was only available as a function Foo_bar(). For example:
+
+ >>> Foo_bar()
+
+ Now, the static method can also be invoked through an instance like this:
+
+ >>> f = Foo()
+ >>> f.bar() # Invokes static method
+
+ This works with all versions of Python. Additionally, for Python-2.2,
+ the static method can be invoked as:
+
+ >>> Foo.bar()
+
+ The old-style function is still support for backwards compatibility. If
+ you care about making your code across different versions of Python,
+ either use Foo_bar() or access the method through an instance.
+
+07/25/2002: beazley
+ Changes to the Python module. Proxy classes now utilize new Python-2.2
+ features including properties and static methods. However, these features
+ are supported in a way that provides backwards compatibility with older
+ Python versions. In other words, proxy classes work with all versions
+ of Python and only use new features when running on Python-2.2.
+
+
+07/25/2002: beazley
+ Modified %extend so that overloaded methods can be added. For example:
+
+ %extend Foo {
+ void bar(int x) { };
+ void bar(char *s) { };
+ ...
+ }
+
+ This works with both C++ *and* C.
+
+07/24/2002: cheetah (William Fulton)
+ [Java] More new typemaps so that the Java proxy classes and type wrapper classes
+ can be further tailored by users. These are the default code for generating the
+ finalize() methods (proxy classes only) and the getCPtr() methods for proxy
+ classes and type wrapper classes:
+
+ %typemap(javafinalize) SWIGTYPE %{
+ protected void finalize() {
+ _delete();
+ }
+ %}
+
+ %typemap(javagetcptr) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [] %{
+ public static long getCPtr($javaclassname obj) {
+ return obj.swigCPtr;
+ }
+ %}
+
+ The javagetcptr typemap will enable users to handle Java null by overriding
+ this typemap - a requested feature.
+
+ The -nofinalize commandline option has been deprecated. The javafinalize
+ typemap is more powerful as it will allow the removal of the finalize methods
+ for all or any one or more particular proxy class.
+
+07/23/2002: cheetah (William Fulton)
+ [Java] The getCPtrXXX() function has been changed to a static function and
+ is now of the form:
+
+ protected static long getCPtr(XXX obj) {...}
+
+ This is a requested change which will allow Java null pointers to be used as null
+ can be passed in for obj. However, to achieve this the appropriate code must be
+ written using the new javagetcptr typemap directive.
+
+ *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
+
+ Backwards compatibility can be achieved by adding this function back in using the
+ new javacode typemap:
+
+ %typemap(javacode) SWIGTYPE %{
+
+ // SWIG-1.3.12 and SWIG-1.3.13
+ public long getCPtr$javaclassname() {
+ return swigCPtr;
+ }
+ // SWIG-1.3.11 and earlier
+ public long getCPtr() {
+ return swigCPtr;
+ }
+
+ %}
+
+
+07/23/2002: cheetah (William Fulton)
+ [Java] New directive to control constant code generation - %javaconst.
+ The default handling for handling constants is to get the value through
+ a JNI call, eg
+
+ #define YELLOW 5
+ #define BIG 1234LL
+
+ results in:
+
+ public final static int YELLOW = modulename.get_YELLOW();
+ public final static long BIG = modulename.get_BIG();
+
+ Earlier versions of the Java module initialised the value using the C value:
+
+ public final static int YELLOW = 5;
+ public final static long BIG = 1234LL;
+
+ This works in most cases, but the value for BIG won't compile as 1234LL is not
+ valid Java code and this is one of the reasons why the default is now to get the
+ values through a JNI call. The side effect is that these 'constants' cannot be used
+ in switch statements. The %javaconst directive allows one to specify the
+ way the constant value is initialised and works like other %feature
+ directives, eg
+
+ %javaconst(0); // all constants from this point on are initialised using the C value
+ %javaconst(1) BIG; // just BIG initialised using JNI call (must be parsed before BIG is defined)
+
+07/23/2002: beazley
+ *** IMPORTANT CHANGES TO THE PYTHON MODULE ***
+
+ (1) The Python module now enables shadow/proxy classes by default.
+ This means that two files are always created by SWIG. For
+ instance, if you have this:
+
+ // file: foo.i
+ %module foo
+ ...
+
+ Then swig generates two files "foo_wrap.c" and "foo.py".
+
+ (2) The name of the low-level C extension module has been changed
+ to start with a leading underscore. This means that you have
+ to compile the module as follows:
+
+ $ cc -c -I/usr/local/include/python2.2 foo_wrap.c
+ $ cc -shared foo_wrap.o $(OBJS) -o _foo.so
+ ^^^^
+ note extra underscore
+
+ This naming scheme is consistent with other Python modules that
+ utilize extension code. For instance, the socket module consists
+ of "_socket.so" and "socket.py". In previous versions of SWIG,
+ the shared object file was named "foocmodule.so".
+
+ (3) A new directive can be used to insert Python code into
+ the corresponding .py file. For example:
+
+ %pythoncode %{
+ def foo():
+ print "Hello World"
+ %}
+
+ This directive allows you to create modules as a mix of C and Python.
+ Python code is seamlessly added to the module.
+
+ (4) The -shadow command line option is deprecated. This is turned on
+ by default.
+
+ (5) To disable the generation of the extra python file, use the "-noproxy"
+ command line option.
+
+ *** POTENTIAL INCOMPATIBILITY ***
+ This change will likely break the build environment of projects that
+ utilize shadow classes. To fix this, you probably only need to
+ change the name of the target .so file. For example, if you have
+ Makefile information like this:
+
+ TARGET = examplecmodule.so
+
+ Just change it to:
+
+ TARGET = _example.so
+
+ *** DOCUMENTATION UPDATE ***
+ The file Doc/Manual/Python.html has been updated to describe these changes.
+
+
+07/23/2002: beazley
+ Added -noextern option. If supplied, SWIG will not generate
+ extra extern declarations. This is sometimes an issue on
+ non-unix platforms.
+
+07/23/2002: beazley
+ Added a warning for ignored friend functions.
+
+07/23/2002: beazley
+ Fixed [ 574498 ] -proxy and %include "pointer.i" clash.
+ Reported by David Creasy.
+
+07/23/2002: beazley
+ Fixed [ 576103 ] global destruction warning with shadow.
+ Perl extensions should no longer report the warning
+
+ "Use of uninitialized value during global destruction."
+
+ when running with "perl -w". Reported by
+ Brett Williams.
+
+07/23/2002: beazley
+ In C++ mode, SWIG now always defines namespace std. By default,
+ it's empty. However, this will silence errors from programs
+ that include statements such as "using namespace std;".
+ This fixes Bug [ 584017 ] using namespace std generates error.
+ Reported by Joseph Winston.
+
+07/22/2002: beazley
+ Added a new warning message for %apply. If you use %apply but no typemaps
+ are defined, you will get a warning message. This should help with
+ problems like this:
+
+ %apply char *OUTPUT { ... };
+
+ In old versions of SWIG, this silently did nothing. Now you get an error like this:
+
+ file:line. Warning. Can't apply (char *OUTPUT). No typemaps are defined.
+
+07/22/2002: cheetah (William Fulton)
+ [Java] Started Java pragma deprecation. Replacements use %typemap based
+ directives and enable proxy classes and the new type wrapper classes to be
+ tailored in various ways. These are the new typemaps:
+
+ %typemap(javabase) - base (extends) for Java class
+ %typemap(javaclassmodifiers) - class modifiers for the Java class: default is "public"
+ %typemap(javacode) - java code is copied verbatim to the Java class
+ %typemap(javaimports) - import statements for Java class
+ %typemap(javainterfaces) - interfaces (extends) for Java class
+
+ And these are the %pragma directives being deprecated:
+ allshadowbase
+ allshadowclassmodifiers
+ allshadowcode
+ allshadowimport
+ allshadowinterface
+ shadowbase
+ shadowclassmodifiers
+ shadowcode
+ shadowimport
+ shadowinterface
+
+ Note that it is possible to target a particular proxy class:
+ %typemap(javaimports) Foo "import java.util.*";
+ or a particular type wrapper class:
+ %typemap(javaimports) double* "import java.math.*";
+ Note that $javaclassname in these typemaps are substituted with either the proxy
+ classname when using proxy classes or the SWIGTYPE class name.
+
+07/18/2002: cheetah (William Fulton)
+ [Java] Java module overhaul to implement static type checking of all
+ types.
+
+ 1) Changes when using Java Proxy classes
+ ----------------------------------------
+
+ Previously when wrapping global functions:
+
+ class SomeClass{};
+ void foo(SomeClass* s);
+ SomeClass* bar();
+
+ The native method prototypes used a long for pointers and looked like this:
+
+ public class modulename {
+ ...
+ public final static native void foo(long jarg1);
+ public final static native long bar();
+ }
+
+ and unlike member functions of a C++ class there was no wrapper around the native calls
+ to make the use of them more user friendly. They would be used from Java like this:
+
+ SomeClass s = new SomeClass(modulename.bar(), false);
+ modulename.foo(s.getCPtrSomeClass());
+
+ Note that the following will have the same effect, but then it would not have
+ been possible to call any proxy member functions in SomeClass:
+
+ long s = modulename.bar();
+ modulename.foo(s);
+
+ Now wrapper functions are generated:
+
+ public class modulename {
+ public static void foo(SomeClass s) {
+ // calls the native function
+ }
+
+ public static SomeClass bar() {
+ // calls the native function
+ }
+ }
+
+ Which means these functions can now be used more naturally with proxy classes:
+
+ SomeClass s = modulename.bar();
+ modulename.foo(s);
+
+ 2) Changes when not using Java Proxy classes
+ --------------------------------------------
+
+ The so called low-level interface was rather low-level indeed. The
+ new static type checking implementation makes it less so but it remains a
+ functional interface to the C/C++ world. Proxy classes are the obvious way to use
+ SWIG generated code, but for those who want a functional interface all non-primitive
+ types now have a simple Java class wrapper around the C/C++ type. Pointers and
+ references to primitive types are also wrapped by type wrapper classes. The type
+ wrapper classnames are based on the SWIG descriptors used by the other language
+ modules. For example:
+
+ C/C++ type Java type wrapper class name
+ ---------- ----------------------------
+ int* SWIGTYPE_p_int
+ double** SWIGTYPE_p_p_double
+ SomeClass* SWIGTYPE_p_SomeClass
+ SomeClass& SWIGTYPE_p_SomeClass
+ SomeClass SWIGTYPE_p_SomeClass
+
+ Note that everything wrapped by SWIG is accessed via a pointer even when wrapping
+ functions that pass by value or reference. So the previous example would now be
+ used like this:
+
+ SWIGTYPE_p_SomeClass s = example.bar();
+ example.foo(s);
+
+ Note that typedefs that SWIG knows about are resolved, so that if one has
+
+ class Foo{};
+ typedef Foo Bar;
+
+ then any use of Bar will require one to use SWIGTYPE_p_Foo;
+
+ Some considerations:
+ Make sure you make a firm decision to use either proxy classes or the functional
+ interface early on as the classnames are different.
+
+ 3) Pointers and non-parsed types
+ --------------------------------
+ Sometimes SWIG cannot generate a proxy class. This occurs when the definition of
+ a type is not parsed by SWIG, but is then used as a variable or a parameter.
+ For example,
+
+ void foo(Snazzy sds);
+
+ If SWIG has not parsed Snazzy it handles it simply as a pointer to a Snazzy.
+ The Java module gives it a type wrapper class around the pointer and calls it
+ SWIGTYPE_p_Snazzy. In other words it handles it in the same manner as types are
+ handled in the low-level functional interface. This approach is used for all
+ non-proxy classes, eg all pointer to pointers and pointers to primitive types.
+
+ 4) Backwards compatibility
+ -----------------------
+ Backwards compatibility is not an issue if you have been using proxy classes and
+ no global variables/functions. Otherwise some changes will have to be made.
+ The native methods still exist but they are now in a JNI class, which is called
+ modulenameJNI. As this class is really part of the internal workings,
+ it should not be required so the class has become protected. Some pragmas/directives
+ will hopefully be added to help with backwards compatibility.
+
+ *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
+
+07/18/2002: beazley
+ Modified wrapping of uninstantiated templates returned by
+ value. Just to be safe, they are now wrapped by SwigValueWrapper<>
+ just in case they don't define a default constructor. This
+ would be used if you had code like this
+
+ Foo<int> blah();
+ void moreblah(Foo<int> x);
+
+ but you didn't instantiate Foo<int> using %template.
+ We should probably add a warning for this.
+
+07/17/2002: beazley
+ Added an error check to detect shadowed template paramaters.
+ For example:
+
+ template<class T> class Foo {
+ public:
+ int T;
+ };
+
+ This results in an error, not a warning. This warning is
+ also needed to fix some rather insidious problems like
+ this:
+
+ struct T {
+ int blah;
+ };
+
+ template<class T> class Foo {
+ public:
+ typedef T Traits; // Which T is this????
+ };
+
+ In this case, the template parameter T shadows the outer
+ structure (which is what you want).
+
+07/16/2002: beazley
+ Improved support for templates with integer arguments. SWIG is
+ much more aware of situations such as this:
+
+ const int Size = 100;
+
+ %template(Foo100) Foo<100>;
+ void bar(Foo<Size> *x); // Knows that Foo<Size> is the same as Foo<100>;
+
+07/15/2002: beazley
+ Fixed bug with %feature/%ignore/%rename and namespaces.
+ For example:
+
+ %ignore Foo::Bar
+ namespace Foo {
+ class Bar {
+ ...
+ };
+ }
+
+ Reported by Marcelo Matus.
+
+07/09/2002: beazley
+ Added parsing support for constructors that try to catch
+ exceptions in initializers. For example:
+
+ class Foo {
+ Bar b;
+ public:
+ Foo(int x) try
+ : b(x) { ... }
+ catch(int) {
+ ...
+ }
+ }
+
+ This has no effect on the generated wrappers. However, the try and catch
+ parts of the declaration are ignored. See Stroustrup, 3rd Ed, section
+ 14.4.6.1 for details.
+
+07/06/2002: beazley
+ Fixed bug in template symbol table management. This fixes
+ two bugs. First, mixing abstract methods, templates, and
+ inheritance no longer generates a failed assertion.
+
+ template <class T>
+ class A {
+ public:
+ virtual void foo() = 0;
+ };
+
+ template <class T>
+ class B : public A<T>
+ {
+ };
+ %template(A_int) A<int>;
+ %template(B_int) B<int>;
+
+ This fix also fixes a subtle problem with default values and
+ templates. For example:
+
+ template <class C>
+ struct B {
+ typedef unsigned int size_type;
+ static const size_type nindex = static_cast<size_type>(-1);
+ void foo(size_type index = nindex);
+ };
+
+ Bugs reported by Marcelo Matus.
+
+
+07/05/2002: ljohnson (Lyle Johnson)
+ [Ruby] Changed the definition of the SWIG_ConvertPtr() function
+ for the SWIG/Ruby runtime support so that it looks like the
+ Python version. If the last argument (flags) is non-zero,
+ SWIG_ConvertPtr() will raise an exception for type mismatches
+ as before. If flags is zero, this function will return -1 for
+ type mismatches without raising an exception.
+
+ *** POTENTIAL INCOMPATIBILITY FOR RUBY MODULE ***
+
+07/04/2002: beazley
+ Overloaded functions/methods/constructors now work in many language
+ modules. The support is completely transparent--just call the
+ function normally and SWIG will dispatch to the correct implementation.
+ There are a variety of issues associated with this. Please refer
+ to the overloading section of Doc/Manual/SWIGPlus.html for details.
+ *** NEW FEATURE ***
+
+07/04/2002: beazley
+ Fixed a bug with namespaces, enums, and templates. For example:
+
+ namespace hello {
+ enum Hello { Hi, Hola };
+
+ template <Hello H>
+ struct traits
+ {
+ typedef double value_type;
+ };
+
+ traits<Hi>::value_type say_hi()
+ {
+ return traits<Hi>::value_type(1);
+ }
+ }
+ SWIG wasn't generating wrappers that properly qualified
+ traits<Hi>. Reported by Marcelo Matus.
+
+06/30/2002: beazley
+ Supplied array variable typemaps for Tcl module. If you have a
+ variable like this:
+
+ int foo[10];
+
+ then a set function like this is generated:
+
+ void foo_set(int *x) {
+ memmove(foo,x,10*sizeof(int));
+ }
+
+06/30/2002: beazley
+ New %fragment directive. When writing typemaps, it can be easy to
+ get carried away and write a lot of code. However, doing so causes
+ tremendous code bloat. A common way to solve this is to write
+ helper functions. For example:
+
+ %{
+ void some_helper_function() {
+ ...
+ }
+ %}
+
+ %typemap(in) type {
+ some_helper_function(...);
+ }
+
+ The only problem with this is that the wrapper file gets polluted
+ with helper functions even if they aren't used. To fix this,
+ a new fragment directive is available. For example:
+
+ (corrected typo in line below - 06/26/2008)
+ %fragment("type_header","header") %{
+ void some_helper_function() {
+ ...
+ }
+ %}
+
+ %typemap(in, fragment="type_header") type {
+ some_helper_function(...);
+ }
+
+ In this case, the code fragment is only emitted if the typemap is
+ actually used. A similar capability is provided for declaration
+ annotation and the %feature directive. For example:
+
+ %feature("fragment","type_header") SomeDeclaration;
+
+ The first argument to %fragment is the fragment name. The second argument
+ is the file section where the fragment should be emitted.
+
+ The primary use of this directive is for writers of language modules
+ and advanced users wanting to streamline typemap code.
+
+ *** EXPERIMENTAL NEW FEATURE ***
+
+06/30/2002: beazley
+ Supplied memberin typemaps for all arrays in an attempt to eliminate
+ confusion about their use.
+
+06/29/2002: beazley
+ Experimental support for smart-pointers. When a class defines
+ operator->() like this
+
+ class Foo {
+ ...
+ Bar *operator->();
+ ...
+ };
+
+ SWIG locates class Bar and tries to wrap its member variables and
+ methods as part of Foo. For example, if Bar was defined like this:
+
+ class Bar {
+ public:
+ int x;
+ int spam();
+ };
+
+ You could do this (in the target language):
+
+ f = Foo()
+ f.x = 4 # Accesses Bar::x
+ f.spam() # Accesses Bar::spam
+
+ The primary use of this feature is to emulate the behavior of C++
+ smart-pointers---which allow attributes to accessed transparently
+ through operator->.
+
+ This feature is supported automatically in SWIG---no special directives
+ are needed. To disable this behavior. Use %ignore to ignore
+ operator->.
+ *** NEW FEATURE ***
+
+06/26/2002: beazley
+ Deprecated the %except directive. %exception should be used instead.
+
+06/25/2002: beazley
+ Major cleanup of the modules directory. Eliminated most
+ header files, consolidated module code into single files.
+
+06/24/2002: beazley
+ Reworked the instantiation of language modules. All language
+ modules must now define a factory function similar to this:
+
+ extern "C" Language *
+ swig_python(void) {
+ return new PYTHON();
+ }
+
+ This function is then placed in a table and associated with
+ a command line option in swigmain.cxx.
+
+ This approach has a number of benefits. It decouples the
+ SWIG main program from having to know about the class
+ definitions for each module. Also, by using a factory
+ function, it will be easier to implement dynamic loading
+ of modules (simply load the file and invoke the factory
+ function).
+
+06/24/2002: beazley
+ Fixed syntax error for reference conversions. For example:
+
+ operator Foo &();
+
+06/24/2002: beazley
+ Fixed syntax error for operator new[] and operator delete[].
+
+06/24/2002: beazley
+ Fixed code generation problem for constants and default arguments
+ involving templates.
+
+06/19/2002: ljohnson (Lyle Johnson)
+ [Ruby] Fixed a bug for the '-feature' command line argument;
+ that setting was effectively being ignored and so the feature
+ name was always set equal to the module name.
+
+06/17/2002: beazley
+ Fixed problems with static members and enums in templates.
+
+Version 1.3.13 (June 17, 2002)
+==============================
+
+06/16/2002: beazley
+ Fixed a bug with __FILE__ expansion in the preprocessor. On Windows,
+ the backslash (\) is now converted to (\\) in the string literal
+ used for __FILE__. Reported by Steve Glaser.
+
+06/14/2002: beazley
+ Fixed warning message about 'name private in this context'. The
+ warning is only generated for public methods. Reported by
+ Scott Michel.
+
+06/14/2002: beazley
+ Fixed some problems related to template instantiation
+ and namespaces. When SWIG expands a template, it does
+ so with fully resolved types. For example, if you have this:
+
+ template<class T> class foo { };
+ typedef double Double;
+ %template(foo_d) foo<Double>;
+
+ then, it is handled as foo<double> in the typesystem.
+ This fixes a number of subtle problems with inheritance
+ and templates.
+
+06/14/2002: ljohnson (Lyle Johnson)
+ [Ruby] Added missing bool typemaps for INPUT, OUTPUT and
+ INOUT in Lib/ruby/typemaps.i.
+
+05/29/2002: cheetah (William Fulton)
+ [Java] Fix for a couple of broken pragmas.
+
+05/29/2002: cheetah (William Fulton)
+ Fix for unnecessary cast when wrapping global variable where
+ the type is not parsed by SWIG - Java variables example
+ failure as reported by Larry Virden.
+
+06/10/2002: beazley
+ Modified %template to allow for empty instantiations.
+
+ %template() foo<int,int>;
+
+ This registers foo<int,int> with the type system, but
+ doesn't wrap it (same as %ignore). This may only be a
+ temporary measure. SWIG might be able to automatically
+ instantiate templates in certain cases.
+
+06/10/2002: beazley
+ Fixed function prototype problems with Tcl 8.4
+
+06/09/2002: beazley
+ Fixed problem with templates and location of base classes.
+ This one is a little mind-bending, but here is an example
+ that illustrates:
+
+ template <class ArgType, class ResType>
+ struct traits
+ {
+ typedef ArgType arg_type;
+ typedef ResType res_type;
+ };
+
+ template <class ArgType, class ResType>
+ struct Function
+ {
+ };
+
+ template <class AF, class AG>
+ struct Class : Function<typename traits<AF, AG>::arg_type,
+ typename traits<AF, AG>::res_type>
+ {
+ };
+
+ %template(traits_dd) traits <double, double>;
+ %template(Function_dd) Function <double, double>;
+ %template(Class_dd) Class <double, double>;
+
+
+ In this example, the base class of 'Class' is determined from
+ the Function template, but the types are obtained through typedefs.
+ Because of this, SWIG could not locate the wrapped base class
+ (Function<double,double>). Should be fixed in 1.3.13 even
+ though I can think of a million other things that might
+ also be broken.
+
+06/07/2002: beazley
+ Fixed a problem with conversion operators. If you had an
+ operator like this,
+
+ operator double() const;
+
+ SWIG was ommitting the "const" qualifier. This affected
+ %rename and other directives. Reported by Zhong Ren.
+
+06/07/2002: beazley
+ Lessened the strictness of abstract class checking. If
+ you have code like this:
+
+ class Foo {
+ public:
+ virtual int method() = 0;
+ };
+
+ class Bar : public Foo {
+ public:
+ Bar();
+ ~Bar();
+ };
+
+ SWIG will go ahead and generate constructor/destructors
+ for Bar. However, it will also generate a warning message
+ that "Bar" might be abstract (since method() isn't defined).
+ In SWIG-1.3.12, SWIG refused to generate a constructor at all.
+
+06/07/2002: beazley
+ Change to %template directive. If you specify something like this:
+
+ %template(vi) std::vector<int>;
+
+ It is *exactly* the same as this:
+
+ namespace std {
+ %template(vi) vector<int>;
+ }
+
+ SWIG-1.3.12 tried to instantiate the template outside of the namespace
+ using some trick. However, this was extremely problematic and full
+ holes. This version is safer.
+
+06/07/2002: beazley
+ Fixed bug with scope qualification and templates. For example:
+
+ A<B::C>::DD
+
+ Before, this was separated as scopes A<B, C>, and DD. Fixed now.
+
+06/06/2002: beazley
+ Allow the following syntax:
+
+ class A { };
+ struct B : A { ... };
+
+ A base class without a specifier is assumed to be public for a struct.
+
+06/06/2002: beazley
+ Fixed syntax error with template constructor initializers.
+ Reported by Marcelo Matus.
+
+06/06/2002: beazley
+ Fixed bug with default template arguments.
+ Reported by Marcelo Matus.
+
+06/05/2002: beazley
+ Fixed subtle problems with %rename directive and template
+ expansion.
+
+ Code like this should now work:
+
+ %rename(blah) foo<double>::method;
+ ...
+ template<class T> class foo {
+ public:
+ void method();
+ };
+
+ %template(whatever) foo<double>;
+
+06/05/2002: beazley
+ Resolved some tricky issues of multi-pass compilation and
+ and inheritance. The following situation now generates
+ an error:
+
+ class Foo : public Bar {
+ ...
+ };
+
+ class Bar {
+ ...
+ };
+
+ The following code generates a warning about incomplete classes.
+
+ class Bar;
+ class Foo : public Bar { };
+
+ The following code generates a warning about an undefined class.
+
+ class Foo : public Bar { }; // Bar undefined
+
+ This fixes a failed assertion bug reported by Jason Stewart.
+
+06/05/2002: ljohnson
+ [Ruby] Added a warning message for the Ruby module about the lack
+ of support for multiple inheritance. Only the first base class
+ listed is used and the others are ignored. (Reported by Craig
+ Files).
+
+06/03/2002: beazley
+ Fixed a bug with struct declarations and typedef. For example:
+
+ typedef struct Foo Foo;
+ struct Foo {
+ ...
+ };
+
+ A few other subtle struct related typing problems were
+ also resolved.
+
+Version 1.3.12 (June 2, 2002)
+=============================
+
+05/30/2002: beazley
+ Fixed problem related to forward template class declarations and
+ namespaces. Bug reported by Marcelo Matus.
+
+05/30/2002: beazley
+ Added 'make uninstall' target. Contributed by Joel Reed.
+
+05/29/2002: beazley
+ Fixed rather insidious bug with %rename, %feature and template specialization.
+ For example:
+
+ %exception vector::__getitem__ {
+ ... some exception ...
+ }
+
+ template<class T> class vector {
+ ...
+ T __getitem__(int index); // Fine
+ ...
+ };
+
+ template<> class vector<int> {
+ ...
+ T __getitem__(int index); // Oops.
+ ...
+ };
+
+ Now, the %exception directive (and other features) should correctly apply to
+ both vector and specializations.
+
+05/29/2002: beazley
+ Subtle changes to %template() directive. Template arguments are now
+ reduced to primitive types in template matching. For example:
+
+ template<class T> class vector<T *> {
+ ... partial specialization ...
+ }
+
+ typedef int *IntPtr; // Gross typedef
+
+ // Gets the above partial specialization
+ %template(vectorIntPtr) vector<IntPtr>;
+
+ This change is extremely subtle, but it fixes a number of potential
+ holes in Luigi's STL library modules. For example:
+
+ typedef int Integer;
+ %template(vectori) vector<int>;
+
+05/29/2002: beazley
+ Fixed rather insidious typemap bug related to const. const
+ was being discarded through typedefs.
+
+05/29/2002: ljohnson (Lyle Johnson)
+ [Ruby] Added input typemaps for const references to primitive
+ types (in Lib/ruby/ruby.swg).
+
+05/29/2002: cheetah (William Fulton)
+ [Java] The java arrray support functions are enclosed by
+ a SWIG_NOARRAYS #define. Useful if not using arrays and
+ it is desirable to minimise the amount of compiled code.
+
+05/29/2002: cheetah (William Fulton)
+ [Java] Enums were not renamed when using %name or %rename
+ fix.
+
+05/28/2002: ljohnson
+ [Ruby] Modified the name of the wrapper functions for the
+ "new" singleton method and "initialize" instance method for
+ consistency with the other language modules. The wrapper name
+ for the function that implements "new" is alloc_classname and
+ the wrapper name for the function that implements "initialize"
+ is new_classname.
+
+
+05/27/2002: beazley
+ Changes to runtime. Pointer conversion/creation functions
+ now almost always have an extra "flags" argument. For
+ example:
+
+ SWIG_ConvertPtr(obj, void **, swig_type_info *ty, int flags);
+ ^^^^^^^^^^
+ This extra parameter is reserved for future expansion and will
+ be used for more control over pointers in future versions.
+
+05/27/2002: beazley
+ Fix for C++ classes with private assignment operators. It
+ is now possible to safely return objects like this by value.
+ Caveat: the class must provide a copy constructor.
+
+05/26/2002: beazley
+ -proxy option added to many language modules. This is the
+ same as -shadow. We are merely changing terminology.
+
+05/26/2002: beazley
+ [perl] Fixed some inconsistencies in the -package option.
+ -package merely sets the package name to be used on the
+ wrappers. It does not change the name of the shared library
+ file or the name of the generated .pm file. This was
+ broken at some point, but works again now.
+
+05/25/2002: beazley
+ [perl] Fixed [ 475452 ] memory leak in return-by-value.
+ Problem related to static member variables returning newly
+ allocated objects. Reported by Roy Lecates.
+
+05/25/2002: beazley
+ [perl] Fixed [ 513134 ] %BLESSEDMEMBERS isn't always right.
+ Reported by Fleur Diana Dragan.
+
+05/25/2002: beazley
+ Fixed [ 540735 ] -importall and the -I option.
+
+05/25/2002: beazley
+ [guile] Fixed [ 532723 ] Default arg for char* can SegV.
+ Error in guile module. Reported by Brett Williams.
+
+05/25/2002: beazley
+ Subtle change to typemap application code. The "freearg"
+ typemap must exactly match up with the "in" or "ignore"
+ typemap. For example:
+
+ %typemap(in) (char *data, int len) { ... };
+ %typemap(freearg) char *data { ... };
+
+ void foo(char *data, int len);
+
+ In this case, the "in" typemap is applied, but the
+ freearg typemap is not. This is because the freearg
+ typemap doesn't match up with the input argument sequence.
+
+05/25/2002: beazley
+ Fixed [ 548272 ] Default argument code missing braces.
+ Reported by Brett Williams.
+
+05/25/2002: beazley
+ Fixed [ 547730 ] SwigValueWrapper needed for constructors.
+ Reported by William Fulton.
+
+05/25/2002: beazley
+ Undefined identifiers now evaluate to 0 when evaluating
+ preprocessor expressions. For example:
+
+ #if !FOO
+ ...
+ #endif
+
+ where FOO is undefined or set to some non-numeric value.
+
+ Fixes [ 540868 ] #if defined whatever - not parsed.
+ Reported by Adam Hupp.
+
+
+05/24/2002: beazley
+ SWIG now ignores the C++ 'export' keyword.
+
+05/23/2002: beazley
+ Some refinement of type-name mangling to account for pointers, arrays,
+ references, and other embedded type constructs.
+
+05/23/2002: beazley
+ Initial attempt at supporting template partial specialization. At
+ the very least, it is parsed and the classes are stored. Matching
+ of instantiations to specialized version is more limited and based on
+ the SWIG default typemap rules:
+
+ SWIGTYPE *
+ SWIGTYPE []
+ SWIGTYPE &
+
+ Now, why in the world would you want to use this feature? Other
+ than allowing for slightly modified class APIs, this capability is
+ primarily used to provide advanced wrapping support for STL-like
+ objects. It can also be mixed with typemaps. Here is an example:
+
+
+ /* Generic version */
+ template<class T> class vector {
+ %typemap(in) vector<T> * {
+ // A container of objects
+ }
+ };
+ /* Partial specialization (pointers) */
+ template<class T> class vector<T *> {
+ %typemap(in) vector<T> * {
+ // A container of pointers to objects.
+ }
+ };
+ /* Specialization (integers). */
+ template<> class vector<int> {
+ %typemap(in) vector<int> * {
+ // A container of integers.
+ }
+ };
+
+ *** EXPERIMENTAL FEATURE ***
+
+05/23/2002: beazley
+ Enhancement to typemaps. Normally, typemap variables are
+ renamed to avoid conflicts. For example:
+
+ %typemap(in) int * (int temp) {
+ $1 = &temp;
+ }
+
+ This results in code that creates and uses variables "temp1","temp2",
+ "temp3" and so forth depending on how many times the typemap is used.
+ Sometimes you want a single variable instead. To do that, using
+ the following naming scheme:
+
+ %typemap(in) int *(int _global_temp) {
+ }
+
+ Is this case, a single variable _global_temp is emitted in the
+ wrapper functions. It is shared across all typemaps. Repeated
+ typemaps do not replicate the variable---they use the first one
+ emitted.
+ *** NEW FEATURE ***
+
+05/23/2002: beazley
+ Minor enhancement to typemaps. If you have this code,
+
+ %typemap(in) Foo (int somevar = 3) {
+ ...
+ }
+
+ the default value for somevar is now emitted into the wrapper code.
+
+05/22/2002: beazley
+ Fixed %extend to be better behaved in namespaces. If you have code
+ like this:
+
+ namespace foo {
+ struct bar {
+ %extend {
+ void blah();
+ };
+ };
+ }
+
+ SWIG matches the blah() method to a C function named
+ void foo_bar_blah(foo::bar *self).
+
+ This is consistent with the non-namespace version.
+ Bug reported by Marcelo Matus.
+
+05/22/2002: beazley
+ New library files: cpointer.i, carrays.i, cmalloc.i. These
+ provide access to C pointers and memory allocation functions.
+ See Doc/Manual/Library.html for details.
+
+05/22/2002: cheetah (William Fulton)
+ [Java] C type char no longer maps to Java type byte, but to Java type char.
+ It is now treated as a character rather than a signed number. This fits in
+ with the other language modules and is a more natural mapping as char* is
+ mapped as a string of characters. Note that the C signed char type is still
+ mapped to a Java byte.
+
+ *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
+
+05/22/2002: cheetah (William Fulton)
+ [Java] Improved constants wrapping. Constants (#define and %constant) values
+ are now obtained through a JNI call. Previously the value was compiled as
+ Java code, but this didn't work for all cases, eg #define 123ULL.
+
+05/22/2002: beazley
+ Fixed bogus error message with %extend directive and C++
+ access specifiers. Reported by Marcelo Matus.
+
+05/22/2002: beazley
+ Namespaces and enums now work correctly. For example:
+
+ namespace Foo {
+ enum Bar { A, B };
+ }
+
+ Bug reported by Marcelo Matus.
+
+05/21/2002: beazley
+ The %types directive can now be used to specify inheritance relationships
+ in the runtime type system. For example,
+
+ %types(Foo = Bar);
+
+ specifies that Foo isa Bar. Using this is potentially quite dangerous.
+ However, this is useful in certain cases (and in the SWIG library).
+
+05/20/2002: beazley
+ %nodefault and %makedefault directives now require a trailing semicolon.
+ For example:
+
+ %nodefault;
+ ...
+ %makedefault;
+
+ In addition both directives can take a class name. For example:
+
+ %nodefault Foo;
+
+ class Foo { /* No default constructor/destructor */
+ };
+
+ class Bar { /* Default constructor/destructor generated */
+ };
+
+ *** POTENTIAL INCOMPATIBILITY ***
+ If you don't use the trailing semicolon, things will mysteriously break.
+
+05/20/2002: beazley
+ More improvements to type system handling. SWIG now correctly handles
+ template names and parameters in a namespace. For example:
+
+ namespace foo {
+ template<class T> class bar { };
+ typedef int Integer;
+
+ void blah(bar<Integer> *x);
+ };
+
+ In the generated code, all of the typenames are properly qualified.
+
+05/17/2002: cheetah (William Fulton)
+ [Java] deprecated broken -jnic and -jnicpp commandline options. The C or C++
+ JNI calling convention is now determined from the -c++ commandline option.
+
+05/16/2002: cheetah (William Fulton)
+ [Java] The JCALL macros which exist so that the same typemaps can be used
+ for generating both the C and C++ JNI calling conventions no longer appear
+ in the generated code. This is because the output is now passed through the
+ SWIG preprocessor which does the macro expansion for either C or C++ (depending
+ on whether -c++ is passed on the SWIG commandline).
+
+ The generation of the functions used in the array typemaps have been adjusted
+ to take account of this. The side effect is that any typemaps which contained
+ JCALL macros within %{ %} brackets will have to be moved within {} brackets
+ so that the SWIG preprocessor can expand the macros.
+
+ *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
+
+05/13/2002: beazley
+ Class templates may now be used as template parameters. For example:
+
+ template<class T, template<class> class C> class Foo {
+ ...
+ };
+ template<class T> class Bar {
+ ...
+ };
+
+ %template(Fooi) Foo<int, Bar>;
+
+ SWIG doesn't really do anything special with this---it's just
+ another way of specifying a template parameter.
+
+05/13/2002: beazley
+ Minor refinement of template support. Template parameter names are no longer
+ required for types. For example:
+
+ template<bool> class Foo {
+ };
+
+ Obviously, names are required for template<class T>;
+
+05/12/2002: beazley
+ New macro expansion in typemaps. The sequence:
+
+ $descriptor(type)
+
+ Will expand into the SWIG type descriptor structor for
+ the given type. Type may be any abstract datatype.
+ For example:
+
+ $descriptor(int *)
+ $descriptor(int (*)(int,double))
+ $descriptor(vector<int> *)
+
+ Caveat: It is *NOT* currently legal to use other typemap
+ substitution variables in the macro. For example
+ $descriptor($1_type).
+
+ The primary purpose of this modification is to better
+ support typemaps for container objects or to allow typemaps
+ that might be performing type conversions.
+ *** NEW FEATURE ***
+
+05/11/2002: beazley
+ The wrapping of references to primitive types has been
+ changed as follows:
+
+ Arguments of type 'const primitive &' are now passed
+ by value as opposed to pointers. Return values of
+ type 'const primitive &' are returned as values instead of
+ pointers.
+
+ 'primitive' is any one of int, short, long, long long,
+ char, float, double, bool (as well as unsigned variants).
+
+ This change is being made to better support C++ wrapping--especially
+ code that makes use of templates and the STL.
+
+05/11/2002: beazley
+ The %template directive can now be used to access templates
+ in a namespace. For example:
+
+ namespace std {
+ template<class T> class complex {
+ T re, im;
+ public:
+ complex(T _r = T(), T _i = T()) : re(_r), im(_i) { }
+ T real() { return re; }
+ T imag() { return im; }
+ };
+ }
+
+ %template(complex) std::complex<double>;
+
+ Note: There are some very subtle namespace/symbol table
+ management issues involved in the implementation of this.
+ It may not work in certain cases.
+
+05/10/2002: beazley
+ Member template constructor support added. For example:
+
+ template<typename _T1, typename _T2>
+ struct pair {
+ _T1 first;
+ _T2 second;
+ pair() : first(_T1()), second(_T2()) { }
+ template<class _U1, class _U2> pair(const pair<_U1,_U2> &x);
+ };
+
+ To instantiate the template, use %template and %extend.
+ For example, this expands the constructor into a default
+ copy constructor:
+
+ %extend pair {
+ %template(pair) pair<_T1,_T2>;
+ }
+
+ Highly experimental. Other uses may be broken.
+
+05/10/2002: beazley
+ The %extend (%addmethods) directive no longer works unless
+ it appears in the public section of a class. An error
+ message is now generated (as opposed to a segmentation fault).
+
+05/09/2002: beazley
+ New %warnfilter() directive. This directive attaches a warning
+ filter to specific declarations and has the same semantics as
+ %rename, %ignore, %feature, and so forth. For example:
+
+ %warnfilter(501) foo; // Suppress overloaded warning
+ int foo(int);
+ int foo(double);
+
+ or
+
+ %warnfilter(501) Object::foo(double);
+ class Object {
+ public:
+ int foo(int);
+ int foo(double);
+ };
+
+ This feature only suppresses warnings in later stages of code
+ generation. It does not suppress warnings related to preprocessing
+ or parsing.
+ *** NEW FEATURE ***
+
+05/09/2002: beazley
+ SWIG now supports C99 variadic preprocessor macros. For example:
+
+ #define debugf(fmt,...) fprintf(stderr,fmt,__VA_ARGS__)
+
+ The argument "..." is used to indicate variable arguments which
+ are all placed into the special argument name __VA_ARGS__ in
+ the macro expansion.
+
+ SWIG also implements the GNU (##) extension for swallowing the
+ preceding comma when __VA_ARGS__ is empty. For example:
+
+ #define debugf(fmt,...) fprintf(stderr,fmt, ##__VA_ARGS__)
+
+ Here is how this is expanded:
+
+ debugf("%d", 3) --> fprintf(stderr,"%d",3)
+ debugf("Hello") --> fprintf(stderr,"Hello" )
+
+ (notice the deleted comma).
+ *** NEW FEATURE ***
+
+05/08/2002: samjam (Sam Liddicott)
+ Many changes to php module. Shadow classes are now implemented
+ entirely in native C and no need for php-code shadow wrappers
+ Populated template config.m4 and Makefile.in as needed by
+ phpize are generated.
+
+05/08/2002: ljohnson (Lyle Johnson)
+ [Ruby] A copy constructor is now turned into a "clone"
+ instance method (see Dave's change for copy constructors
+ dated 4/7/2002). This seems like the appropriate thing
+ to do for Ruby code.
+
+05/08/2002: ljohnson (Lyle Johnson)
+ [Ruby] Fixed [ 553864 ] Inline destructor code not written.
+
+05/08/2002: beazley
+ %ignore behaves better with constructors, destructors, and the
+ type system in general. For constructors and destructors,
+ %ignore now suppresses the creation of a default constructor
+ or destructor. For example:
+
+ %ignore ~Foo;
+ class Foo {
+ public:
+ Foo();
+ ~Foo();
+ ...
+ };
+
+ In SWIG-1.3.11, ~Foo() simply "disappeared" and the code generator
+ created a wrapper for a default destructor (as if it was never
+ declared in the interface). In SWIG-1.3.12, %ignore suppresses
+ the creation of a destructor if one is actually defined.
+
+ Similarly, even though a declaration is ignored, information
+ may still be needed to properly handle types. For example, here
+ is a very subtle error that is fixed by this change:
+
+ %ignore std::string; // Prevent class wrapping
+ namespace std {
+ class string {
+ ...
+ };
+ %typemap(in) string * {
+ ...
+ }
+ }
+
+ void foo(std::string *s); // Broken.
+
+ Before this fix, %ignore would cause the class definition to disappear.
+ This, in turn, would cause the typemap to be misapplied.
+
+05/08/2002: beazley
+ Minor changes to %rename, %ignore, %feature, and related directives
+ for better support of destructors. Destructors can now be precisely
+ tagged. For example:
+
+ %ignore Foo::~Foo;
+ %feature("action") ~Bar {
+ ...
+ }
+
+ *Developer warning*
+ Operations such as renaming and feature attachment for classes used to
+ be applied to destructors as well. For instance, if you did this:
+
+ %rename(Bar) Foo;
+
+ The operation applied to the class itself, the constructor, and
+ the destructor. This is no longer the case. Now such operations
+ will only apply to the class and the constructor. Note: if you
+ were relying on this for class renaming, be aware that renamed
+ classes should really only be handled at the level of the class itself
+ and not the level of individual declarations in the class (although
+ they can be renamed individually if needed). As far as I know,
+ the Language class is already taking care of this case correctly.
+
+05/07/2002: beazley
+ New set of tests. The Examples/test-suite/errors directory contains
+ tests that try to exercise all of SWIG's error and warning messages.
+
+05/07/2002: beazley
+ Start of a warning framework. Warning messages are now assigned numeric values
+ that are shown in warning messages. These can be suppressed using the
+ -w option. For example:
+
+ swig -w302 example.i
+ swig -w302,305 example.i
+
+ Alternatively, the #pragma preprocessor directive can be used to disable this:
+
+ #pragma SWIG nowarn=302
+ #pragma SWIG nowarn=302,305
+
+ Note: Since SWIG is a multi-pass compiler, this pragma should
+ only be used to change global settings of the warning filter. It should
+ not be used to selectively enable/disable warnings in an interface file.
+ The handling of #pragma occurs in the C++ preprocoessor and affects all
+ subsequent stages of compilation.
+
+ The -Wall option turns on all warnings and overrides any filters that
+ might have been set.
+
+ Warnings can be issued from an interface using %warn. For example:
+
+ %warn "110:%section is deprecated"
+
+ The first part of a warning message is an optional warning number.
+ A complete set of warning numbers is found in Source/Include/swigwarn.h.
+ *** NEW FEATURE ***
+
+05/07/2002: beazley
+ Internal parsing change. Directives to include files now use brackets [ ... ]
+ instead of { ... }.
+
+ %includefile "foo.i" [
+ ...
+ ]
+
+ The use of { ... } was a bad choice because they were included implicitly by
+ the preprocessor and made it impossible to properly detect legitimate missing '}'
+ errors.
+
+04/16/2002-
+05/02/2002: beazley
+ SWIG European Tour: Paris-Amsterdam-Bath.
+
+04/23/2002: beazley
+ The %addmethods directive has been renamed to %extend.
+ For example:
+
+ class Foo {
+ ...
+ };
+
+ %extend Foo {
+ int blah() { ... };
+ int bar() { ... };
+ ...
+ };
+
+ Motivation: the %addmethods directive can be used for many
+ other tasks including adding synthesized attributes, constructors,
+ and typemaps. Because of this, "addmethods" is somewhat misleading.
+ %extend more precisely describes this operation---extension of a
+ class or structure.
+
+ *** POTENTIAL INCOMPATIBILITY ***
+ %addmethods still works via a macro definition. However,
+ a warning message may be generated. Errors involving %addmethods
+ will actually refer to the %extend directive.
+
+04/23/2002: beazley
+ Further refinement of the type system. Typedef now
+ propagates through functions, pointers to functions,
+ and pointers to member functions.
+ For example:
+
+ typedef int Integer;
+ void foo(int (*x)(int), Integer (*y)(Integer));
+
+ In this case, arguments 'x' and 'y' have exactly
+ the same type (and would obviously accept objects
+ of either type).
+
+ Similarly, consider this:
+
+ class Foo {
+ };
+
+ typedef Foo Bar;
+ void bar(int (Foo::*x)(int), int (Bar::*y)(int));
+
+ In this case, arguments x and y are the same
+ type (via typedef).
+
+04/22/2002: beazley
+ SWIG now generates a warning message if any part of
+ an expression involves values from a private part of a class.
+ For example:
+
+ class Foo {
+ private:
+ static int X;
+ public:
+ void blah(int a, int b = X); // Warning
+ };
+
+ In this case, the default argument is ignored. There
+ are workarounds, but they are rather clumsy. For instance,
+ you might do this:
+
+ %feature("action") blah(int,int) {
+ if ($nargs == 1) {
+ result = blah(arg1);
+ } else {
+ result = blah(arg1,arg2);
+ }
+ }
+ void blah(int a, int b = 0);
+
+
+04/21/2002: beazley
+ Use of the %inline directive inside a namespace is
+ forbidden and now generates an error message. This is
+ not allowed since the inlined code that is emitted is
+ not placed inside a namespace. This confuses other
+ stages of parsing.
+
+04/21/2002: beazley
+ Some bug fixes to casting operations and expression
+ parsing. Due to some parsing issues, it is not
+ currently possible to use casts for all possible
+ datatypes. However, the common cases work.
+
+04/20/2002: beazley (Amsterdam)
+ Member templates now work. Simply use the %template
+ directive inside a class or %addmethods to create
+ instantiations (see Doc/Manual/SWIGPlus.html). Supporting
+ this was easy---earlier changes to templates made it
+ possible using only a two-line modification to the parser
+ and a few minor modifications elsewhere. Hmmm, come to
+ think of it, the smoke was rather thick in that Internet "cafe".
+ *** NEW FEATURE ***
+
+04/19/2002: beazley (TGV)
+ Improved handling of non-type template parameters. For example:
+
+ vector<int,100>;
+
+ Simple numbers and strings can be used with the %template
+ directive as well. For example:
+
+ %template(vecint100) vector<int,100>;
+
+ Note: Arithmetic expressions are not currently allowed.
+
+ Default template arguments now work and do not have to
+ be given to %template.
+
+04/18/2002: beazley (Paris)
+ Change in internal template handling. Template
+ parameters are now fully integrated into the type
+ system and are aware of typedefs, etc. This builds
+ upon the change below.
+
+ *** DEVELOPER WARNING ***
+ Word of caution to language module writers. The "name"
+ parameter of certain parse tree nodes (classes, functions, etc.)
+ may be parameterized with types. This parameterization is
+ done using SWIG type-strings and not the underlying C version.
+ For example,
+
+ int max<int *>(int *,int *)
+
+ has a name of "max<(p.int)>". If you use the name directly,
+ you may get syntax errors in the generated code. To fix this,
+ use SwigType_namestr(name) to convert a parameterized name
+ to a C name with valid syntax. The internal version is
+ used to reduce template types to a common representation
+ and to handle issues of typedef.
+
+04/16/2002: beazley (somewhere over the Atlantic)
+ Enhancement of typedef resolution. The type system is now
+ aware of template arguments and typedef. For example:
+
+ typedef int Integer;
+
+ foo(vector<int> *x, vector<Integer> *y);
+
+ In this case, vector<int> and vector<Integer> are
+ the same type. There is some interaction between this
+ mechanism and the implementation of typemaps. For example,
+ a typemap defined for vector<int> * would apply to either type.
+ However, a typemap for vector<Integer> * would only apply to
+ that type.
+
+ Typedefs and typemaps and matched by left-most expansion.
+ For example:
+
+ vector<Integer,Integer> -->
+ vector<int, Integer> -->
+ vector<int, int>
+
+
+04/24/2002: cheetah (William Fulton)
+ [Java] Changes to Java shadow classes.
+ Overcomes a bug where the module assumed that a pointer to a derived
+ class could be used in place of a pointer to a base class. Thanks
+ to Stephen McCaul for analysing the bug and submitting patches.
+
+ A consequence is that the getCPtr() method in each shadow class has
+ disappeared and has been replaced with a getCPtrXXX(), where XXX is the
+ shadow class name. If you have code that previously used getCPtr(),
+ and the associated class is wrapping a C struct or a C++ class that
+ is not involved in an inheritance chain, just use the new method. If
+ however, the class is involved in an inheritance chain, you'll have
+ to choose which pointer you really want. Backwards compatibility
+ has been broken as not using the correct pointer can lead to weird bugs
+ through ill-defined behaviour. If you are sure you want the old methods,
+ you could add them back into all shadow classes by adding this at the
+ beginning of your interface file:
+
+ %pragma(java) allshadowcode=%{
+ public long getCPtr(){
+ return swigCPtr;
+ }
+ %}
+
+ Please see entry dated 07/23/2002 to see how to do this after the deprecation
+ of the allshadowcode pragma.
+
+ *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
+
+04/13/2002: beazley
+ Fixed problem with default arguments and references. Declarations such
+ as this should now work:
+
+ void foo(const string &x = "Hello");
+
+04/12/2002: beazley
+ Added typemap $* substitutions for typemaps involving arrays.
+ Requested by William Fulton.
+
+04/11/2002: beazley
+ Template specialization is now supported. For example:
+
+ template<> class vector<int> {
+ ...
+ };
+
+ When the %template directive is used, it will use a specialization
+ if one is defined. There are still some limitations. Partial
+ specialization is not supported. A template of type <void *> does
+ not match all pointers.
+ *** NEW FEATURE ***
+
+04/11/2002: beazley
+ Major change to template wrapping internals. Template declarations are
+ no longer processed as macros but now result in real parse-tree
+ nodes. The %template directive expands these nodes into a
+ specific instantiation. This change enables a number of
+ new and interesting capabilities:
+
+ Directives such as %rename, %feature, and %addmethods can
+ now be applied to uninstantiated templates. For example:
+
+ %rename(barsize) vector::bar(char *buf, int len);
+ ...
+ template<typename T> class vector {
+ public:
+ ...
+ void bar(char *buf);
+ void bar(char *buf, int len); // Renamed
+ ...
+ };
+
+ %template(intvector) vector<int>; // Renaming carries through
+
+
+ By parsing templates into an internal data structure, it will
+ be possible to support specialization (and maybe partial
+ specialization).
+
+ This is highly experimental and a work in progress.
+
+ *** POTENTIAL INCOMPATIBILITY ***
+ In SWIG-1.3.11, template declarations were simply processed
+ as weird macros. No other information was retained. This
+ made it impossible to support more advanced features and
+ complicated many other parts of the implementation.
+
+04/09/2002: beazley
+ Change to template class wrapping. There were a variety of
+ "issues" with the old approach related to parsing, the type
+ system, and namespaces. These changes are meant to rectify
+ some of these problems:
+
+ A specific instantiation of a template can now be specified
+ by including the class inline like this:
+
+ class vector<int> {
+ public:
+ vector();
+ ~vector();
+ ... whatever ...
+ };
+
+ This is template specialization, but partial specialization is
+ not yet implemented.
+
+ The %template directive has been modified to expand roughly as
+ follows:
+
+ %template(vecint) vector<int>;
+
+ becomes
+
+ %rename(vecint> vector<int>;
+ class vector<int> {
+ public:
+ vector();
+ ...
+ };
+
+ Note that this simply builds upon the code above (templates
+ included inline).
+
+ This modified approach to wrapping fixes some subtle type
+ issues. For instance, you can now define typemaps and typedefs
+ like this:
+
+ %typemap(in) vector<int> * {
+ ...
+ }
+ typedef vector<int> intvector;
+ ...
+ void blah(intvector *v); // Gets the above typemap
+
+ This did not work in SWIG-1.3.11 due to a peculiarity of
+ the template implementation.
+
+ %template(name) no longer installs the template as a class
+ with name "name". This might break %addmethods as described
+ in the manual. For example:
+
+ %template(vecint) vector<int>;
+ %addmethods vecint { // Fails. vecint not a class
+ ...
+ };
+
+ To fix this, just use the template name instead:
+
+ %addmethods vector<int> {
+ ...
+ }
+
+ Note: This technique might be a way to implement some bizarre
+ template specialization techniques. For example:
+
+ %addmethods vector<int> {
+ // Only applied if vector<int> instantiated later
+ %typemap(in) vector<int> * {
+ ...
+ }
+ ...
+ };
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+04/08/2002: beazley
+ Fixed [ 540868 ] #if defined whatever - not parsed. SWIG should
+ now correctly handle preprocessor directives like this:
+
+ #if defined __cplusplus
+ ...
+ #endif
+
+ Note: was implemented previously, but there was a minor bug.
+ Reported by Adam Hupp.
+
+04/07/2002: beazley
+ %readonly and %readwrite are deprecated due to a change in the
+ implementation. Instead of being pragmas, mutability is now
+ controlled as a "feature" using the following two directives:
+
+ %immutable;
+ int x; // read-only variable
+ int y; // read-only variable
+ %mutable;
+ int z; // Modifiable
+
+ %immutable and %mutable are much more powerful than their older
+ counterparts. They can now pinpoint a specific declaration like
+ this:
+
+ %immutable x; /* Any x */
+ %immutable Foo::x; /* x in class Foo */
+
+ In fact, the matching algorithm is the same as for %rename,
+ %ignore, and other directives. This means that the declaration
+
+ %immutable Foo::x;
+
+ would not only apply to class Foo but to all derived classes
+ as well.
+
+ *** POTENTIAL INCOMPATIBILITY ***
+ %immutable and %mutable must be terminated by a semi-colon. This
+ differs slightly from the older %readonly and %readwrite directives.
+ Since %immutable and %mutable can be applied to declarations the
+ semicolon is needed to distinguish between a global feature and
+ one targeted to a single declaration. Note: this incompatibility is the
+ primary reason for changing the name of the directive.
+
+04/07/2002: beazley
+ New handling of copy constructors. If a class defines
+ constructors like this:
+
+ class Foo {
+ public:
+ Foo();
+ Foo(const Foo &); // Copy constructor
+ ...
+ };
+
+ SWIG now generates a function copy_Foo() for the copy
+ constructor.
+
+ In previous verions, this generated a name-clash and an
+ error message. To preserve backwards compatibility, SWIG
+ does not change the behavior if %rename is used to resolve
+ the name conflict. However, if no name resolution is made,
+ this new approach is used.
+
+ Copy constructors may be handled as a special case in the
+ target language. However, this is up to the language module
+ itself.
+
+04/07/2002: beazley
+ The %template directive is now namespace aware. This allows
+ code like this:
+
+ namespace foo {
+ template<typename T> max(T a, T b) { return a > b ? a : b; }
+ }
+
+ using namespace foo;
+ %template(maxint) max<int>; // Ok
+
+ namespace bar {
+ using foo::max;
+ %template(maxdouble) max<double>; // Ok
+ }
+
+ Caveat: the template name supplied to %template must be defined in the
+ same scope in which the %template directive appears. This code is
+ illegal:
+
+ %template(maxint) foo::max<int>;
+
+04/07/2002: beazley
+ Minor enhancement to preprocessor. The preprocessor can now perform
+ string comparison. For example:
+
+ #define A "hello"
+ ...
+ #if A == "hello"
+ ...
+ #endif
+
+ The primary use of this is in SWIG macros. For example:
+
+ %define FOO(x)
+ #if #x == "int"
+ /* Special handling for int */
+ ...
+ #endif
+ %enddef
+
+ Normal users can probably safely ignore this feature. However, it may
+ be used in parts of the SWIG library.
+
+04/07/2002: beazley
+ Further refinement of default constructor/destructor wrapper generation.
+ SWIG is now much more aware of pure virtual methods. For instance:
+
+ class A { /* Abstract */
+ public:
+ virtual void method1() = 0;
+ virtual void method2() = 0;
+ };
+ class B : public A { /* Abstract */
+ public:
+ virtual void method1() { };
+ };
+
+ class C : public B { /* Ok */
+ public:
+ virtual void method2() { };
+ };
+
+ In this case, SWIG will only generate default constructors for C.
+ Even though B looks fine, it's missing a required method and is abstract.
+
+04/04/2002: beazley
+ Subtle change to structure data member access. If you
+ have a structure like this:
+
+ struct Foo {
+ Bar b;
+ };
+
+ The accessor functions for b are generated as follows:
+
+ (1) If b is *not* defined as a structure or class:
+
+ Bar Foo_b_get(Foo *self) {
+ return self->b;
+ }
+ void Foo_b_set(Foo *self, Bar value) {
+ self->b = value;
+ }
+
+ (2) If b *is* defined as a structure or class:
+
+ Bar *Foo_b_get(Foo *self) {
+ return &self->b;
+ }
+ void Foo_b_set(Foo *self, Bar *value) {
+ self->b = *value;
+ }
+ See the "Structure data members" section of Doc/Manual/SWIG.html
+ for further details.
+
+ *** POTENTIAL INCOMPATIBILITY ***
+ This may break interfaces that relied on a lot of a undeclared
+ structure and class names. To get the old behavior, simply
+ use a forward declaration such as "struct Bar;"
+
+04/04/2002: beazley
+ C++ namespace support added. SWIG supports all aspects of
+ namespaces including namespace, using, and namespace alias
+ declarations. The default behavior of SWIG is to flatten
+ namespaces in the target language. However, namespaces are
+ fully supported at the C++ level and in the type system.
+ See Doc/Manual/SWIGPlus.html for details on the implementation.
+
+04/02/2002: cheetah (William Fulton)
+ [Java] Sun has modified javac in jdk1.4 to no longer compile
+ an import of an unnamed namespace. To fix this SWIG no longer
+ generates the import for packageless classes.
+ http://developer.java.sun.com/developer/bugParade/bugs/4361575.html
+ As reported SF #538415.
+
+03/27/2002: ljohnson (Lyle Johnson)
+ [Ruby] Added support for pointer-to-member, similar to that
+ for the Python module. Remarkably similar. Also added a new
+ example for this (Examples/ruby/mpointer), which is remarkably
+ similar to the Python example of the same name.
+
+03/26/2002: ljohnson (Lyle Johnson)
+ [Ruby] Made a few minor edits to the "Advanced Topics"
+ chapter of the SWIG manual and added a new major section
+ about how to create multi-module Ruby packages with SWIG.
+
+03/26/2002: ljohnson (Lyle Johnson)
+ [Ruby] Removed all of the old Ruby pragmas. If any of this
+ functionality is truly missed we can resurrect it, preferably
+ with some kind of feature-based directive.
+
+03/25/2002: ljohnson (Lyle Johnson)
+ [Ruby] Fixed SWIG exception library support for Ruby, which
+ has apparently been broken for some time. Luckily, no one seems
+ to have noticed.
+
+03/23/2002: beazley
+ C++-namespace support in SWIG directives.
+
+ %addmethods:
+
+ The %addmethods directive now accepts a fully qualified classname
+ and can be used inside C++ namespace declarations. For example:
+
+ // Attaches to the class Foo::Bar below
+ %addmethods Foo::Bar {
+ int somemethod() { ... }
+ };
+
+ namespace Foo {
+ class Bar {
+ public:
+ ...
+ };
+
+ // Attaches to the class Bar above
+ %addmethods Bar {
+ int othermethod() { ... };
+ }
+ }
+
+ %feature, %rename, %ignore, %exception, and related directives:
+
+ Namespaces are fully integrated into the the renaming and declaration
+ matcher. For example:
+
+ %rename(display) Foo::print; // Rename in namespace Foo
+ %ignore Foo::Bar::blah; // Ignore a declaration
+
+ %rename directives can be placed inside namespace blocks as well. For
+ example:
+
+ namespace Foo {
+ %rename(display) print; // Applies to print below
+
+ void print();
+ };
+
+ Most other SWIG directives should work properly inside namespaces.
+ No other changes are needed.
+
+03/22/2002: beazley
+ Some changes to internal symbol table handling. SWIG no longer
+ manages structures and unions in a separate namespace than normal
+ declarations like ANSI C. This means you can't have a structure
+ with the same name as a function. For example:
+
+ struct Foo {
+ ...
+ }
+
+ int Foo() { ... }
+
+ This approach is more like C++. It's not clear that SWIG ever
+ really supported the ANSI C anyways---using the same name would
+ almost certainly generate a name-clash in the target language.
+
+03/22/2002: ljohnson (Lyle Johnson)
+ [Ruby] Fixed [ 517302 ] for handling of renamed overloaded
+ constructors. Now, renamed overloaded constructors are converted
+ into class singleton methods (basically acting as "factory"
+ methods).
+
+03/21/2002: beazley
+ Fixed [ 532957 ] %ignore parse error and casting operator.
+ Reported by William Fulton.
+
+03/18/2002: beazley (** ADVANCED USERS ONLY **)
+ Added support for dynamic casting in return values. A somewhat
+ common problem in certain C++ programs is functions that hide
+ the identity of underlying objects when they are returned
+ from methods and functions. For example, a program might include
+ some generic method like this:
+
+ Node *getNode();
+
+ However, Node * may just be base class to a whole hierarchy
+ of different objects. Instead of returning this generic Node *,
+ it might be nice to automatically downcast the object into the
+ appropriate type using some kind dynamic cast.
+
+ Assuming you understand the peril involved, a downcast can now
+ be performed using the following function in the run-time type
+ checker:
+
+ swig_type_info *SWIG_TypeDynamicCast(swig_type_info *, void **ptr);
+
+ This function checks to see if the type can be converted to another
+ type. If so, a different type descriptor (for the converted type)
+ is returned. This type descriptor would then be used to create
+ a pointer in the target language.
+
+ To use this, you would write a typemap similar to this:
+
+ %typemap(out) Node * {
+ swig_type_info *ty = SWIG_TypeDynamicCast($1_descriptor, (void **) &$1);
+ $result = SWIG_NewPointerObj($1, ty);
+ }
+
+ Alternatively,
+
+ %typemap(out) Node * = SWIGTYPE *DYNAMIC;
+
+ To make the typemap have any effect, you have to write a supporting
+ function that knows how to perform downcasting. For example:
+
+ %{
+ static swig_type_info *
+ Node_dynamic_cast(void **ptr) {
+ Node **nptr = (Node **) ptr;
+ Element *e = dynamic_cast<Element *>(*nptr);
+ if (e) {
+ *ptr = (void *) e;
+ return SWIGTYPE_p_Element;
+ }
+ Data *d = dynamic_cast<Data *>(*nptr);
+ if (d) {
+ *ptr = (void *) d;
+ return SWIGTYPE_p_Data;
+ }
+ return 0;
+ }
+ %}
+
+ There is no restriction on how types are determined. dynamic_cast<>
+ uses C++ RTTI. However, if you had some other mechanism for determining
+ the type, you could use that here. Note: it is important to save
+ the new pointer value back into the argument as shown. When downcasting,
+ the value of the pointer could change.
+
+ Finally, to make the casting function available, you have to register
+ it with the run-time type checker. Put this macro in your interface file.
+
+ DYNAMIC_CAST(SWIGTYPE_p_Node, Node_dynamic_cast);
+
+ Note: this feature does not introduce a performance penalty on
+ normal SWIG operation. The feature is only enabled by writing
+ a new typemap that explicitly calls SWIG_TypeDynamicCast() to
+ make a conversion.
+
+ Examples/test-suite/dynamic_cast.i contains a simple example.
+ This feature is not supported in the Java module due to differences
+ in the type-checking implementation.
+
+ *** EXPERIMENTAL FEATURE ***
+
+03/17/2002: beazley
+ Small change to type-name handling of unnamed structures and
+ typedef. If a structure of this form appears:
+
+ typedef struct {
+ ...
+ } Foo;
+
+ Then 'Foo' is used as the proper typename for the structure.
+ Furthermore, Foo can now be used as a name in C++ inheritance.
+ SWIG was already kind of doing this, but this modification refines
+ the implementation to more closely follow the C++ ARM, section
+ 7.1.3, p. 106. This fixes a couple of obscure corner cases.
+
+03/16/2002: beazley
+ Modified C++ inheritance with a few enhancements. First, type information
+ needed for casting and type-equivalence is generated even when base-classes
+ aren't defined in the interface. For example:
+
+ class Foo : public Bar { /* Bar unspecified */
+ public:
+ ...
+ };
+
+ void blah(Bar *b);
+
+ In this case, the blah() function still accepts Foo * even though nothing
+ is really known about Bar. Previous SWIG versions would just generate
+ a type error.
+
+ Inheritance has also been modified to work through typedef. For example:
+
+ class Bar {
+ };
+
+ typedef Bar OtherBar;
+ class Foo: public OtherBar {
+ }
+
+ In this case, the base class of OtherBar is correctly resolved back to
+ Bar. The use of the name OtherBar is lost in this resolution (the wrappers
+ will simply use Bar instead of the typedef name OtherBar).
+
+03/13/2002: beazley
+ %typemap, %apply, and related directives can now appear inside
+ class definitions.
+
+03/13/2002: beazley
+ Fixed a variety of problems related to compiling SWIG on 64-bit
+ platforms.
+
+03/12/2002: beazley
+ Fixed problem with "ignore" and "in" typemaps. Local variables
+ associated with "in" were being added to the wrapper function even
+ though they were never used. Mostly harmless, but it would lead
+ to a variety of compilation warnings.
+
+03/12/2002: beazley
+ Some changes to the internal type system and handling of nested C++
+ types. In previous versions of SWIG, if you had the following:
+
+ class Foo {
+ public:
+ typedef int Blah;
+ };
+ class Bar : public Foo {
+ public:
+ void somemethod(Blah x);
+ };
+
+ The argument type in somemethod() would implicitly be set to Bar::Blah.
+ Although this is technically allowed, it breaks typemaps. For example:
+
+ %typemap(in) Foo::Blah { ... }
+
+ doesn't match like you expect. This has been changed in SWIG-1.3.12.
+ Now, types are expanded using the class in which they were defined.
+ So, the argument type in somemethod() will be Foo::Blah---since the
+ type Blah was defined in Foo.
+
+03/10/2002: beazley
+ Fixed some subtle type scoping problems with typedef and C++ classes.
+ For example:
+
+ typedef int Blah;
+ class Bar {
+ public:
+ typedef double Blah;
+ void foo(Blah x, ::Blah y);
+ ...
+ }
+
+03/10/2002: beazley
+ Highly experimental change to handle variable length arguments.
+ First, there is no portable or reliable way to wrap
+ a varargs function in full generality. However, you *can* change
+ the function signature using %varargs.
+
+ %varargs(char *) fprintf;
+ ...
+ void fprintf(FILE *f, char *fmt, ...);
+
+ In this case, the variable length parameter "..." is
+ simply replaced by the parameters given in %varargs. This
+ results in a function like this:
+
+ void fprintf(FILE *f, char *fmt, char *s);
+
+ More than one argument can be used and default values
+ can be defined. For example, this code specifies a
+ maximum of four arguments.
+
+ %varargs(char *x1 = 0, char *x2 = 0, char *x3 = 0, char *x4 = 0) fprintf;
+
+ *** EXPERIMENTAL NEW FEATURE ***
+
+03/10/2002: beazley
+ Change to handling of variable length arguments. varargs
+ is now handled as a proper parameter and is passed to the
+ code generator. However, it still can't be handled correctly
+ (and will generate a typemap warning). This change has been
+ made to better incorporate variable length arguments with other
+ directives such as %ignore, %rename, %feature, and so forth.
+
+03/10/2002: beazley
+ Fixed [ 522555 ] Syntax error parsing "define" construct. SWIG
+ is a little more restrictive in determining #define statements
+ that will be wrapped as constants. Also added a better parser
+ error rule for handling bad constants.
+
+03/08/2002: cheetah (William Fulton)
+ [Java] Bug fix: Classes renamed with %rename that are derived from
+ another class generate more appropriate shadow class code.
+
+03/08/2002: cheetah (William Fulton)
+ [Java] Fixed SF [ #523632 ] and [ #513335 ] both reported by Israel
+ Tanner. Support for types that are used which are in a typedef. The
+ appropriate shadow class name is generated. Also generated correct
+ shadow classname when a templated class is used within another
+ templated class. See the cpp_typedef.i testcase.
+
+03/08/2002: cheetah (William Fulton)
+ [Java] Bug fix: No type was generated in shadow classes for types
+ that weren't wrapped by SWIG. The type is treated as a raw
+ pointer, ie no shadow class.
+
+02/22/2002: beazley
+ Refined the matching algorithm used by %rename, %ignore, and
+ %feature. If a type signature is supplied, it must exactly
+ match that used in the declaration---including any use of
+ const. For example:
+
+ %rename(foo1) foo(int);
+ %rename(bar1) bar(int) const;
+
+ class Blah {
+ public:
+ void foo(int); // Matched --> foo1
+ void foo(int) const; // Not matched
+ void bar(int); // Not matched
+ void bar(int) const; // Matched --> bar1
+ }
+
+ In previous versions, a non-const specification would match
+ both the non-const and const declarations. However, the whole
+ point of %rename and related directives is that they be able
+ to precisely pinpoint exact declarations in an interface. This
+ fixes the problem.
+
+02/21/2002: beazley
+ Reworked the handling of default constructor and destructors.
+ SWIG now makes a preliminary pass over the parse tree to discover
+ which classes support default allocation. This fixes a number
+ of very subtle issues in code generation and call/return by value.
+
+02/18/2002: cheetah (William Fulton)
+ Improved support on Cygwin: Perl, Python, Tcl, Ruby and Java should
+ work out of the box, barring the runtime library. Removed dllwrap
+ and replaced with newly working gcc -shared instead for Cygwin.
+ All this will require the new improved binutils 20010802 and later,
+ but the latest Cygwin is usually the best recommendation.
+
+02/15/2002: beazley
+ Fixed some problems related to wrapping of global variables
+ and Perl shadow classes. Reported by Chia-liang Kao.
+
+02/15/2002: ljohnson (Lyle Johnson)
+ [Ruby] Made a fix to the code generation for C++ class
+ constructors so that we get both a "new" singleton method
+ and an "initialize" instance method for each class. This
+ change enables developers to derive new Ruby classes from
+ SWIG-wrapped C++ classes and then override their initialize
+ methods to provide subclass-specific instance initialization.
+
+02/15/2002: ljohnson (Lyle Johnson)
+ [Ruby] Massive documentation update for the Ruby module,
+ contributed by Craig Files.
+
+02/14/2002: ljohnson (Lyle Johnson)
+ [Ruby] Bug fix: An error in the SWIG runtime support for Ruby
+ was causing several of the examples to fail. Reported by
+ William Fulton.
+
+02/14/2002: ljohnson (Lyle Johnson)
+ [Ruby] Bug fix: Enumerations defined within a class (such
+ as those seen in the Examples/ruby/enum example) were not
+ being exported with the correct names. Reported by William
+ Fulton.
+
+02/13/2002: ljohnson (Lyle Johnson)
+ [Ruby] Added a warning message when we run across overloaded
+ class constructors for C++ code, that this is currently not
+ supported (even if the overloads have been %renamed). For an
+ example of where this doesn't work, see Examples/ruby/operator.
+
+02/13/2002: ljohnson (Lyle Johnson)
+ [Ruby] Added an "ignored" warning message when the parser runs
+ across an operator!=() declaration for C++ code.
+
+02/11/2002: ljohnson (Lyle Johnson)
+ [Ruby] Added the "import", "import_template", "operator" and
+ "template" examples.
+
+02/11/2002: ljohnson (Lyle Johnson)
+ [Ruby] Added multi-module support.
+
+02/09/2002: ljohnson (Lyle Johnson)
+ [Ruby] Added the missing "#define SWIG_NOINCLUDE" at the top of
+ the wrapper code when the '-c' option is used.
+
+02/09/2002: ljohnson (Lyle Johnson)
+ Corrected a minor off-by-one error for the size of the
+ swig_types[] array that's generated in the wrapper code.
+
+02/08/2002: beazley
+ Fixed SF [ #515058 ] Wrong code for C++ templates.
+ Reported by Israel Taller.
+
+Version 1.3.11 (January 31, 2002)
+=================================
+
+01/30/2002: beazley
+ Fix to pass/return by value for C++ objects that define
+ no default constructor. Changes to the typemap system
+ made it impossible to wrap C++ objects with no default
+ constructor. This has been fixed, but the solution
+ involves some clever template magic contributed by
+ William Fulton. Please see the comments in the file
+ Lib/swig.swg for further details. This solution is
+ experimental and may be refined in a future release.
+
+01/30/2002: beazley
+ Global variables and member data of type "const char *"
+ can be set, but the old value is silently discarded without
+ any garbage collection. This may generate a memory leak.
+ This change is needed to more safely handle variables
+ like this:
+
+ const char *foo = "Hello World\n";
+
+ In this case, it's not safe to free the old value. However,
+ SWIG can dynamically allocate a new value and make foo point
+ to it. To fix this memory leak, you can probably do this:
+
+ %clear const char *foo;
+ %apply char * {const char *foo};
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+01/30/2002: beazley
+ Two minor typemap enhancements have been added. First,
+ typemaps can issue a warning message by including a special
+ warning attribute. For example:
+
+ %typemap(in,warning="I'm going to do something dangerous") ...
+
+ The warning message will show up whenever the typemap is
+ applied.
+
+ Second, a typemap can force a no-match by defining
+
+ %typemap(in) sometype "pass";
+
+ If this is used, the typemap system will *not* record a
+ typemap match for "sometype". This can be used to block
+ selected typemaps. For example, if you wanted to disable
+ a typemap feature for some type, you could do this.
+
+ // Do not allow global variables of type 'const char *' to be set.
+ %typemap(varin) const char * "pass";
+
+ It might also be possible to use this to do subtle and
+ strange things with typemaps. For example, if you wanted to
+ make 'blah *' an output value and 'const blah *' an input
+ parameter, you might do this:
+
+ %typemap(ignore) blah *(blah temp) {
+ $1 = &temp;
+ }
+ %typemap(argout) blah * {
+ ... return a value ...
+ }
+ /* Block unqualified typemaps defined above */
+ %typemap(ignore) const blah * "pass";
+ %typemap(argout) const blah * "pass";
+ %typemap(in) const blah * {
+ ... get input value ...
+ }
+
+ (This potential applications of typemaps suggested by Greg Stein).
+ *** NEW FEATURE ***
+
+01/29/2002: cheetah (william fulton)
+ [Java] Bug fix: No enumerations were wrapped when the -shadow
+ commandline option was not specified. Reported by Israel Taller.
+
+01/28/2002: cheetah (william fulton)
+ [Java] Global arrays are successfully wrapped. In fact they started
+ mostly working in SWIG-1.3.10.
+
+01/28/2002:richardp
+ Added first attempt at C++ and -shadow support for PHP4 module,
+ please test and mail me if any problems/ideas on improving it.
+
+ There is a known problem with uninitialized member variables,
+ please see Examples/php4/sync/README for details.
+
+ Also more PHP documentation added to Doc/Manual/Php.html
+
+01/27/2002:beazley
+ The ANSI C size_t type is now recognized as an integer by default.
+
+01/26/2002:beazley
+ long long and unsigned long long support added to many language modules.
+ This is not a portable feature and will require compiler support
+ for the long long type. In target languages that do not support
+ long long (e.g., Tcl and Perl), numbers are converted to a string
+ of digits. This prevents their use in arithmetic calculations, but
+ still allows values to be set from a string.
+
+ long long support requires the use of the strtoll() and strtoull()
+ functions as well as the 'lld' and 'llu' format specifiers
+ of sprintf().
+
+01/26/2002:beazley
+ Fixed [ #501827 ] Delete method is not called. The Tcl
+ module wasn't correctly calling destructors when they
+ were defined using %addmethods. This has been fixed.
+ Reported by Reinhard Fobbe.
+
+01/26/2002: beazley
+ Better support for long long and unsigned long long. Typemaps
+ have been included in a number of modules for handling these types.
+ In addition, the parser has been modified to accept long long
+ literals such as 1234LL and 1234ULL.
+
+01/27/2002: cheetah (william fulton)
+ [Java] A C char[] is mapped to a Java String which is the default
+ SWIG handling of char[] and char*. It used to be mapped to byte[].
+ Note that a C signed char[] array is mapped to byte[].
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+01/25/2002: beazley
+ Fixed a problem with return-by-value, C++, and
+ objects that define no default constructor.
+ Reported by Joel Reed.
+
+01/25/2002: cheetah (william fulton)
+ [Java] Overhaul of the Java module. The C code generation is now
+ done from typemaps.
+
+01/24/2002: cheetah (william fulton)
+ [Java] Support for arrays of enum pointers
+
+01/20/2002: cheetah (william fulton)
+ [Java] Error checking for null Java objects being passed to native
+ functions. Exception thrown now whereas before the JVM crashed.
+
+01/18/2002: cheetah (william fulton)
+ [Java] Corrected behaviour for functions that take arrays. For
+ example, when this c function:
+
+ void arrayfn(int array[]);
+
+ is wrapped the corresponding native function
+
+ public final static native void arrayfn(int[] array);
+
+ is produced. Previously if the C function made any changes to the
+ array elements, these were not reflected back into the Java array.
+ This has now been corrected so that the changes are propogated back
+ to Java and the calling function will see these changes. This is
+ how pure Java functions work, ie arrays are passed by reference.
+
+01/15/2002:mkoeppe
+ [Guile] New file cplusplus.i with C++ typemaps contributed
+ by Marcio Luis Teixeira <marciot@holly.colostate.edu>.
+
+01/11/2002: cheetah (william fulton)
+ [Java] Changed mapping of C long to Java type. Was mapped to Java
+ long, now mapped to Java int. If you want the previous mapping to
+ Java long use this approach in your interface file:
+
+ %clear long;
+ %typemap(jni) long "jlong"
+ %typemap(jtype) long "long"
+ %typemap(jstype) long "long"
+
+ %clear long[ANY];
+ %typemap(jni) long[ANY] "jlongArray"
+ %typemap(jtype) long[ANY] "long[]"
+ %typemap(jstype) long[ANY] "long[]"
+ %typemap(in) long[ANY] {write me for array support}
+ %typemap(out) long[ANY] {write me for array support}
+ %typemap(argout) long[ANY] {write me for array support}
+ %typemap(freearg) long[ANY] {write me for array support}
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+ This new mapping is more appropriate when interfacing to 32 bit
+ applications which are used in the current 32-bit JVMs. For future
+ 64-bit JVMs you may have to change these mappings - eg on Unix LP64
+ systems, but not on Microsoft 64bit Windows which will be using a
+ P64 IL32 model. This may be automated in a future version of SWIG.
+
+01/10/2002:beazley
+ Fixed [ 501677 ] %init block in wrong place. Reported
+ by Luigi Ballabio.
+
+01/09/2002: cheetah (william fulton)
+ [Java] Default support for the long long type. signed long long is
+ mapped to a Java long. unsigned long long is mapped to BigInteger.
+
+01/09/2002:beazley
+ Experimental change to parser to better support mixing of
+ int, long, short, unsigned, float, and double. The parser
+ should now support types like this:
+
+ short unsigned int
+ int unsigned short
+ unsigned short int
+ unsigned int short
+
+ This change also enables a type of 'long double' (previously
+ unsupported) to be used.
+ *** NEW FEATURE ***
+
+01/05/2002: cheetah (william fulton)
+ [Java] Casting fix for when function return type is a pointer as
+ reported by Gary Pennington 2002-01-05. The upper 32bits of the
+ 64 bit jlong will have contained junk for 32bit pointers.
+
+01/05/2002: cheetah (william fulton)
+ [Java] Better pointer handling in Java is possible as the
+ INPUT, OUTPUT and INOUT typemaps have been added into typemaps.i.
+
+01/05/2002: cheetah (william fulton)
+ [Java] $null can be used in input typemaps to return early from JNI
+ functions that have either void or a non-void return type. Example:
+
+ %typemap(check) int * %{
+ if (error) {
+ SWIG_exception(SWIG_IndexError, "Array element error");
+ return $null;
+ }
+ %}
+
+ If the typemap gets put into a function with void as return, $null
+ will expand to nothing:
+
+ void jni_fn(...) {
+ if (error) {
+ SWIG_exception(SWIG_IndexError, "Array element error");
+ return ;
+ }
+ ...
+ }
+
+ otherwise $null expands to zero, where javareturntype is either a
+ pointer or a primitive type:
+
+ javareturntype jni_fn(...) {
+ if (error) {
+ SWIG_exception(SWIG_IndexError, "Array element error");
+ return 0;
+ }
+ ...
+ }
+
+01/02/2002: cheetah (william fulton)
+ [Java] The Java module incorrectly used argout typemaps for
+ strings. This is now corrected and the code now resides
+ in the freearg typemap. The argout array typemaps have been split into
+ argout and freearg typemaps. This correction may require some user
+ written typemaps to be modified.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+12/28/2001: cheetah (william fulton)
+ [Java] Multi typemaps now working for Java see multimap example.
+ [Java] Fix for recently introduced bug - freearg typemap code was appearing
+ before the function call.
+
+12/28/2001: cheetah (william fulton)
+ [Java] JCALL macro for JNI calls that work in both C and C++ typemaps
+ have been replaced with JCALL0, JCALL1, JCALL2, JCALL3 and JCALL4
+ macros.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+12/22/2001:beazley
+ Resolved some inconsistent behavior with %rename and class renaming.
+ If you specify the following:
+
+ %rename(Foo) Bar;
+
+ class Bar {
+ public:
+ Bar();
+ ~Bar();
+ }
+
+ Then the %rename directive applies to the class itself, the constructor,
+ and the destructor (all will be renamed to Foo).
+
+ If a class defines more than one constructor, the overloaded variants
+ can still be renamed by specifying parameters to %rename. For example:
+
+ %rename(Bar_copy) Bar(Bar &);
+ class Bar {
+ public:
+ Bar();
+ Bar(Bar &);
+ ~Bar();
+ };
+
+ There are still some odd corner cases. If you specify
+
+ %rename(Foo) ::Bar;
+
+ then only the name of the class is changed and the constructor/destructor
+ names are left unmodified. If you specify
+
+ %rename(Foo) *::Bar;
+
+ then the names of the constructor/destructor functions are modified but
+ the name of the class is not.
+
+12/21/2001: cheetah (william fulton)
+ [Java] jni, jtype and jstype typemaps no longer hardcoded but real
+ typemaps. New variable substitution, $javaclassname, can be used in
+ the jstype typemaps. It is replaced with the Java shadow class name
+ where applicable.
+ [Java] Fix for recently introduced bug to do with inheritance when
+ using %import.
+ [Java] A few more bug fixes, todo with %rename and using the kind
+ with the type, eg
+ void fn(union uni myuni, struct str mystr, class cl mycl);
+
+12/20/2001:beazley
+ Fixed [ #494524 ] Preprocessor bug - apostrophe and #subst.
+
+12/20/2001:beazley
+ Added SWIG_VERSION preprocessor symbol. This is a hexadecimal
+ integer such as 0x010311 (corresponding to SWIG-1.3.11). This can
+ be used in the interface as follows:
+
+ #if SWIG_VERSION >= 0x010311
+ /* Use some fancy new feature */
+ #endif
+
+ Note: The version symbol is not defined in the generated SWIG
+ wrapper file.
+
+ *** NEW FEATURE ***
+
+12/20/2001:mkoeppe
+ [MzScheme]: Renamed mzswig_make_boolean to
+ swig_make_boolean, as the latter is used in the typemaps.
+ Reported by Luigi Ballabio.
+
+12/17/2001:mkoeppe
+ [Guile]: Rewrote list-vector.i using multi-dispatch
+ typemaps. Updated pointer-in-out.i. Make the
+ deprecated typemap-substitution of "$source" in "argout"
+ work as before.
+
+12/16/2001:mkoeppe
+ [Guile]: Fixed macros %values_as_list, %values_as_vector,
+ %multiple_values to use the proper %pragma syntax. New
+ Guile example/test "multivalue"; new Guile run-test for
+ test-suite item "list-vector" (currently broken).
+
+12/14/2001:mkoeppe
+ [Guile]: Fixed typemap-substition bug for "varin". Relaxed
+ valid-identifier check to allow all R5RS identifiers.
+
+
+Version 1.3.10 (December 10, 2001)
+==================================
+
+12/08/2001:beazley
+ Modified %typemap so that %{ ... %} can also be used as a
+ code block (mostly for completeness). For example:
+
+ %typemap(in) blah %{
+ ...
+ %}
+
+ This form does not introduce a new block scope. Also, the
+ code enclosed in %{ ... %} is not processed by the preprocessor.
+
+12/08/2001:beazley
+ Fixed [ #459614 ] SWIG with multiple TCL interpreters.
+
+12/08/2001:beazley
+ Fixed [ #417141 ] rubydec.swg is wrong
+ Reported by Paul Brannan.
+
+12/08/2001:beazley
+ Fixed [ #410557 ] Problem with %addmethods on NT.
+ Reported by Magnus Ljung.
+
+12/08/2001:beazley
+ Fixed [ #445233 ] Enhancement: handle access change.
+ SWIG now parses (but ignores) C++ access changes for the
+ the following:
+
+ class A {
+ protected:
+ void something() { }
+ public:
+ A() {}
+ };
+
+ class B : private A {
+ public:
+ B() : A() { }
+ protected:
+ A::something; <---- Parsed, but ignored
+ };
+
+ Suggested by Krzysztof Kozminski.
+
+12/08/2001: cheetah (william fulton)
+ Fix for Ruby to work using Visual C++.
+
+12/06/2001:beazley
+ Fixed [ #465687 ] unsigned short parameters fail.
+ Reported by Gerald Williams.
+
+12/06/2001:beazley
+ Fixed SF [ #489594 ] PyString_FromString can't take NULL arg.
+ Reported by John Merritt. SWIG now converts string values
+ to Python using code like this:
+
+ resultobj = result ? PyString_FromString(result) : Py_BuildValue("");
+
+12/06/2001:beazley
+ Fixed SF [ #463561 ] Type conversions not generated.
+ Reported by Gerald Williams.
+
+12/04/2001:beazley
+ Fixed SF [ #470217 ] Tcl default argument handling.
+ Reported by Shaun Lowry.
+
+12/04/2001:beazley
+ Fixed SF [ #472088 ] defined(MACRO) expanded everywhere.
+ Embedded preprocessor directives such as
+
+ %#if defined(FOO)
+
+ are not expanded by the SWIG preprocessor.
+ Reported by Gerald Williams.
+
+12/04/2001:beazley
+ Fixed SF [ #476467 ] Problems with #define & commas.
+
+12/04/2001:beazley
+ Fixed SF [ #477547 ] wrong declaration of pointer functions.
+ Bad prototypes in Lib/tcl/ptrlang.i.
+
+12/04/2001:beazley
+ Fixed SF [ #483182 ] Constants can take args by mistake.
+ When swig -perl5 -const is used, constants are declared
+ with a void prototype. For example:
+
+ sub ICONST () { $examplec::ICONST }
+
+ Patch submitted by Rich Wales.
+
+12/03/2001:beazley
+ New %exception directive. This is intended to replace %except.
+ It works in exactly the same manner except it does not accept a
+ language specifier. For example:
+
+ %exception {
+ try {
+ $action
+ }
+ catch(SomeError) {
+ error
+ }
+ }
+
+ %exception is also name aware---allowing it to be applied to
+ specific declarations in an interface. For example:
+
+ %exception foo {
+ ...
+ exception for any function/method foo
+ ...
+ }
+
+ %exception Foo::bar {
+ ...
+ exception for method bar in class Foo
+ ...
+ }
+
+ %exception Foo::bar(double) {
+ ...
+ exception for method bar(double) in class Foo
+ ...
+ }
+
+ The semantics of this name matching is exactly the same as for %rename.
+ *** NEW FEATURE ***
+
+12/03/2001:beazley
+ Substantial cleanup of the Python shadow class code. Shadow classes
+ used to be created in this rather complicated manner involving about
+ a half-dozen strings created in bits and pieces. Shadow classes
+ are now generated in a more straightforward manner--in the same
+ order that appears in the interface file.
+
+ *** POTENTIAL INCOMPATIBILITY ***
+ The order in which declarations appear in the shadow file may differ.
+
+12/03/2001:beazley
+ The %insert directive (%{ ... %}, %runtime, %header, %wrapper, etc.)
+ can now be used inside of a class definition. This has potential
+ uses when generating shadow class code. For example:
+
+ class Foo {
+ ...
+ %insert("shadow") %{
+ # Some python code
+ def blah(self):
+ print "I'm blah!"
+ %}
+ ...
+ };
+
+ The support for class code insertion depends on the language module.
+ However, the intent of this feature is to simplify the task of extending
+ shadow class code. In the Python module, this inserts code with the
+ proper level of indendation (regardless of what was used in the SWIG
+ interface).
+ *** NEW FEATURE ***
+
+11/29/2001: cheetah (william fulton)
+ Modifications for Java and Python modules to work on cygwin.
+ Unfortunately a lot of the python module has started to produces code
+ which cannot be auto-imported using cygwin libtools so most of it is
+ still broken.
+
+11/28/2001:beazley
+ The %rename and %feature directive can now be used inside
+ of a class definition. For example:
+
+ class Foo {
+ %rename(foo_i) foo(int);
+ %rename(foo_d) foo(double);
+ public:
+ ...
+ void foo(int);
+ void foo(double);
+ ...
+ };
+
+ When used in this manner, the %rename directive only applies
+ to members of the class in which it appears as well as all
+ derived classes. In fact, this is really just the same
+ as saying:
+
+ %rename(foo_i) Foo::foo(int);
+ %rename(foo_d) Foo::foo(double);
+ class Foo {
+ ...
+ };
+
+ *** NEW FEATURE ***
+
+11/26/2001:beazley
+ Added the experimental %feature directive. %feature can be
+ used to attach arbitrary string attributes to parse tree nodes.
+ For example:
+
+ %feature("except") blah {
+ try {
+ $function
+ } catch (Error) {
+ whatever;
+ }
+ }
+
+ or
+
+ %feature("set") *::x_set "x";
+
+ or
+
+ %feature("blah") Foo::bar(int,double) const "spam";
+
+ The syntax is borrowed from the %rename directive. In fact, the
+ exact same semantics apply (inheritance, matching, etc.).
+
+ %feature is a very powerful low-level primitive that can be used to
+ customize individual language modules and to provide hints to
+ any stage of code generation. Features are attached to
+ parse tree nodes as attributes with names like "feature:*" where *
+ is replaced by the feature name (e.g., "feature:except", "feature:set",
+ etc.). Language modules can then look for the features using
+ a simple attribute lookup.
+
+ %feature is intended to be a replacement for a number of
+ older SWIG directives including %except and specialized
+ pragmas. It is more powerful (due to its parameterized
+ name matching) and it provides very precise control over
+ how customization features are attached to individual
+ declarations. There are future expansion plans that will
+ build upon this capability as well.
+
+ It's not certain that %feature will ever be used directly
+ by SWIG users. Instead, it may be a low-level primitive
+ that is used in high-level macro definitions. For instance,
+ to support properties, you might define a macro like this:
+
+ %define %property(name, setf, getf)
+ %feature("set") setf #name;
+ %feature("get") getf #name;
+ %enddef
+
+ Which allows a user to specify things like this:
+
+ %property(p, get_p, set_p);
+
+ class Blah {
+ public:
+ int get_p();
+ void set_p(int);
+ };
+
+ *** EXPERIMENTAL NEW FEATURE ***
+
+11/24/2001:beazley
+ The Tcl module has been expanded with some new features for
+ managing object ownership. For example:
+
+ set c [Circle -args 20]
+ $c area # Invoke a method
+ $c -disown # Releases ownership of the object
+ $c -acquire # Acquires ownership of the object
+
+ If Tcl owns the object, its destructor is invoked when the
+ corresponding object command is deleted in Tcl.
+
+ To simplify the destruction of objects, the following syntax
+ can be used:
+
+ $c -delete # Delete an object
+
+ This is an alternative for the more obscure variant of
+
+ rename $c {}
+
+ These features also add functionality at the C API level.
+ The following functions manage ownership from C and
+ can be used in typemaps.
+
+ SWIG_Acquire(void *ptr);
+ SWIG_Disown(void *ptr);
+
+ A new function for constructing instances is also available:
+
+ Tcl_Obj *
+ SWIG_NewInstanceObj(Tcl_Interp *interp, void *ptr,
+ swig_type_info *type, int own);
+
+ When used in a typemap, this creates a pointer object and
+ an interpreter command that can be used to issue methods and
+ access attributes as shown above.
+ *** NEW FEATURE ***
+
+11/23/2001:beazley
+ All Python-related %pragma operations have been eliminated.
+ Most of these were written for older SWIG versions in order to
+ compensate for limitations in earlier releases. In an effort
+ to reduce the amount of code-clutter and potential for errors,
+ it is easier to simply eliminate the pragmas and to start over
+ (if needed). To be honest, I'm not even sure the pragmas
+ worked in 1.3.9 and recent releases.
+
+ Note: If you need to insert code into the shadow class file
+ created by SWIG, simply use the %shadow directive like this:
+
+ %shadow %{
+ def some_python_code():
+ print "blah!"
+ %}
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+11/22/2001:beazley
+ Sweeping changes to the way in which the Python module handles
+ shadow classes. In early implementations, shadow classes were
+ merely Python wrappers around typed pointer objects. However,
+ some users actually wanted to receive the shadow class object in C.
+ To accomodate this, the dereferencing of the "this" pointer in
+ a shadow class was moved to C as described in CHANGES [8/8/99].
+ However, the process of returning pointers to Python was still
+ somewhat problematic. Specifically, shadow classes never worked
+ in situations such as these:
+
+ - Use of any kind of output typemap ('out' or 'argout')
+ - Global variables (broken as far as I can tell).
+
+ In the past, some users have dealt with this by manually trying
+ to create shadow class objects themselves from C/C++. However,
+ this was difficult because the C wrappers don't really know how
+ to get access to the corresponding Python class.
+
+ The Python module has now been modified to automatically attach
+ shadow class objects to pointers when they are returned to
+ Python. This process occurs in the function SWIG_NewPointerObj()
+ so the process is completely transparent to users. As a result,
+ shadow classes are now more seamlessly integrated with typemaps
+ and other features of SWIG.
+
+ This change may introduce a number of incompatibilities. The
+ SWIG_NewPointerObj() now takes an extra parameter "own" to
+ indicate object ownership. This can be used to return a pointer
+ to Python that Python should destroy. In addition, older code
+ that tries to manually construct shadow class objects or which
+ expects bare pointers may break---such pointers may already be
+ encapsulated by a shadow class.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+11/20/2001:beazley
+ Modified the %insert directive to accept single braces { ... }.
+ For example:
+
+ %insert("header") {
+ ... some code ...
+ }
+
+ This works exactly like %{ ... %} except that the code in the
+ braces is processed using the preprocessor. This can be useful
+ in certain contexts such as low-level code generation in
+ language modules.
+ *** NEW FEATURE ***
+
+11/20/2001:beazley
+ Command line options are now translated into preprocessor
+ symbols. For example:
+
+ ./swig -python -shadow -module blah interface.i
+
+ Creates the symbols:
+
+ SWIGOPT_PYTHON 1
+ SWIGOPT_SHADOW 1
+ SWIGOPT_MODULE blah
+
+ Modules can look for these symbols to alter their code generation
+ if needed.
+ *** NEW FEATURE ***
+
+11/20/2001:beazley
+ Massive overhaul of the Perl5 module. A lot of code generation is
+ now driven by tables and typemaps. The generated wrapper code
+ also makes use of tables to install constants, variables, and
+ functions instead of inlining a bunch of procedure calls. The
+ separate variable initialization function is gone. Most
+ code generation is controlled via the perl5.swg file in the
+ library.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+11/13/2001:beazley
+ Added parsing support for the C++ typename keyword. Primarily this
+ is added to better support templates. For example:
+
+ template<typename T> void blah(C& v) {
+ typename C::iterator i = v.begin();
+ }
+
+ Note: typename is supported in the parser in the same way as 'struct'
+ or 'class'. You probably shouldn't use it anywhere except in templates.
+ *** NEW FEATURE ***
+
+11/11/2001:beazley
+ Massive overhaul of the language module API. Most functions now
+ use a common, very simple, API. There are also a number of
+ interesting semantic side-effects of how code is actually generated.
+ Details will be forthcoming in Doc/Manual/Extending.html.
+
+ *** POTENTIAL INCOMPATIBILITY *** Language modules written for
+ previous versions of SWIG will no longer work,
+
+11/10/2001:beazley
+ Fixed a very subtle bug due to unnamed class wrapping. For example, if
+ you did this
+
+ typedef struct {
+ int x,y;
+ } gdPoint, *gdPointPtr;
+
+ void foo(gdPointPtr x);
+
+ Then the foo function would get a type-error. The problem has
+ to do with internal typedef handling and the fact that the typedef
+ declarations after the struct appear later in the parse tree.
+ It should work now. Problem reported by Vin Jovanovic.
+
+11/09/2001:beazley
+ Subtle change to "out" typemaps (and related variations). The name
+ that is attached to the typemap is now the raw C identifier that
+ appears on a declaration. This changes the behavior of
+ member functions. For example:
+
+ %typemap(out) int foo {
+ ...
+ }
+
+ class Blah {
+ public:
+ int foo(); // typemap gets applied
+ }
+
+ Previous versions never really specified how this was supposed to
+ work. In SWIG1.1, you could probably write a typemap for the
+ wrapper name like this:
+
+ %typemap(out) int Blah_foo { ... }
+
+ However, this old behavior is now withdrawn and not supported.
+ Just use the member name without any sort of special prefix.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+11/06/2001:beazley
+ Changes to Tcl module initialization:
+
+ (1) SWIG now automatically includes the code needed to work with
+ Tcl stubs. Simply compile with -DUSE_TCL_STUBS.
+
+ (2) SWIG now automatically calls Tcl_PkgProvide to register
+ a package name. The package name is the same as the name
+ specified with the %module directive. The version number is
+ set to "0.0" by default. To change the version number, use
+ swig -pkgversion 1.2 interface.i.
+
+ *** POTENTIAL INCOMPATIBILITY ***
+ Modules that provided stubs and Tcl_PkgProvide on their own might
+ break. Simply remove that code.
+
+11/05/2001:beazley
+ Changed code generation of constants in the Tcl module. Constants
+ are now stored in a large table that get installed at module startup.
+ There are also no longer any static variables so it should generate
+ somewhat less code.
+
+11/04/2001:beazley
+ The "const" typemap has been renamed to "constant" in many language
+ modules. "const" is a C keyword which made the handling of the typemap
+ directive somewhat awkward in the parser.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+11/04/2001:beazley
+ %typemap directive can now accept nearly arbitrary keyword parameters.
+ For example:
+
+ %typemap(in,parse="i",doc="integer") int "...";
+
+ The purpose of the keyword parameters is to supply code generation
+ hints to the target language module. The intepretation of the
+ parameters is language specific.
+ *** NEW FEATURE ***
+
+11/04/2001:beazley
+ Slight semantic change to internal call/return by value handling.
+ In previous versions of SWIG, call-by-value was translated
+ into pointers. For example:
+
+ double dot_product(Vector a, Vector b);
+
+ turned into this:
+
+ double wrap_dot_product(Vector *a, Vector *b) {
+ return dot_product(*a,*b);
+ }
+
+ This translation was normally performed by the SWIG core, outside
+ of the control of language modules. However, a side effect
+ of this was a lot of bizarre typemap behavior. For example,
+ if you did something like this:
+
+ %typemap(in) int32 {
+ ...
+ }
+
+ You would find that int32 was transformed into a pointer everywhere!
+ (needless to say, such behavior is unexpected and quite awkward to
+ deal with). To make matters worse, if a typedef was also used,
+ the pointer behavior suddenly disappeared.
+
+ To fix this, the pointer transformation is now pushed to the
+ language modules. This produces wrappers that look roughly
+ like this:
+
+ double wrap_dot_product(Vector *a, Vector *b) {
+ Vector arg1 = *a;
+ Vector arg2 = *b;
+ return dot_product(arg1,arg2);
+ }
+
+ This change also makes it easy to define typemaps for
+ arbitrary undefined types. For example, you can do this (and it
+ will work regardless what int32 is):
+
+ %typemap(in) int32 {
+ $1 = (int32) PyInt_AsLong($input);
+ }
+
+ *** POTENTIAL IMCOMPATIBILITY ***
+ This change may break call/return by value code generation in
+ some language modules.
+
+11/03/2001:beazley
+ Changed the name of the default typemaps to the following:
+
+ %typemap() SWIGTYPE {
+ ... an object ...
+ }
+ %typemap() SWIGTYPE * {
+ ... a pointer ...
+ }
+ %typemap() SWIGTYPE & {
+ ... a reference ...
+ }
+ %typemap() SWIGTYPE [] {
+ ... an array ...
+ }
+ %typemap() enum SWIGTYPE {
+ ... an enum value ...
+ }
+ %typemap() SWIGTYPE (CLASS::*) {
+ ... pointer to member ...
+ }
+
+
+ These types are used as the default for all types that don't match
+ anything else. See CHANGES log entry for 8/27/2000 for the
+ old behavior. The role of these types is also described in
+ Doc/Manual/Typemaps.html
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+10/25/2001:beazley
+ Modified Guile and Mzscheme modules to support
+ multi-argument typemaps.
+
+10/25/2001: cheetah (william fulton)
+ [Java] Fix to handle pointers to arrays.
+
+10/24/2001:beazley
+ Defining a typemap rule for enum SWIGENUM can now be used
+ to define default behavior for enum variables.
+
+10/22/2001:beazley
+ Ruby module modified to support multi-argument typemaps.
+
+10/22/2001:beazley
+ The Ruby module can now handle functions with an arbitrary
+ number of arguments. Previous versions were limited to
+ to functions with only 9 or 16 arguments depending on
+ the use of default arguments. Note: from some inspection
+ of the Ruby interpreter source, the new approach might be
+ a little faster as well.
+
+10/18/2001:beazley
+ Fixed a bug with forward class declarations and
+ templates.
+
+ class Foo <S,T>;
+
+ Bug reported by Irina Kotlova.
+
+10/16/2001:beazley
+ Support for multivalued typemaps added. The typemaps
+ are specified using the syntax below. Within each
+ typemap, variable substitution is handled as follows:
+
+ %typemap(in) (int argc, char *argv[]) {
+ $arg; // The input object in the target language
+ $1; // C local variable for first argument
+ $2; // C local variable for second argument
+
+ // These variables refer to either argument
+ $1_type, $1_ltype, $1_basetype, etc... (argc)
+ $2_type, $2_ltype, $2_basetype, etc... (argv[])
+
+ // Array dimension of argv
+ $2_dim0
+ }
+
+ Basically any variable that was available in normal typemaps
+ is available for either argument by prefacing the variable
+ name by '$n_' where n is the argument position.
+
+ Notes:
+ (1) Multi-valued typemaps can only be applied to a single
+ object in the target scripting language. For example,
+ you can split a string into a (char *, int) pair or
+ split a list into a (int, char []) pair. It is not
+ possible to map multiple objects to multiple arguments.
+
+ (2) To maintain compatibility with older SWIG versions, the
+ variables such as $target and $type are preserved and
+ are mapped onto the first argument only.
+
+ (3) This should not affect compatibility with older code.
+ Multi-valued typemaps are an extension to typemap handling.
+ Single valued typemaps can be specified in the usual
+ way.
+
+ The old $source and $target variables are officially
+ deprecated. Input variables are referenced through
+ $arg$ and output values are reference through $result$.
+
+ *** NEW FEATURE ***
+
+10/16/2001:beazley
+ Added parsing support for multivalued typemaps. The syntax
+ is a little funky, but here goes:
+
+ // Define a multivalued typemap
+ %typemap(in) (int argc, char *argv[]) {
+ ... typemap code ...
+ }
+
+ // Multivalued typemap with locals
+ %typemap(in) (int argc, char *argv[])(int temp) {
+ ... typemap code ...
+ }
+
+ // Copy a multivalued typemap
+ %typemap(in) (int argcount, char **argv) = (int argc, char *argv[]);
+
+ // Apply a multivalued typemap
+ %apply (int argc, char *argv[]) { (int argcount, char **argv) };
+
+ Note: this extra parsing support is added for future extension.
+ No language modules currently support multi-valued typemaps.
+
+10/11/2001:beazley
+ Modified the typemap matching code to discard qualifiers when
+ checking for a match. For example, if you have a declaration
+ like this:
+
+ void blah(const char *x);
+
+ The typemap checker checks for a match in the following order:
+
+ const char *x
+ const char *
+ char *x
+ char *
+
+ If typedef's are involved, qualifier stripping occurs before
+ typedef resolution. So if you had this,
+
+ typedef char *string;
+ void blah(const string x);
+
+ typemap checking would be as follows:
+
+ const string x
+ const string
+ string x
+ string
+ const char *x
+ const char *
+ char *x
+ char *
+
+ The primary reason for this change is to simplify the implementation
+ of language modules. Without qualifier stripping, one has to write
+ seperate typemaps for all variations of const and volatile (which
+ is a pain).
+
+ *** POTENTIAL INCOMPATIBILITY *** Typemaps might be applied in
+ places where they weren't before.
+
+
+10/9/2001: beazley
+ SWIG now generates wrappers that properly disambiguate
+ overloaded methods that only vary in constness. For
+ example:
+
+ class Foo {
+ ...
+ void blah();
+ void blah() const;
+ ...
+ };
+
+ To handle this, the %rename directive can be used normally.
+
+ %rename(blah_const) blah() const;
+
+ In the resulting wrapper code, method calls like this
+ are now generated:
+
+ (obj)->blah() // Non-const version
+ ((Foo const *)obj)->blah() // const version
+
+ This should force the right method to be invoked.
+ Admittedly, this is probably obscure, but we might
+ as well get it right.
+
+10/8/2001: beazley
+ The preprocessor now ignores '\r' in the input.
+ This should fix the following bug:
+ [ #468416 ] SWIG thinks macro defs are declarations?
+
+10/8/2001: beazley
+ Added support for ||, &&, and ! in constants. This
+ fixes SF [ #468988 ] Logical ops break preprocessor.
+ However, at this time, constants using these operators
+ are not supported (the parser will issue a warning).
+
+10/4/2001: beazley
+ Added -show_templates command line option. This makes
+ SWIG display the code it actually parses to generate
+ template wrappers. Mostly useful for debugging.
+ *** NEW FEATURE ***
+
+10/4/2001: beazley
+ Change to semantics of %template directive. When
+ using %template, the template arguments are handled
+ as types by default. For example:
+
+ %template(vecint) vector<int>;
+ %template(vecdouble) vector<double>;
+
+ To specify a template argument that is *not* a type, you
+ need to use default-value syntax. For example:
+
+ %template(vecint) vector<int,int=50>;
+ %template(vecdouble) vector<int,size=100>;
+
+ In this case, the type name doesn't really matter--only
+ the default value (e.g., 50, 100) is used during
+ expansion. This differs from normal C++, but I couldn't
+ figure out a better way to do it in the parser. Might
+ implement an alternative later.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+10/4/2001: beazley
+ Major changes to template handling in order to provide
+ better integration with the C++ type-system. The main
+ problem is as follows:
+
+ Suppose you have a template like this:
+
+ template<class T> void blah(const T x) { stuff };
+
+ Now suppose, that you instantiate the template on a
+ type like this in SWIG:
+
+ %template(blahint) blah<int *>;
+
+ In C++, this is *supposed* to generate code like this:
+
+ void blah(int *const x) { stuff };
+
+ However, in SWIG-1.3.9, the template substitution gets it wrong
+ and produces
+
+ void blah(const int *x) { stuff };
+
+ (notice the bad placement of the 'const' qualifier).
+
+ To fix this, the SWIG parser now generates implicit typedefs
+ for template type arguments that produces code roughly
+ equivalent to doing this:
+
+ typedef int *__swigtmpl1;
+ %template(blahint) blah<__swigtmpl1>;
+
+ which generates code like this:
+
+ void blah(const __swigtmpl1 x) { stuff };
+
+ Since this is correct in both C++ and SWIG, it provides the right
+ semantics and allows everything to compile properly. However,
+ to clean up the generated code a little bit, the parser keeps
+ track of the template types and performs back-substitution to
+ the original type when building the parse tree. Thus, even
+ though the implicit typedef is used in the input and may appear
+ in the generated wrapper file (for proper compilation), the parse
+ tree will hide a lot of these details. For example:
+
+ void blah(const __swigtmpl1 x) { stuff };
+
+ will look like it was declared as follows (which is what
+ you want):
+
+ void blah(int *const x) { stuff }
+
+ The only place you are likely to notice the typedef hack
+ is in bodies of template functions. For example, if you
+ did this,
+
+ template<class T> class blah {
+ ...
+ %addmethods {
+ void spam() {
+ T tempvalue;
+ ...
+ }
+ }
+ }
+
+ you will find that 'T tempvalue' got expanded into some
+ strange typedef type. This *still* compiles correctly
+ so it's not a big deal (other than looking kind of ugly
+ in the wrapper file).
+
+10/4/2001: beazley
+ Fixed some inheritance problems in Tcl Object interface.
+
+10/1/2001: beazley
+ Tcl module has changed to use byte-backed pointer strings. This
+ implementation should be safe on 64-bit platforms. However,
+ the order in which digits appear in pointer values no longer
+ directly corresponds to the actual numerical value of a
+ pointer (on little-endian machines, pairs of digits appear
+ in reverse order).
+
+10/1/2001: beazley
+ Perl5 module is now driven by a configuration file 'perl5.swg'
+ in the SWIG library.
+
+10/1/2001: beazley
+ The perl5 module no longer tries to apply the "out" typemap
+ in code generated for magic variables. I'm surprised that
+ this ever worked at all (since all of the code that was there
+ was wrong anyways). Use the "varout" typemap to handle
+ global variables.
+
+10/1/2001: beazley
+ Fixed a bug related to character array members of structures.
+ For example:
+
+ struct Foo {
+ char name[32];
+ };
+
+ SWIG is normally supposed to return a string, but this was
+ broken in 1.3.9. The reason it was broken was actually
+ due to a subtle new feature of typemaps. When a data member
+ is set to an array like this, the return type of the related
+ accessor function is actually set to an array. This means
+ that you can now write typemaps like this:
+
+ %typemap(python,out) char [ANY] {
+ $target = PyString_FromStringAndSize($source,$dim0);
+ }
+
+ This functionality can be used to replace the defunct
+ memberout typemap in a more elegant manner.
+
+9/29/2001: beazley
+ Some further refinement of qualified C++ member functions.
+ For example:
+
+ class Foo {
+ ...
+ void foo() const;
+ ...
+ };
+
+ (i) The SWIG parser was extended slightly to allow 'volatile'
+ and combinations of 'const' and 'volatile' to be used. This
+ is probably rare, but technically legal. Only added for
+ completeness.
+
+ (ii) For the purposes of overloading, qualified and non-qualified
+ functions are different. Thus, when a class has methods like this:
+
+ void foo();
+ void foo() const;
+
+ Two distinct methods are declared. To deal with this, %rename
+ and similar directives have been extended to recognize const.
+ Thus, one can disambiguate the two functions like this:
+
+ %rename(fooconst) Foo::foo() const;
+
+ or simply ignore the const variant like this:
+
+ %ignore Foo::foo() const;
+
+ Note: SWIG currently has no way to actually invoke the const
+ member since the 'const' is discarded when generating wrappers
+ for objects.
+
+9/27/2001: beazley
+ New directive. %namewarn can be used to issue warning
+ messages for certain declaration names. The name
+ matching is the same as for the %rename directive.
+ The intent of this directive is to issue warnings for
+ possible namespace conflicts. For example:
+
+ %namewarn("print is a python keyword") print;
+
+ The name matching algorithm is performed after a name
+ has been resolved using %rename. Therefore, a
+ declaration like this will not generate a warning:
+
+ %rename("Print") print;
+ ...
+ void print(); /* No warning generated */
+
+ Since the warning mechanism follows %rename semantics, it is
+ also to issue warnings for specific classes or just for
+ certain member function names.
+
+ (Dave - I've been thinking about adding something like this
+ for quite some time. Just never got around to it)
+ *** NEW FEATURE ***
+
+
+9/27/2001: beazley
+ Enhanced the %ignore directive so that warning messages
+ can be issued to users. This is done using %ignorewarn
+ like this:
+
+ %ignorewarn("operator new ignored") operator new;
+
+ The names and semantics of %ignorewarn is exactly the
+ same as %ignore. The primary purpose of this directive
+ is for module writers who want to ignore certain types
+ of declarations, but who also want to alert users about it.
+ A user might also use this for debugging (since messages
+ will appear whenever an ignored declaration appears).
+ *** NEW FEATURE ***
+
+9/26/2001: beazley
+ Super-experimental support for overloaded operators.
+ This implementation consists of a few different parts.
+
+ (i) Operator names such as 'operator+' are now allowed
+ as valid declarator names. Thus the 'operator' syntax
+ can appear *anyplace* a normal declarator name was used
+ before. On the surface, this means that operators can
+ be parsed just like normal functions and methods.
+ However, it also means that operator names can be used
+ in many other SWIG directives like %rename. For example:
+
+ %rename(__add__) Complex::operator+(const Complex &);
+
+ (ii) Operators are wrapped *exactly* like normal functions
+ and methods. Internally, the operator name is used
+ directly meaning that the wrapper code might contain
+ statements like this:
+
+ arg0->operator*((Complex const &)*arg1);
+
+ This all seems to parse and compile correctly (at least
+ on my machine).
+
+ (iii) SWIG will no longer wrap a declaration if its symbol
+ table name contains illegal identifier characters. If
+ illegal characters are detected, you will see an error
+ like this:
+
+ Warning. Can't wrap operator* unless renamed to a valid identifier.
+
+ The only way to fix this is to use %rename or %name to bind
+ the operator to a nice name like "add" or something. Note:
+ the legal identifier characters are determined by the target
+ language.
+
+ There are certain issues with friend functions and operators.
+ Sometimes, friends are used to define mixed operators such
+ as adding a Complex and a double together. Currently, SWIG
+ ignores all friend declarations in a class. A global operator
+ declaration can probably be made to work, but you'll have to
+ rename it and it probably won't work very cleanly in the
+ target language since it's not a class member.
+
+ SWIG doesn't know how to handle operator specifications
+ sometimes used for automatic type conversion. For example:
+
+ class String {
+ ...
+ operator const char*();
+ ...
+ };
+
+ (this doesn't parse correctly and generates a syntax error).
+
+ Also: operators no longer show up as separate parse-tree
+ nodes (instead they are normal 'cdecl' nodes). I may
+ separate them as a special case later.
+
+ See Examples/python/operator for an example.
+
+ *** SUPER-EXPERIMENTAL NEW FEATURE ***
+
+Version 1.3.9 (September 25, 2001)
+==================================
+
+9/25/2001: beazley
+ Fixed parsing problem with type declarations like
+ 'char ** const'. SWIG parsed this correctly, but the
+ internal type was represented incorrectly (the pointers
+ and qualifiers were in the wrong order).
+
+9/25/2001: beazley
+ Withdrew experimental feature (noted below) that was
+ causing serious parsing problems.
+
+Version 1.3.8 (September 23, 2001)
+==================================
+
+9/23/2001: beazley
+ Included improved distutils setup.py file in the Tools
+ directory (look for the setup.py.tmpl file). Contributed by
+ Tony Seward.
+
+9/23/2001: beazley
+ Included two new RPM spec files in the Tools directory. Contributed
+ by Tony Seward and Uwe Steinmann.
+
+9/21/2001: beazley
+ Fixed SF Bug [ #463635 ] Perl5.swg does not compile in Visual C++
+
+9/21/2001: beazley
+ Two new directives control the creation of default
+ constructors and destructors:
+
+ %nodefault
+ %makedefault
+
+ These replace %pragma nodefault and %pragma makedefault.
+ (old code will still work, but documentation will only
+ describe the new directives).
+
+9/21/2001: beazley
+ Fixed SF Bug [ #462354 ] %import broken in 1.3.7.
+
+9/20/2001: beazley
+
+ Parser modified to ignore out-of-class constructor
+ and destructor declarations. For example:
+
+ inline Foo::Foo() :
+ Bar("foo")
+ {
+ }
+
+ inline Foo::~Foo() {
+ }
+
+ Suggested by Jason Stewart.
+ *** EXPERIMENTAL FEATURE ***
+
+9/20/2001: beazley
+ Modified the parser to ignore forward template class
+ declarations. For example:
+
+ template <class V, long S> class MapIter;
+
+ Suggested by an email example from Irina Kotlova.
+
+9/20/2001: beazley
+ Fixed problem with undeclared tcl_result variable in
+ the "out" typemap for Tcl. Reported by Shaun Lowry.
+
+9/20/2001: beazley
+ Incorporated changes to make SWIG work with ActivePerl.
+ Contributed by Joel Reed.
+
+9/20/2001: beazley
+ Slight change to the parsing of C++ constructor initializers.
+ For example:
+
+ class Foo : public Bar {
+ public:
+ Foo() : Bar(...) {...}
+ };
+
+ SWIG now discards the contents of the (...) regardless of
+ what might enclosed (even if syntactically wrong). SWIG
+ doesn't need this information and there is no reason to
+ needless add syntax rules to handle all of the possibilities
+ here.
+
+9/20/2001: beazley
+ Change to typemaps for structure members. If you have a
+ structure like this:
+
+ struct Vector {
+ int *bar;
+ };
+
+ The member name 'bar' is now used in any accessor functions.
+ This allows the "in" typemap to be used when setting the value.
+ For example, this typemap
+
+ %typemap(python,in) int *bar {
+ ...
+ }
+
+ now matches Vector::bar. It should be noted that this will also
+ match any function with an argument of "int *bar" (so you should
+ be careful).
+ *** NEW FEATURE. POTENTIAL INCOMPATIBILITY ***
+
+9/20/2001: beazley
+ Fixed SF bug #462642 setting string values in structures
+
+9/20/2001: beazley
+ Fixed SF bug #462398 problem with nested templates.
+
+9/20/2001: beazley
+ Fixed SF bug #461626 problem with formatting and C++ comments.
+
+9/20/2001: beazley
+ Fixed SF bug #462845 Wrong ownership of returned objects.
+
+9/19/2001: beazley
+ Fixed SF bug #459367. Default constructors for classes
+ with pure virtual methods.
+
+9/19/2001: beazley
+ Fixed problem with default arguments and class scope. For
+ example:
+
+ class Foo {
+ public:
+ enum bar { FOO, BAR };
+ void blah(bar b = FOO);
+ ...
+ }
+
+ SWIG now correctly generates a default value of "Foo::FOO" for
+ the blah() method above. This used to work in 1.1, but was
+ broken in 1.3.7. Bug reported by Mike Romberg.
+
+Version 1.3.7 (September 3, 2001)
+==================================
+
+9/02/2001: beazley
+ Added special %ignore directive to ignore declarations. This
+ feature works exactly like %rename. For example:
+
+ %ignore foo; // Ignore all declarations foo
+ %ignore ::foo; // Only ignore foo in global scope
+ %ignore Spam::foo; // Only ignore in class Spam
+ %ignore *::foo; // Ignore in all classes
+
+ %ignore can also be parameterized. For example:
+
+ %ignore foo(int);
+ %ignore ::foo(int);
+ %ignore Spam::foo(int);
+ %ignore *::foo(int);
+
+ *** NEW FEATURE ***
+
+
+9/02/2001: cheetah (william fulton)
+ [Java] shadowcode pragma modified so that the code that is output
+ in the shadow file is placed relative to where it is placed in the
+ c/c++ code. This allows support for JavaDoc function comments.
+
+9/01/2001: beazley
+ Fixed SF Patch [ #447791 ] Fix for python -interface option.
+ Submitted by Tarn Weisner Burton.
+
+9/01/2001: beazley
+ SWIG no longer generates default constructors/destructors
+ for a class if it only defines a private/protected constructor
+ or destructor or if any one of its base classes only has
+ private constructors/destructors. This was reported in
+ SF Patch [ #444281 ] nonpublic/default/inhereted ctor/dtor
+ by Marcelo Matus.
+
+9/01/2001: beazley
+ Added patch to Perl5 module that allows constants to be
+ wrapped as constants that don't require the leading $.
+ This feature is enabled using the -const option.
+ Patch contributed by Rich Wales.
+ *** NEW FEATURE ***
+
+8/31/2001: beazley
+ Added parsing support for the 'volatile' type qualifier.
+ volatile doesn't mean anything to SWIG, but it is
+ needed to properly generate prototypes for declarations
+ that use it. It's also been added to make the SWIG type
+ system more complete.
+ *** NEW FEATURE ***
+
+8/30/2001: beazley
+ Added support for parameterized %rename directive. *** This
+ new feature can be used to greatly simplify the task of
+ resolving overloaded methods and functions. ***
+
+ In prior versions of SWIG, the %rename directive was
+ used to consistently apply an identifier renaming. For
+ example, if you said this:
+
+ %rename foo bar;
+
+ Every occurrence of 'foo' would be renamed to 'bar'.
+ Although this works fine for resolving a conflict with a
+ target language reserved word, it is useless for
+ for dealing with overloaded methods. This is because
+ all methods are simply renamed to the same thing
+ (generating the same conflict as before).
+
+ Therefore, the only way to deal with overloaded methods
+ was to go through and individually rename them all using
+ %name. For example:
+
+ class Foo {
+ public:
+ virtual void bar(void);
+ %name(bar_i) virtual void bar(int);
+ ...
+ };
+
+ To make matters worse, you had to do this for all
+ derived classes too.
+
+ class Spam : public Foo {
+ public:
+ virtual void bar(void);
+ %name(bar_i) virtual void bar(int);
+ ...
+ };
+
+ Needless to say, this makes it extremely hard to resolve
+ overloading without a lot of work and makes it almost
+ impossible to use SWIG on raw C++ .h files.
+
+ To fix this, %rename now accepts parameter declarators.
+ The syntax has also been changed slightly. For example,
+ the following declaration renames all occurrences of 'bar(int)'
+ to 'bar_i', leaving any other occurrence of 'bar' alone.
+
+ %rename(bar_i) bar(int);
+
+ Using this feature, you can now selectively rename
+ certain declarations in advance. For example:
+
+ %rename(bar_i) bar(int);
+ %rename(bar_d) bar(double);
+
+ // Include raw C++ header
+ %include "header.h"
+
+ When %rename is used in this manner, all occurrence of bar(int)
+ are renamed wherever they might occur. More control is obtained
+ through explicit qualification. For example,
+
+ %rename(bar_i) ::bar(int);
+
+ only applies the renaming if bar(int) is defined in the global scope.
+ The declaration,
+
+ %rename(bar_i) Foo::bar(int);
+
+ applies the renaming if bar(int) is defined in a class Foo.
+ This latter form also supports inheritance. Therefore, if you
+ had a class like this:
+
+ class Spam : public Foo {
+ public:
+ void bar(int);
+ }
+
+ The Spam::bar(int) method would also be renamed (since Spam
+ is a subclass of Foo). This latter feature makes it easy
+ for SWIG to apply a consistent renaming across an entire
+ class hierarchy simply by specifying renaming rules for
+ the base class.
+
+ A class wildcard of * can be used if you want to renaming
+ all matching members of all classes. For example:
+
+ %rename(bar_i) *::bar(int);
+
+ will rename all members bar(int) that are defined in classes.
+ It will not renamed definitions of bar(int) in the global
+ scope.
+
+ The old use of %rename is still supported, but is somewhat
+ enhanced.
+
+ %rename(foo) bar; // Renames all occurrences of 'bar'.
+ %rename(foo) ::bar; // Rename all 'bar' in global scope only.
+ %rename(foo) *::bar; // Rename all 'bar' in classes only.
+ %rename(foo) Foo::bar; // Rename all 'bar' defined in class Foo.
+
+ *** NEW FEATURE ***
+
+8/30/2001: beazley
+ Added support for data-member to member-function
+ transformation. For example, suppose you had a
+ structure like this:
+
+ struct Vector {
+ double x,y;
+ };
+
+ Now suppose that you wanted to access x and y
+ through a member function interface instead
+ of the usual SWIG behavior. For example:
+
+ f.set_x(3.4) # instead of f.x = 3.4
+ x = f.get_x() # instead of x = f.x
+
+ To do this, simply use the new %attributefunc
+ directive. For example:
+
+ %attributefunc(get_%s,set_%s)
+ struct Vector {
+ double x,y;
+ };
+ %noattributefunc
+
+ The arguments to %attributefunc are C-style printf
+ format strings that determine the naming convention
+ to use. %s is replaced with the actual name of the
+ data member. SWIG provides a number of printf
+ extensions that might help. For example, if you
+ wanted to title case all of the attributes, you
+ could do this:
+
+ %attributefunc(get%(title)s,set%(title)s);
+
+ This will turn an attribute 'bar' to 'getBar()' and 'setBar()'.
+
+ (someone requested this long ago, but I finally figured
+ how to implement it in a straightforward manner).
+ *** EXPERIMENTAL NEW FEATURE ***
+
+8/30/2001: beazley
+ SWIG now automatically generates default constructors
+ and destructors if none are defined. This used to be
+ enabled with a command line switch -make_default, but
+ most people want these functions anyways. To turn
+ off this behavior use the -no_default option or include
+ the following pragma in the interface file:
+
+ %pragma no_default;
+
+ This may break certain interfaces that defined their
+ own constructors/destructors using the same naming
+ convention as SWIG. If so, you will get duplicate
+ symbols when compiling the SWIG wrapper file.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+8/29/2001: beazley
+ Changes to Perl5 shadow class code generation. Iterators
+ are no longer supported (FIRSTKEY, NEXTKEY). Also, attribute
+ access has been changed to rely on inheritance in order
+ to provide better behavior across modules.
+
+8/28/2001: beazley
+ Various obscure improvements to the type system and classes.
+ Strange declarations like this are now wrapped correctly
+ (i.e., the generated wrapper code doesn't cause the C++
+ compiler to die with a type error).
+
+ class Foo {
+ public:
+ typedef double Real;
+ Real foo(Real (*op)(Real,Real), Real x, Real y);
+ };
+
+ Inheritance of types is also handled correctly.
+
+8/28/2001: beazley
+ Changes to class wrappers. When SWIG sees two classes like this,
+
+ class X {
+ public:
+ void foo();
+ ...
+ }
+
+ class Y : public X {
+ public:
+ void bar();
+ ...
+ }
+
+ it now only generates two wrapper functions:
+
+ X_foo(X *x) { x->foo(); }
+ Y_bar(Y *y) { y->bar(); }
+
+ Unlike SWIG1.15, the foo() method does *not* propagate to a wrapper
+ function Y_foo(). Instead, the base class method X_foo() must be
+ used.
+
+ This change should not affect modules that use shadow classes, but
+ it might break modules that directly use the low-level C wrappers.
+ This change is being made for a number of reasons:
+
+ - It greatly simplifies the implementation of SWIG--especially
+ with anticipated future changes such as overloaded methods.
+
+ - It results in substantially less wrapper code--especially
+ for big C++ class hierarchies (inherited declarations
+ are no longer copied into every single derived class).
+
+ - It allows for better code generation across multiple
+ SWIG generated modules (code isn't replicated in
+ every single module).
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+8/22/2001: cheetah (william fulton)
+ Provided some Windows documentation in the Win directory and some
+ Visual C++ project files for running examples on Windows.
+
+8/28/2001: mkoeppe
+ [Guile] Handle renamed overloaded functions properly;
+ thanks to Marc Zonzon <Marc.Zonzon@univ-rennes1.fr> for the
+ patch. See the new test case name_cxx.
+
+8/27/2001: mkoeppe
+ [Tcl] Removed lots of warnings issued by the Sun Forte
+ compilers, which were caused by mixing function pointers
+ of different linkages (C++/C).
+
+8/23/2001: mkoeppe
+ Improved the MzScheme module by porting Guile's pointer
+ type checking system and making type dispatch
+ typemap-driven.
+
+8/22/2001: beazley
+ Entirely new symbol table processing. SWIG should be able to
+ report much better error messages for multiple declarations.
+ Also, the new symbol table allows for overloaded functions
+ (although overloading isn't quite supported in the language
+ modules yet).
+
+8/22/2001: cheetah (william fulton)
+ * [Java] %new support added.
+ * [Java] Package JNI name refixed!
+
+8/19/2001: beazley
+ Python module modified to support pointers to C++ members. This
+ is an experimental feature.
+ *** NEW FEATURE ***
+
+8/19/2001: beazley
+ Added limited parsing and full type-system support for pointers to
+ members. None of SWIG's language modules really know how to deal with
+ this so this is really only provided for completeness and future
+ expansion. Note: SWIG does not support pointers to members which
+ are themselves pointers to members, references to pointers to members,
+ or other complicated declarations like this.
+ *** NEW FEATURE ***
+
+8/19/2001: beazley
+ SWIG is much better at parsing certain C++ declarations. Operators and
+ friends generally don't cause anymore syntax errors. However, neither
+ are really supported.
+
+8/18/2001: beazley
+ Added *highly* experimental support for wrapping of C++
+ template declarations. Since C++ templates are essentially
+ glorified macros and SWIG has a fully operational C
+ preprocessor with macro support, the parser now converts
+ template declarations to macros. For example, a function
+ template like this
+
+ template<class T> T max(T a, T b);
+
+ is internally converted into a macro like this:
+
+ %define %_template_max(__name,T)
+ %name(__name) T max(T a, T b);
+ %enddef
+
+ To instantiate a version of the template, a special %template declaration
+ is used like this:
+
+ %template(maxint) max<int>;
+ %template(maxdouble) max<double>;
+
+ The parameter to the %template directive must be proper C identifier that's
+ used to uniquely name the resulting instantiation. When used, the
+ the expanded macro looks like this:
+
+ %name(maxint) int max(int a, int b);
+ %name(maxdouble) double max(double a, double b);
+
+ A similar technique is used for template classes. For instance:
+
+ template<class T> class vector {
+ T *data;
+ int sz;
+ public:
+ vector(int nitems);
+ T *get(int n);
+ ...
+ };
+
+ Gets converted into a macro like this:
+
+ %define %_template_vector(__name, T)
+ %{
+ typedef vector<T> __name;
+ %}
+ class __name {
+ T *data;
+ int sz;
+ public:
+ __name(int nitems);
+ T *get(int n);
+ ...
+ };
+ typedef __name vector<T>;
+ %enddef
+
+ An a specific instantiation is created in exactly the same way:
+
+ %template(intvec) vector<int>;
+
+ The resulting code parsed by SWIG is then:
+
+ %{
+ typedef vector<int> intvec;
+ %}
+ class intvec {
+ int *data;
+ int sz;
+ public:
+ intvec(int nitems);
+ int *get(int n);
+ ...
+ };
+ typedef intvec vector<int>;
+
+ Note: the last typedef is non-standard C and is used by SWIG to provide
+ an association between the name "intvec" and the template type
+ "vector<int>".
+
+ CAUTION: This is an experimental feature and the first time SWIG has
+ supported C++ templates. Error reporting is essential non-existent.
+ It will probably break in certain cases.
+ *** EXPERIMENTAL NEW FEATURE ****
+
+8/15/2001: beazley
+ Change to wrapping of multi-dimensional arrays. Arrays
+ are now properly mapped to a pointer to an array of
+ one less dimension. For example:
+
+ int [10]; --> int *
+ int [10][20]; --> int (*)[20];
+ int [10][20][30]; --> int (*)[20][30];
+
+ This change may break certain SWIG extensions because
+ older versions simply mapped all arrays into a single
+ pointer such as "int *". Although possibly unusual,
+ the new version is correct in terms of the C type system.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+8/06/2001: cheetah (william fulton)
+ * [Java] Array setters generated for struct/class array members.
+
+8/13/2001: beazley
+ Many improvements to Tcl/Perl/Python modules to better
+ work with multiple interface files and the %import directive.
+
+8/13/2001: beazley
+ Fixed up the behavior of %import in the Python module.
+ SWIG no longer pollutes the module namespace by using
+ 'from module import *' to refer to the other module.
+ Instead, it does a proper 'import module'. Also, SWIG
+ may work a lot better when importing modules that include
+ references to other imported modules.
+
+8/13/2001: mkoeppe
+ Added new typemap substitutions, generalizing those of the
+ Guile-specific 5/27/2001 changes:
+ * $descriptor is the same as SWIGTYPE$mangle, but also
+ ensures that the type descriptor of this name gets
+ defined.
+ * $*type, $*ltype, $*mangle, $*descriptor are the same as
+ the variants without star, but they REMOVE one level of
+ pointers from the type. (This is only valid for pointer
+ types.)
+ * $&type, $&ltype, $&mangle, $&descriptor are the same as
+ the variants without ampersand, but they ADD one level of
+ pointers to the type.
+ The Guile-specific substitution $basedescriptor was removed
+ because it was useless.
+
+8/12/2001: beazley
+ The %extern directive is now deprecated and withdrawn. The
+ purpose of this directive was to import selected definitions
+ from other interface files and headers. However, the same
+ functionality is better handled through %import. This
+ leaves SWIG with two file inclusion directives:
+
+ %include filename - Inserts into current interface
+ %import filename - Import types and classes from
+ another module
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+8/09/2001: beazley
+ Added new support for wrapping C/C++ callback functions.
+ A common problem with some C libraries is that many
+ functions take a function pointer as an argument. For example:
+
+ int do_op(..., int (*op)(int,int), ...);
+
+ Unfortunately, the only way to call such a function is to
+ pass it a function pointer of some compatible type. In
+ previous versions of SWIG, you had to solve this problem
+ with some really gross hacks. For example, if you wanted to
+ use the following function as a callback,
+
+ int foo(int, int);
+
+ you had to install a pointer to it as a constant. For example:
+
+ %constant int (*FOO)(int,int) = foo;
+
+ or
+
+ const int (*FOO)(int,int) = foo;
+
+ or if you had a really old SWIG version:
+
+ typedef int (*OP_FUNC)(int,int);
+ int do_op(..., OP_FUNC, ...);
+ const OP_FUNC FOO = foo;
+
+
+ Now, you can do one of two things:
+
+ %constant int foo(int,int);
+
+ This creates a constant 'foo' of type int (*)(int,int).
+ Alternatively, you can do this:
+
+ %callback("%s");
+ int foo(int,int);
+ int bar(int,int);
+ %nocallback;
+
+ In this case, the functions are installed as constants where
+ the name is defined by the format string given to %callback().
+ If the names generated by the format string differ from the
+ actual function name, both a function wrapper and a callback
+ constant are created. For example:
+
+ %callback("%(upper)s");
+ int foo(int,int);
+ int bar(int,int);
+ %nocallback;
+
+ Creates two wrapper functions 'foo', 'bar' and additionally
+ creates two callback constants 'FOO', 'BAR'.
+
+ Note: SWIG still does not provide automatic support for
+ writing callback functions in the target language.
+ *** NEW FEATURE ***
+
+8/06/2001: cheetah (william fulton)
+ * struct nesting fixes as per SF bug #447488.
+
+8/03/2001: beazley
+ The %name directive now applies to constants created with
+ #define and %constant. However, most language modules
+ were never written to support this and will have to be
+ modified to make it work. Tcl, Python, and Perl modules
+ are working now.
+ *** NEW FEATURE ***
+
+8/03/2001: beazley
+ Massive changes and simplification of C declaration parsing.
+ Although SWIG is still not a full C parser, its ability
+ to handle complex datatypes including pointers to functions
+ and pointers to arrays has been vastly improved.
+
+8/03/2001: cheetah (william fulton)
+ * Distribution fixes: autoconf no longer needed to install SWIG.
+
+8/02/2001: beazley
+ Removed two undocumented parsing features. SWIG no longer
+ supports out-of-class static function or variable
+ declarations. For example:
+
+ static int Foo::bar;
+
+ This feature may return if there is sufficient demand.
+ However, since SWIG is most often used with header files,
+ it is more likely for these definitions to be included
+ in the class definition.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+8/02/2001: cheetah (william fulton)
+ * Cleanup of the GIFPlot examples. Upgraded Java GIFPlot example.
+
+8/01/2001: cheetah (william fulton)
+ * [Java] Efficiency changes: _cPtr used where possible rather than
+ getCPtr(). Bug fixes for inheritance - derived class sometimes
+ didn't delete the c memory when _delete() was called.
+ * [Java] Abstract c++ classes are wrapped with a java abstract shadow
+ class. Also a pure virtual function is mapped with an abstract method.
+ * The default output file has always been <module>_wrap.c. It is now
+ <module>_wrap.cxx if the -c++ commandline option is passed to swig.
+ This has been done as otherwise c++ code would appear in a c file.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+7/31/2001: beazley
+ Modified the %constant directive to be more C-like in syntax.
+ The syntax is now:
+
+ %constant NAME = VALUE;
+ %constant TYPE NAME = VALUE;
+
+ For example:
+
+ %constant Foo *Bar = &Spam;
+
+ A more subtle case is as follows:
+
+ %constant int (*FOO)(int,int) = blah;
+
+ *** POTENTIAL INCOMPATIBILITY *** Modules that were using
+ the %constant directive directly will need to be modified.
+
+7/30/2001: beazley
+ Removed obscure and undocumented form of the %inline directive:
+
+ %inline int blah(int a, int b) {
+ ...
+ }
+
+ *** POTENTIAL INCOMPATIBILITY ***
+ (note: this feature was never documented and is withdrawn)
+
+7/30/2001: beazley
+ Removed support for functions with no explicitly declared
+ return type. For example:
+
+ foo(int);
+
+ In C, such functions were implicitly assumed to return an 'int'.
+ In C++, this is illegal. Either way, it's considered bad
+ style. Removing support for this in SWIG will simplify
+ certain issues in parsing.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+7/30/2001: mkoeppe
+ * Partial merge from the CVS trunk. The Source/DOH directory
+ and most of the Source/Swig directory is up-to-date now.
+ * [Guile] %scheme is now a macro for %insert("scheme").
+ New syntax: %scheme "FILENAME";
+ New syntax: %scheme %{ SCHEME-CODE %}
+ New macros %multiple_values, %values_as_list,
+ %values_as_vector.
+
+7/29/2001: beazley
+ %readonly and %readwrite have been turned into SWIG pragmas.
+ %pragma(swig) readonly and %pragma(swig) readwrite. Macros
+ are used to provide backwards compatibility.
+
+7/29/2001: beazley
+ Minor changes to %pragma directive. %pragma must always
+ be directed to a specific language. For example:
+
+ %pragma(swig) make_default;
+ %pragma(perl5) include = "blah.i";
+
+ Also extended the pragma directive to allow code blocks
+
+ %pragma(foo) code = %{
+ ... some code ...
+ %}
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+7/29/2001: beazley
+ Change to the way 'const' variables are wrapped. In
+ previous versions of SWIG, a 'const' variable was
+ wrapped as a constant. Now, 'const' variables are
+ wrapped as read-only variables. There are several
+ reasons for making this change, mostly pertaining to
+ subtle details of how 'const' actually works.
+
+ This will probably break old interfaces that used 'const'
+ to create constants. As a replacement, consider using this:
+
+ const int a = 4; ===> %constant int a = 4;
+ *** POTENTIAL INCOMPATIBILITY ***
+
+7/29/2001: beazley
+ Reorganization and simplification of type parsing.
+ Types with 'const' should work correctly now.
+
+7/29/2001: beazley
+ Most swig directives related to the documentation system
+ are now deprecated.
+
+7/29/2001: beazley
+ Removed support for Objective-C in order to simplify
+ parser reconstruction. Will return if there is sufficient
+ demand.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+7/29/2001: beazley
+ Code inclusion has been modified in the parser. A common
+ directive %insert is now used for everything. This
+ inserts a file into the output:
+
+ %insert(header) "foo.swg"
+
+ This inserts some inline code into the output
+
+ %insert(header) %{
+ ... some code ...
+ %}
+
+ There are five predefined targets for the insert directive:
+
+ "header" - Header section of wrapper file
+ "runtime" - Runtime section of wrapper file
+ "wrapper" - Wrapper section
+ "init" - Initialization function
+ "null" - Nothing. Discard.
+
+ The following directives are still supported, but are
+ now defined in terms of macros:
+
+ %{ ... %} -> %insert(header) %{ ... %}
+ %init %{ ... %} -> %insert(init) %{ ... %}
+ %wrapper %{ ... %} -> %insert(wrapper) %{ ... %}
+ %runtime %{ ... %} -> %insert(runtime) %{ ... %}
+
+ Language modules can define new named targets by using the
+ C API function Swig_register_filebyname() (see main.cxx).
+ For example, if you wanted to expose a shadow class file,
+ you could do this:
+
+ Swig_register_filebyname("shadow", f_shadow);
+
+ Then in the interface file:
+
+ %insert(shadow) %{ ... %}
+
+ Note: this change should not affect any old interfaces, but
+ does open up new possibilities for enhancements.
+
+7/29/2001: beazley
+ SWIG now always includes a standard library file 'swig.swg'.
+ This file defines a large number of macro definitions
+ that define the behavior of various SWIG directives.
+ Previously, all SWIG directives were handled as special
+ cases in the parser. This made the parser a large
+ bloated mess. Now, the parser is stripped down to a few
+ simple directives and macros are used to handle everything else.
+
+7/26/2001: cheetah (william fulton)
+ * Fixes for Sourceforge bug #444748 - new testcase cpp_static:
+ [TCL] Class with just static member variable/function fix
+ [Java] Fixed static variables support
+ [Ruby] Static variables workaround removed
+
+7/27/2001: mkoeppe
+ * stype.c (SwigType_default): Strip qualifiers first. The
+ default type of "int * const" is now "SWIGPOINTER *".
+ * main.cxx: Define "__cplusplus" in SWIG's preprocessor if
+ in C++ mode.
+ * [Guile]: Added some support for arrays and C++
+ references, fixing the "constant_pointers" test case.
+ * Moved most tests from the old Guile-specific test-suite
+ to the new test-suite. Also moved perl5/pointer-cxx
+ example there.
+
+7/26/2001: cheetah (william fulton)
+ * Test-suite added.
+ * Initial testcases: constant_pointers cpp_enum defines
+ sizeof_pointers unions virtual_destructor
+ * Make clean improvements.
+
+7/24/2001: cheetah (william fulton)
+ * [Java] Underscores in the package name and/or module name
+ no longer give linking problems.
+
+7/17/2001: cheetah (william fulton)
+ * More parser bug fixes for constant pointers
+
+7/19/2001: mkoeppe
+ * [Guile] Aesthetic improvement in variable wrappers.
+
+7/18/2001: beazley
+ * Fixed core-dump problem in pointer library when
+ freeing character arrays.
+ SF Bug [ #415837 ] pointer lib core dump
+
+7/18/2001: beazley
+ * Fixed problem with default destructors and shadow
+ classes. SF bug #221128.
+
+7/18/2001: beazley
+ * To provide better line-number tracking in interfaces
+ with lots of macros, special locator comments are
+ now generated by the SWIG preprocessor. For example:
+
+ /*@foo.i,42,BLAH@*/expanded macro/*@@*/
+
+ The first /*@...@*/ sequence sets the context
+ to point to the macro code. The /*@@*/ comment
+ terminates the context. The SWIG parser should
+ ignore all of the locator comments as should
+ the C compiler (should such comments end up
+ in generated wrapper code).
+
+7/18/2001: mkoeppe
+ * The parser now handles severely constified types in
+ typemaps. This introduced a new shift/reduce conflict, but
+ only with a heuristic function-pointer catch-all rule.
+ * [Guile]: Added typemaps for severely constified types.
+ * Fixed the "template-whitespace" problem by canonicalizing
+ whitespace, especially around angle brackets and commas.
+
+7/17/2001: mkoeppe
+ * [Guile]: A Scheme file is emitted if the -scmstub FILE.SCM
+ command-line option is used. The %scheme directive
+ (implemented as a macro for a pragma) allows to insert
+ arbitrary code here. In "simple" and "passive" linkage,
+ the file gets filled with define-module and export
+ declarations.
+
+7/17/2001: cheetah (william fulton)
+ * Parser bug fix to support constant pointers, eg int* const ptr.
+ Fixed everywhere - variables, parameters, return types etc. Note that
+ when wrapping a constant pointer variable only the getter is generated.
+
+7/17/2001: mkoeppe
+ * Fixed SF bug #441470 (#define X "//" would not be parsed,
+ see test-suite entry "preproc-1"), reported by T. W. Burton
+ <twburton@users.sf.net>.
+ * Changed the type of character constants to "char", rather
+ than "char *". Changed the individual language modules
+ to keep the old behaviour, except for the Guile module,
+ where it is desired to make them Scheme characters. This
+ fixes SF bug #231409, test-suite entry "char-constant".
+ * Applied patch for DOH/Doh/memory.c by Les Schaffer
+ <schaffer@optonline.net> (avoid required side effects in
+ assert).
+
+7/17/2001: cheetah (william fulton)
+ * Bug fix in parser for virtual destructor with void as parameter
+ * Bug fix in parser #defines embedded within classes/structs/unions
+ Consequently %constant can now also be placed within a struct/class/union.
+ * Bug fix in parser to allow sizeof(*I_am_a_pointer) within a #define
+
+7/16/2001: mkoeppe
+ * Added changes for the Macintosh contributed by Luigi
+ Ballabio <ballabio@mac.com>.
+ * Some "const" fixes in the code.
+ * [Guile]: Made the constant-wrapper functions much shorter.
+
+7/13/2001: mkoeppe
+ * [Guile]: Some "const" fixes for Guile version 1.3.4.
+ * Handle anonymous arguments with default values and static
+ array members of classes. Both bugs reported by Annalisa Terracina
+ <annalisa.terracina@datamat.it>; see the files
+ Examples/guile/test-suite/static-array-member.i and
+ anonymous-arg.i.
+
+Version 1.3.6 (July 9, 2001)
+=============================
+
+7/09/2001: cheetah (william fulton)
+ * GIFPlot examples: FOREGROUND and BACKGROUND definition missing
+ after TRANSPARENT #define fix in GIFPlot
+
+7/03/2001: beazley
+ Fixed up the version numbers so that the release is known
+ as 1.3.6. All future releases should have a similar
+ version format.
+
+7/02/2001: mkoeppe
+ * [Python]: Prevent the problem of self.thisown not being
+ defined if the C++ class constructor raised an exception.
+ Thanks to Luigi Ballabio <ballabio@mac.com>.
+
+6/29/2001: mkoeppe
+ * More portability fixes; fixed "gcc -Wall" warnings.
+
+6/29/2001: cheetah (william fulton)
+ * GIFPlot examples: TRANSPARENT #define multiple times on Solaris
+ (clashes with stream.h).
+ * Multiple definition bug fix for shadow classes. The perl and python
+ modules had workarounds which have been replaced with fixes in
+ the core. Many of the Language::cpp_xxxx functions now set a
+ flag which the derived classes can access through
+ is_multiple_definition() to see whether or not code should be
+ generated. The code below would have produced varying degrees
+ of incorrect shadow class code for the various modules:
+ class TestClass
+ {
+ public:
+ TestClass() {};
+ TestClass(int a) {};
+ ~TestClass() {};
+ unsigned long xyz(short k) {};
+ unsigned long xyz(int n) {};
+ static void static_func() {};
+ static void static_func(int a) {};
+ };
+ void delete_TestClass(int a);
+
+6/27/2001: mkoeppe
+ * [Perl] Another const-related portability fix.
+
+6/26/2001: cheetah (william fulton)
+ * [Java] Added in cpp_pragma() support with a host of new pragmas - see
+ jswig.html. These are designed for better mixing of Java and c++. It
+ enables the user to specify pure Java classes as bases and/or interfaces
+ for the wrapped c/c++.
+ * [Java] Old pragmas renamed. Warning given for the moment if used.
+ *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
+
+6/25/2001: mkoeppe
+ * Incorporated more build changes contributed by Wyss Clemens
+ <WYS@helbling.ch> for swig/ruby on cygwin.
+
+6/20/2001: cheetah (william fulton)
+ * Makefile mods so that 'make check' uses the swig options in the makefiles
+ * [Java] Removed Generating wrappers message
+ * [Java] NULL pointer bug fix
+ * [Java] Bug fix for Kaffe JVM
+
+6/20/2001: mkoeppe
+ * SWIG_TypeQuery from common.swg now returns a
+ swig_type_info* rather than a void*. This fixes a problem
+ when using pointer.i and C++, as illustrated by the new
+ test-suite example perl5/pointer-cxx.
+ * Portability fixes (const char *).
+ * Incorporated build changes contributed by Wyss Clemens
+ <WYS@helbling.ch>, which make swig runnable on cygwin.
+
+6/19/2001: cheetah (william fulton)
+ * [Java] Bug fix for SF bug #211144. This fix is a workaround
+ until fixed in the core.
+
+6/19/2001: mkoeppe
+ * [Guile]: Portability fixes for use with the Sun Forte
+ compilers.
+ * [Tcl]: Portability fix (const char *).
+ * [Tcl]: Configure now first tries to find a tclConfig.sh
+ file in order to find the Tcl include directory, library
+ location and library name.
+ * [Python]: Added a few possible library locations.
+
+6/18/2001: mkoeppe
+ * [Guile]: Don't call scm_c_export if nothing is to be
+ exported. Don't warn on %module if module has been set
+ already (this frequently occurs when %import is used).
+
+6/16/2001: mkoeppe
+ * [Guile]: New "passive" linkage, which is appropriate for
+ multi-module extensions without Guile module magic.
+
+6/15/2001: mkoeppe
+ * [Guile]: Fixed printing of smobs (space and angle were
+ missing).
+ * Properly generate type information for base classes
+ imported with the %import directive. Thanks to Marcelo
+ Matus <mmatus@acms.arizona.edu> for the report and the
+ patch; this closes SF bug #231619; see also
+ Examples/guile/test-suite/import*.
+ * [Guile]: Fix casting between class and base class; the
+ runtime type system had it the wrong way around; see
+ Examples/guile/test-suite/casts.i
+ * Make typemaps for SWIGPOINTER * with arg name take
+ precedence over those without arg name, to match normal
+ typemap precedence rules.
+ * Fixed the random-line-numbers problem reported as SF bug
+ #217310; thanks to Michael Scharf <scharf@users.sf.net>.
+ * [Guile]: Handle the %name and %rename directives.
+ * New syntax: %name and %rename now optionally take double
+ quotes around the scripting name. This is to allow scripting
+ names that aren't valid C identifiers.
+
+6/14/2001: beazley
+ Made a minor change to the way files are loaded in
+ order to get file/line number reporting correct in
+ the preprocessor.
+
+6/14/2001: mkoeppe
+ * The parser now understands the (non-standard) "long long"
+ types. It is up to the individual language modules to
+ provide typemaps if needed. Reported by Sam Steingold, SF
+ bug #429176.
+ * The parser now understands arguments like "const int *
+ const i". This fixes SF bug #215649.
+ * Fixed the Guile test-suite.
+
+6/13/2001: mkoeppe
+ Partial merge from the CVS trunk at tag
+ "mkoeppe-merge-1". This covers the following changes:
+
+| 01/16/01: ttn
+| Wrote table of contents for Doc/engineering.html. Added section
+| on CVS tagging conventions. Added copyright to other docs.
+| 9/25/00 : beazley
+| Modified the preprocessor so that macro names can start with a '%'.
+| This may allow new SWIG "directives" to be defined as macros instead
+| of having to be hard-coded into the parser.
+|
+| *** Also a yet-to-be-documented quoting mechanism with backquotes
+| *** has been implemented?
+
+6/13/2001: mkoeppe
+ * When configure does not find a language, don't use default
+ paths like /usr/local/include; this only causes build
+ problems.
+ * New directory: Examples/Guile/test-suite, where a few
+ bugs in 1.3a5 are demonstrated.
+ * Handle C++ methods that have both a "const" and a "throw"
+ directive (see Examples/Guile/test-suite/cplusplus-throw.i);
+ thanks to Scott B. Drummonds for the report and the fix.
+ * Handle C++ pointer-reference arguments (like "int *& arg")
+ (see Examples/Guile/test-suite/pointer-reference.i,
+ reported as SF bug #432224).
+ * [Ruby] Fixed typo in rubydec.swg; thanks to Lyle Johnson!
+ * Don't stop testing when one test fails.
+ * [Guile, MzScheme] Don't print "Generating wrappers...".
+
+6/12/2001: mkoeppe
+ [Guile] VECTORLENINPUT and LISTLENINPUT now have separate
+ list length variables. TYPEMAP_POINTER_INPUT_OUTPUT
+ attaches argument documentation involving SCM_TYPE to the
+ standard pointer typemaps. INOUT is now an alias for BOTH.
+
+6/12/2001: cheetah (william fulton)
+ Some Java documentation added.
+ [Java] Fixed bugs in import pragma and shadow pragma.
+
+6/12/2001: mkoeppe
+ Fix declarations of SWIG_define_class
+ (Lib/ruby/rubydec.swg) and SWIG_TypeQuery
+ (Lib/common.swg). Thanks to Lyle Johnson
+ <ljohnson@resgen.com> for the patches.
+
+6/11/2001: mkoeppe
+ [Guile] Use long instead of scm_bits_t; this makes the
+ generated wrapper code compatible with Guile 1.3.4
+ again. Thanks to Masaki Fukushima for pointing this out.
+
+6/11/2001: cheetah (william fulton)
+ The generic INSTALL file from autoconf added. Few changes to README file.
+
+6/11/2001: mkoeppe
+ Fixed typo in Makefile.in; thanks to Greg Troxel
+ <gdt@ir.bbn.com>.
+
+6/08/2001: cheetah (william fulton)
+ make check works again. Examples/GIFPlot configure generated by
+ top level autoconf now.
+
+6/08/2001: mkoeppe
+ Another build change: The new script autogen.sh runs
+ autoconf in the appropriate directories. The top-level
+ configure also configures in Examples/GIFPlot.
+
+6/07/2001: mkoeppe
+ Made the Makefile work with non-GNU make again.
+
+6/07/2001: cheetah (william fulton)
+ [Java] Class/struct members that are arrays of pointers to classes/structs -
+ Shadow class's get/set accessors now use Java classes instead of longs (pointers).
+ [Java] Shadow classes will now clean up memory if function return type
+ is a class/struct.
+ [Java] New example called reference based on the same example from other modules.
+
+6/06/2001: mkoeppe
+ New configure option --with-release-suffix allows for
+ attaching a suffix to the swig binary and the swig runtime
+ libraries. Minor changes to the build system. "swig
+ -swiglib" works again. If invoked with the new option
+ "-ldflags", SWIG prints a line of linker flags needed to
+ link with the runtime library of the selected language
+ module.
+
+6/06/2001: mkoeppe
+ [Guile] gswig_list_p is an int, not a SCM. This typo
+ caused warnings when compiling with a Guile configured with
+ strict C type checking. In INPUT and BOTH typemaps
+ generated by the SIMPLE_MAP macro, use the SCM_TO_C
+ function to convert from Guile to C (rather than C_TO_SCM).
+ Use scm_intprint to print pointers (rather than
+ sprintf). Allow using "-linkage" instead of "-Linkage".
+
+6/05/2001: cheetah (william fulton)
+ [Java] Mods for using inherited c++ classes from Java
+ [Java] New example called class based on the same example from other modules
+
+6/05/2001: cheetah (william fulton)
+ [Java] destructor (_delete()) was not aware of %name renaming
+ [Java] extends baseclass did not know about %name renaming
+ [Java] extends baseclass did extend even when the baseclass was not known to swig
+ [Java] sometimes enum-declarations occured before the Java class declaration
+ [Java] unrelated enum initialisations no longer appear in Java class
+ [Java] if module ends in '_' correct JNI names are now produced
+
+6/04/2001: cheetah (william fulton)
+ [Java] Shadow class mods - Modified constructor replaces
+ newInstance(). _delete() now thread safe. getCPtr() replaces
+ _self. _selfClass() removed as now redundant.
+ *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
+
+ [Java] Not all output java files had SWIG banner. New banner.
+
+ [Java] Shadow class finalizers are output by default: Command
+ line option -finalize deprecated and replaced with -nofinalize.
+ *** POTENTIAL INCOMPATIBILITY FOR JAVA MODULE ***
+
+6/ 1/2001: mkoeppe
+ [Guile] Cast SCM_CAR() to scm_bits_t before shifting it.
+ This is required for compiling with a Guile configured with
+ strict C type checking.
+
+6/ 1/2001: mkoeppe
+ Added configure option "--with-swiglibdir".
+
+5/31/2001: mkoeppe
+ [Guile] Support multiple parallel lists or vectors in
+ the typemaps provided by list-vector.i. New typemaps file,
+ pointer-in-out.i.
+
+5/25/2001: cheetah (william fulton)
+ [Java] HTML update for examples.
+
+5/28/2001: mkoeppe
+ Minor changes to the build system. Added subdirectory for
+ Debian package control files.
+
+5/28/2001: mkoeppe
+ [Guile] Build a runtime library, libswigguile.
+
+5/28/2001: mkoeppe
+ [Guile] New typemap substitution $*descriptor. Use the {}
+ syntax, rather than the "" syntax for the standard
+ typemaps, in order to work around strange macro-expansion
+ behavior of the SWIG preprocessor. This introduces some
+ extra braces.
+
+5/27/2001: mkoeppe
+ [Guile] Handle pointer types with typemaps, rather than
+ hard-coded. New typemap substitutions $descriptor,
+ $basedescriptor; see documentation. Some clean-up in the
+ variable/constants wrapper generator code. New convenience
+ macro SWIG_Guile_MustGetPtr, which allows getting pointers
+ from smobs in a functional style. New typemap file
+ "list-vector.i", providing macros that define typemaps for
+ converting between C arrays and Scheme lists and vectors.
+
+5/25/2001: cheetah (william fulton)
+ [Java] STL string moved into its own typemap as it is c++ code and
+ it break any c code using the typemaps.i file.
+ - Fixes for wrappers around global variables - applies to primitive
+ types and user types (class/struct) and pointers to these.
+ - Structure member variables and class public member variables getters
+ and setters pass a pointer to the member as was in 1.3a3 and 1.1
+ (1.3a5 was passing by value)
+ - Parameters that were arrays and return types were incorrectly
+ being passed to create_function() as pointers.
+ - Fix for arrays of enums.
+ [Java] Updated java examples and added two more.
+ [Java] Java module updated from SWIG1.3a3 including code cleanup etc.
+ [Java] enum support added.
+ [Java] Array support implemented
+ [Java] Shadow classes improved - Java objects used rather than
+ longs holding the c pointer to the wrapped structure/c++class
+
+5/22/2001: mkoeppe
+ [Guile] Fixed extern "C" declarations in C++ mode. Thanks
+ to Greg Troxel <gdt@ir.bbn.com>.
+
+5/21/2001: mkoeppe
+ [Guile] New linkage "module" for creating Guile modules for
+ Guile versions >= 1.5.0.
+
+4/18/2001: mkoeppe
+ [MzScheme] Added typemaps for passing through Scheme_Object
+ pointers.
+
+4/9/2001 : mkoeppe
+ [MzScheme] Added typemaps for `bool'. Inclusion of headers
+ and support routines is now data-driven via mzscheme.i.
+ Headers come from the new file mzschemdec.swg. Don't abort
+ immediately when a type-handling error is reported. When
+ searching for typemaps for enums, fall back to using int,
+ like the Guile backend does. Support char constants. Emit
+ correct wrapper code for variables.
+
+3/12/2001: mkoeppe
+ [Guile] Fixed typemaps for char **OUTPUT, char **BOTH.
+
+3/2/2001 : mkoeppe
+ [Guile] Every wrapper function now gets a boolean variable
+ gswig_list_p which indicates whether multiple values are
+ present. The macros GUILE_APPEND_RESULT, GUILE_MAYBE_VALUES
+ and GUILE_MAYBE_VECTOR use this variable, rather than
+ checking whether the current return value is a list. This
+ allows for typemaps returning a list as a single value (a
+ list was erroneously converted into a vector or a
+ multiple-value object in this case).
+
+3/1/2001 : mkoeppe
+ [Guile] Added support for returning multiple values as
+ vectors, or passing them to a muliple-value
+ continuation. By default, multiple values still get
+ returned as a list.
+
+3/1/2001 : mkoeppe
+ [Guile] Added a "beforereturn" pragma. The value of this
+ pragma is inserted just before every return statement.
+
+3/1/2001 : mkoeppe
+ [Guile] Added support for Guile 1.4.1 procedure
+ documentation formats, see internals.html.
+
+2/26/2001: mkoeppe
+ [Guile] Made the wrapper code compile with C++ if the
+ "-c++" command-line switch is given. Thanks to
+ <monkeyiq@dingoblue.net.au>.
+
+2/26/2001: mkoeppe
+ [Guile] Now two type tables, swig_types and
+ swig_types_initial, are used, as all other SWIG language
+ modules do. This removes the need for the tricky
+ construction used before that the broken Redhat 7.0 gcc
+ doesn't parse. Reported by <monkeyiq@dingoblue.net.au>.
+
+2/26/2001: mkoeppe
+ [Guile] Fixed typemaps for char *OUTPUT, char *BOTH; a bad
+ free() would be emitted. Added typemap for SCM.
+
+
+Version 1.3 Alpha 5
+===================
+
+9/19/00 : beazley
+ [Python] Python module generates more efficient code for
+ creating the return value of a wrapper function. Modification
+ suggested by Jon Travis.
+
+9/19/00 : beazley
+ Library files specified with the -l option are now included at the
+ end of the interface file (reverting to the old behavior).
+
+9/19/00 : beazley
+ Fixed some problems with enum handling. enums are now manipulated as
+ 'int', but cast into the enum type when values are passed to the
+ corresponding C function.
+
+9/19/00 : mkoeppe
+ [Guile] Removed "-with-smobs" command-line option, as this is the
+ default now. Added "-emit-setters" command-line option,
+ which turns on generating procedures-with-setters; see
+ internals.html.
+
+9/18/00 : mkoeppe
+ Incorporated patch #101430, fixing bugs in the Guile module:
+ 1. Some arguments were erroneously taken as *optional* arguments when
+ ignored arguments were present.
+ 2. Guile 1.3.4 was not supported since functions introduced in Guile
+ 1.4 were used.
+ 3. Added handling of `const char *'.
+
+9/17/00 : beazley
+ Fixed problem with failed assertion and large files.
+
+9/17/00 : beazley
+ Fixed problem with the '%' character appearing in added methods
+ and function bodies. Preprocessor bug.
+
+Version 1.3 Alpha 4 (September 4, 2000)
+=======================================
+
+9/3/00 : ttn
+ Added instructions for maintainers in Examples/README on how
+ to make examples also be useful in the testing framework.
+ Also, "make check" now uses ./Lib by via env var `SWIG_LIB'.
+ This is overridable like so:
+ make chk-swiglib=/my/experimental/swig/Lib check
+
+9/3/00 : beazley
+ Added $typemap variable to typemaps. This gets replaced with
+ a string indicating the typemap that is applied. Feature
+ request from rsalz.
+
+9/3/00 : beazley
+ Experimental optimization to code generation for virtual
+ member functions. If you have two classes like this:
+
+ class A() {
+ virtual void foo();
+ }
+
+ class B() : public A {
+ virtual void foo();
+ }
+
+ Swig now will generate a single wrapper function for this
+
+ A_foo(A *a) {
+ a->foo();
+ }
+
+ and use it as the implementation of both A_foo() and B_foo().
+ This optimization only takes place if both methods are declared
+ as virtual and both take identical parameters.
+ *** EXPERIMENTAL FEATURE ***
+
+9/3/00 : beazley
+ Restored the "memberin" typemap for setting structure members.
+ Unlike the old version, the new version is expanded inline in the
+ wrapper function allowing access to scripting language
+ internals (a sometimes requested feature). The "memberout" typemap
+ is gone. Use the "out" typemaps instead.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+9/3/00 : beazley
+ Attribute set methods no longer return the value of a member.
+ For example:
+
+ struct Foo {
+ int x;
+ ...
+ }
+
+ now gets set as follows:
+
+ void Foo_x_set(Foo *f, int x) {
+ f->x = x;
+ }
+
+ In SWIG1.1 it used to be this:
+
+ int Foo_x_set(Foo *f, int x) {
+ return (f->x = x);
+ }
+
+ This has been changed due to the complexity created by trying
+ to do this with more exotic datatypes such as arrays. It also
+ complicates inlining and handling of the "memberin" typemap.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+9/2/00 : beazley
+ Removed the ptrcast() and ptrmap() functions from the
+ pointer.i library file. Old implementation is incompatible
+ with new type system.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+9/2/00 : beazley
+ New runtime function SWIG_TypeQuery(const char *name) added.
+ This function can be used to extract the type info structure
+ that is used for type-checking. It works with either the
+ nice C name or mangled version of a datatype. For example:
+
+ swig_type_info *ty = Swig_TypeQuery("int *");
+ swig_type_info *ty = Swig_TypeQuery("_p_int");
+
+ This is an advanced feature that has been added to support some
+ exotic extension modules that need to directly manipulate
+ scripting language objects.
+ *** NEW FEATURE ***
+
+9/2/00 : beazley
+ New directive %types() added. This is used to
+ explicitly list datatypes that should be included in
+ the runtime type-checking code. Normally it is never
+ necessary to use this but sometimes advanced extensions
+ (such as the pointer.i library) may need to manually
+ add types to the type-checker.
+ *** NEW FEATURE ***
+
+8/31/00 : beazley
+ Improved handling of string array variables. For example,
+ a global variable of the form "char name[64]" is automatically
+ managed as a 64 character string. Previously this didn't
+ work at all or required the use of a special typemap.
+ *** NEW FEATURE (Tcl, Perl, Python) ***
+
+8/31/00 : ttn
+ Added Makefile target `check-c++-examples', which uses new
+ files under Examples/C++ contributed by Tal Shalif. Now "make
+ check" also does "make check-c++-examples". Also, expanded
+ actions in `check-gifplot-example' and `check-aliveness'.
+
+8/30/00 : mkoeppe
+ Major clean-up in the Guile module. Added typemap-driven
+ documentation system. Changed to handle more than 10
+ args. Updated and extended examples.
+ *** NEW FEATURE ***
+
+8/29/00 : beazley
+ Added new %insert directive that inserts the contents of a file
+ into a portion of the output wrapper file. This is only intended
+ for use by writers of language modules. Works as follows:
+
+ %insert(headers) "file.swg";
+ %insert(runtime) "file.swg";
+ %insert(wrappers) "file.swg";
+ %insert(init) "file.swg";
+
+ *** NEW FEATURE ***
+
+8/29/00 : beazley
+ Added new %runtime directive which includes code into the runtime
+ portion of the wrapper code. For example:
+
+ %runtime %{
+ ... some internal runtime code ...
+ %}
+
+ There is no practical reason for ordinary users to use this
+ feature (almost everything can be done using %{ ... %}
+ instead). However, writers of language modules may want to
+ use this in language configuration files.
+ *** NEW FEATURE ***
+
+8/28/00 : beazley
+ Typemaps can now be specified using string literals like
+ this:
+
+ %typemap(in) int "$target = SvIV($source);";
+
+ When code is specified like this, it is *NOT* enclosed
+ inside a local scope (as with older typemap declarations).
+ Note: character escape sequences are interpreted in the
+ code string so if you want to include a quote or some
+ other special character, make sure you use a (\).
+ *** NEW FEATURE ***
+
+8/27/00 : beazley
+ Typemaps have been modified to follow typedef declarations.
+ For example, if you have this:
+
+ typedef int Number;
+
+ %typemap(in) int {
+ ... get an integer ...
+ }
+
+ void foo(Number a);
+
+ The typemap for 'int' will be applied to the argument 'Number a'.
+ Of course, if you specify a typemap for 'Number' it will take
+ precedence (nor will it ever be applied to an 'int').
+ *** POTENTIAL INCOMPATIBILITY ***
+
+8/27/00 : beazley
+ Default typemap specification has changed. In older
+ versions of swig, you could do this:
+
+ %typemap(in) int SWIG_DEFAULT_TYPE {
+ ...
+ }
+
+ To specify the default handling of a datatype. Now that
+ SWIG follows typedef declarations, this is unnecessary.
+ Simply specifying a typemap for 'int' will work for all
+ variations of integers that are typedef'd to 'int'.
+
+ Caveat, specifying the default behavior for pointers,
+ references, arrays, and user defined types is a little
+ different. This must be done as follows:
+
+ %typemap() SWIGPOINTER * {
+ ... a pointer ...
+ }
+ %typemap() SWIGREFERENCE & {
+ ... a reference ...
+ }
+ %typemap() SWIGARRAY [] {
+ ... an array ...
+ }
+ %typemap() SWIGTYPE {
+ ... a user-defined type (by value) ...
+ }
+ *** POTENTIAL INCOMPATIBILITY ***
+
+8/15/00 : dustin
+ The file swig-1.3a1-1.spec has been added to the Tools directory.
+ It can be used to build a redhat package for SWIG, although it
+ will need to be updated for the next public release.
+
+8/15/00 : beazley
+ Typemaps have been completely rewritten. Eventually they may be
+ replaced with something better, but for now they stay. However,
+ there are a number of a significant changes that may trip some
+ people up:
+
+ 1. Typemap scoping is currently broken. Because of this, the
+ following code won't work.
+
+ %typemap(in) blah * {
+ ...
+ }
+ class Foo {
+ ...
+ int bar(blah *x);
+ }
+ %typemap(in) blah *; /* Clear typemap */
+
+ (this breaks because the code for the class Foo is actually
+ generated after the entire interface file has been processed).
+ This is only a temporary bug.
+
+ 2. In SWIG1.1, the %apply directive worked by performing a
+ very complex type-aliasing procedure. From this point on,
+ %apply is simply a generalized typemap copy operation.
+ For example,
+
+ %apply double *OUTPUT { double *x, double *y };
+
+ Copies *ALL* currently defined typemaps for 'double *OUTPUT' and
+ copies them to 'double *x' and 'double *y'.
+
+ Most people probably won't even notice this change in
+ %apply. However, where it will break things is in code like
+ this:
+
+ %apply double *OUTPUT { double *x };
+ %typemap(in) double *OUTPUT {
+ ... whatever ...
+ }
+
+ void foo(double *x);
+
+ In SWIG1.1, you will find that 'foo' uses the 'double *OUTPUT' rule
+ even though it was defined after the %apply directive (this is
+ the weird aliasing scheme at work). In SWIG1.3 and later,
+ the 'double *OUTPUT' rule is ignored because it is defined
+ after the %apply directive.
+
+ 3. The %clear directive has been modified to erase all currently
+ defined typemaps for a particular type. This differs from
+ SWIG1.1 where %clear only removed rules that were added using
+ the %apply directive.
+
+ 4. Typemap matching is now performed using *exact* types.
+ This means that things like this
+
+ %typemap(in) char * { }
+ %typemap(in) const char * { }
+
+ are different typemaps. A similar rule applies for pointers,
+ arrays, and references. For example:
+
+ %typemap(in) double * { }
+
+ used to apply to 'double &', 'double []', Now, it only applies
+ to 'double *'. If you want a 'double &', you'll need to handle
+ that separately.
+
+ 5. Array matching has been simplfied. In SWIG1.1, array matching
+ was performed by trying various combinations of dimensions.
+ For example, 'double a[10][20]' was matched as follows:
+
+ double [10][20]
+ double [ANY][20]
+ double [10][ANY]
+ double [ANY][ANY]
+
+ In SWIG1.3, only the following matches are attempted:
+
+ double [10][20]
+ double [ANY][ANY]
+
+ On the positive side, typemap matching is now *significantly* faster
+ than before.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+8/15/00 : beazley
+ Secret developer feature. Since datatypes are now represented as
+ strings internally, you can bypass limitations of the parser and
+ create a wild datatype by simply enclosing the raw string encoding
+ in backticks (``) and sticking it in the interface file anywhere a
+ type is expected. For example, `a(20).a(10).p.f(int,int)`. This
+ feature is only intended for testing (i.e., you want to see what
+ happens to your language module if it gets a reference to a pointer
+ to an array of pointers to functions or something).
+ *** SICK HACK ***
+
+8/14/00 : beazley
+ Completely new type-system added to the implementation.
+ More details later.
+
+8/11/00 : beazley
+ Cleaned up some of the I/O handling. SWIG no longer generates
+ any temporary files such as _wrap.wrap, _wrap.ii, _wrap.init.
+ Instead, these "files" are kept around in memory as strings
+ (although this is transparent to language modules).
+
+8/4/00 : ttn
+ Added Makefile target "check" and variants.
+ This can be used like "make check" or, to explicitly skip a
+ language LANG: "make skip-LANG=true check". LANG is skipped
+ automatically if ./configure determines that LANG support is
+ insufficient.
+
+ Currently, the check is limited to doing the equivalent of
+ "make all" in some of the Examples directories. This should
+ be expanded both horizontally (different types of tests) and
+ vertically (after "make all" in an Examples subdir succeeds,
+ do some additional tests with the resulting interpreter, etc).
+
+8/4/00 : ttn
+ Added Makefile target "distclean", which deletes all the
+ files ./configure creates, including config.status and friends.
+
+8/3/00 : harcoh
+ java changes??? [todo: document changes]
+
+7/23/00 : beazley
+ Typemaps have been modified to key off of the real datatypes
+ used in the interface file. This means that typemaps for
+ "const char *" and "char *" will be difference as will typemaps
+ for "Vector" and "Vector *."
+ *** POTENTIAL INCOMPATIBILITY ***
+ This is likely to break interfaces that rely on the odd type
+ handling behavior of typemaps in SWIG1.1--especially with
+ respect to interfaces involving pass-by-value.
+
+7/23/00 : beazley
+ New %constant directive. This directive can be used to
+ create true constants in the target scripting language.
+ It's most simple form is something like this:
+
+ %constant FOO 42;
+
+ In this case, the type is inferred from the syntax of the
+ value (in reality, all #define macros are translated into
+ directives of this form).
+
+ An expanded version is as follows:
+
+ %constant(Foo *) FOO = &FooObj;
+
+ In this case, an explicit type can be specified. This
+ latter form may be useful for creating constants that
+ used to be specified as
+
+ const Foo *FOO = &FooObj;
+
+ (which are now treated as variables).
+ *** EXPERIMENTAL FEATURE *** The syntax may change in
+ the final release.
+
+7/23/00 : beazley
+ Modified the parser so that variable declarations of the form
+ "const type *a" are handled as variables, not constants.
+ Note: SWIG1.1 handled this case erroneously because
+ const char *a is a pointer variable that can be reassigned.
+ *** POTENTIAL INCOMPATIBILITY ***
+ Note: just because this is the "right" way to do things,
+ doesn't mean it's the most appropriate interpretation.
+ I suspect that many C programmers might use 'const char *'
+ with the intent of creating a constant, without realizing
+ that they've created a reassignable global variable.
+
+7/23/00 : beazley
+ The C/C++ wrapping layer has been completely redesigned and
+ reimplemented. This change should iron out a few rough
+ spots with the handling of datatypes. In addition, the
+ wrapper code is somewhat cleaner.
+ *** POTENTIAL INCOMPATIBILITY ***
+ This change may break interfaces that involve
+ subtle corner-cases with typemaps and the %addmethods
+ directive since some of these features had somewhat
+ type handling behavior in SWIG1.1.
+
+7/23/00 : beazley
+ The "memberin" and "memberout" typemaps are gone for the
+ moment, but they might return as soon as I figure out
+ how to integrate them with some of the streamlined C wrapper
+ functions.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+7/22/00 : beazley
+ A variety of old type handling functions such as print_type(),
+ print_full(), print_mangle(), etc... are gone and have been
+ replaced with a smaller set of functions. See the file
+ Doc/internals.html for details. This will break all third
+ party language modules.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+7/20/00 : beazley
+ Deprecated the %val and %out directives. These directives
+ shouldn't really be necessary since typemaps can be used
+ to achieve similar results. This also cleans up the
+ handling of types and parameters quite a bit.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+7/20/00 : ttn
+ Fixed unspecified-module bug in Guile support and removed
+ more non-"with-smobs" functionality using patches submitted
+ by Matthias Koeppe.
+
+ Re-enable recognition of "-with-smobs" (with no effect since
+ we use smobs by default now) for the time being. After the
+ 1.3a4 release, this option will signal an error.
+
+7/17/00 : ttn
+ Fixed NULL-input bug in parameter list handling.
+ Reported by Matthias Koeppe.
+
+7/12/00 : beazley
+ Fixed memory leak in Python type-checking code. Reported by
+ Keith Davidson. Bug #109379.
+
+7/10/00 : beazley
+ Changed internal data structures related to function parameters.
+
+7/10/00 : beazley
+ Fixed some bugs related to the handling of the %name() directive
+ and classes in the Tcl module. Problem reported by James Bailey.
+
+7/10/00 : beazley
+ Fixed parsing and enum handling problems with character constants.
+ Reported by Greg Kochanski.
+
+7/10/00 : beazley
+ Removed WrapperFunction class from the core and updated the language
+ module. This will break third party modules.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+7/9/00 : beazley
+ Implementation of SWIG no longer makes use of C++ operator overloading.
+ This will almost certainly break *all* third party language modules
+ that are not part of the main SWIG CVS tree. Sorry.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+7/8/00 : beazley
+ Removed the experimental and undocumented "build" typemap that
+ was intended to work with multiple arguments. Simply too weird
+ to keep around. Besides, a better replacement is in the works.
+
+7/6/00 : ttn
+ Removed non-"with-smobs" functionality (Guile support), i.e.,
+ "-with-smobs" is now the default and no longer needs to be
+ specified on the command-line.
+
+7/5/00 : ttn
+ Incorporated Ruby support contributed by Masaki Fukushima.
+
+6/28/00 : ttn
+ Applied more-than-10-args bugfix patch contributed
+ by Matthias Koeppe.
+
+6/27/00 : beazley
+ Rewrote some of the string handling and eliminated the C++
+ implementation (which is now just a wrapper).
+
+6/27/00 : ttn
+ Added Doc/index.html and Doc/internals.html. The target
+ audience for the latter is new SWIG developers.
+
+
+Version 1.3 Alpha 3 (June 18, 2000)
+===================================
+
+6/18/00 : beazley
+ Removed the naming.cxx, hash.cxx, and symbol.cxx files from
+ the SWIG1.1 directory. Continued to migrate things away
+ from the C++ base (although there's still a lot of work to do).
+
+6/17/00 : beazley
+ Added a few more examples to the Examples directory. Still
+ need to do a lot of work on this.
+
+6/16/00 : beazley
+ Added -includeall to follow all #include statements in the
+ preprocessor.
+
+6/15/00 : beazley
+ Tried to fix as many C++ warnings as possible when compiling
+ with the Sun Workshop C++ compiler. Unfortunately, this means
+ that there are a lot of statements that contain string literals
+ of the form (char*)"Blah".
+
+6/15/00: beazley
+ A variety of cleanup and performance optimization in the
+ low-level DOH library. This seems to result in a speedup
+ of 50-100% for preprocessing and other related tasks.
+
+5/10/00 : ttn
+ Applied variable-wrapping bugfix patch contributed
+ by Matthias Koeppe.
+
+4/17/00 : ttn
+ Updated MzScheme support contributed by Oleg Tolmatcev.
+ We now use a `Scheme_Type'-based structure to wrap pointers.
+
+4/11/00 : ttn
+ Incorporated further Guile-support patch by Matthias Koeppe.
+ Typemaps previously deleted have been re-added. There is now
+ exception handling (see Doc/engineering.html). `SWIG_init' is now
+ declared extern only for simple linkage. Some bugs were fixed.
+
+4/06/00 : ttn
+ Incorporated MzScheme support contributed by Oleg Tolmatcev.
+ This includes new directories Lib/mzscheme and Examples/mzscheme.
+
+4/03/00 : ttn
+ Added Examples/guile and children. This is an adaptation of
+ the same-named directory from the SWIG-1.1p5 distribution.
+ Added Guile-specific section to Doc/engineering.html.
+
+4/02/00 : ttn
+ Incorporated new guilemain.i by Martin Froehlich.
+ Incorporated Guile-support rewrite patch by Matthias Koeppe.
+ The command line option "-with-smobs" enables implementation of
+ pointer type handling using smobs, the canonical mechanism for
+ defining new types in Guile. Previous implementation (using
+ strings) is at the moment still supported but deprecated. At
+ some point, "-with-smobs" will be the default and no longer
+ required.
+
+3/13/00 : beazley
+ Added purify patches submitted by Ram Bhamidipaty.
+
+3/02/00 : ttn
+ Added support for different Guile "linkage" schemes.
+ Currently, "-Linkage hobbit" works.
+
+
+Version 1.3 Alpha 2 (March 1, 2000)
+===================================
+
+2/29/00 : beazley
+ Made SWIG ignore the 'mutable' keyword.
+
+2/29/00 : beazley
+ Incorporated some patches to the Perl5 module related to
+ the -hide option and the destruction of objects.
+ Patch submitted by Karl Forner.
+
+2/27/00 : ttn
+ Incorporated Guile support contributed by Matthias Koeppe.
+ This includes a cpp macro in Lib/guile/guile.swg and the
+ entire file Lib/guile/typemaps.i.
+
+2/25/00 : ttn
+ Modified configure.in and Makefile.in files to support
+ non-local build (useful in multi-arch environments).
+
+2/24/00 : ttn
+ Incorporated Guile support contributed by Clark McGrew.
+ This works with Guile 1.3, but since it depends heavily
+ on the gh_ interface, it should work for all later versions.
+ It has not been tested with versions before 1.3.
+ WARNING: Code is unstable due to experimentation by ttn.
+
+2/16/00 : beazley
+ A variety of performance improvements to the Python shadow
+ class code generation. Many of these result in substantial
+ runtime performance gains. However, these have come at
+ a cost of requiring the use of Python 1.5.2. For older
+ versions, use 'swig -noopt -python' to turn off these
+ optimization features.
+
+Version 1.3 Alpha 1 (February 11, 2000)
+=======================================
+
+2/11/00 : Added 'void' to prototype of Python module initializer.
+ Reported by Mark Howson (1/20/00).
+
+2/11/00 : beazley
+ Modified the Python shadow class code to discard ownership of an
+ object whenever it is assigned to a member of another object.
+ This problem has been around for awhile, but was most recently
+ reported by Burkhard Kloss (12/30/99).
+
+2/11/00 : beazley
+ Added braces around macros in the exception.i library. Reported
+ by Buck Hodges (12/19/99)
+
+2/11/00 : beazley
+ Fixed bug in the constraints.i library. Reported by Buck
+ Hodges (12/14/99)
+
+2/11/00 : beazley
+ The %native directive now generates Tcl8 object-style command calls.
+ A full solution for Tcl7 and Tcl8 is still needed. Patch suggested
+ by Mike Weiblen (11/29/99)
+
+2/11/00 : beazley
+ Modified the typemap code to include the $ndim variable for arrays.
+ Patch provided by Michel Sanner (11/12/99).
+
+2/11/00 : beazley
+ Modified the Python module to raise a Runtime error if an attempt
+ is made to set a read-only member of a shadow class. Reported by
+ Michel Sanner (11/5/99).
+
+2/10/00 : The documentation system has been removed. However, it is likely
+ to return at some point in the future.
+
+2/1/00 : Added a number of performance enhancements to the Python shadow
+ classing and type-checking code. Contributed by Vadim Chugunov.
+
+ 1. Remove _kwargs argument from the shadow wrappers when -keyword
+ option is not specified. This saves us a construction of keyword
+ dictionary on each method call.
+
+ def method1(self, *_args, **_kwargs):
+ val = apply(test2c.PyClass1_method1, (self,) + _args, _kwargs)
+ return val
+
+ becomes
+
+ def method1(self, *_args):
+ val = apply(test2c.PyClass1_method1, (self,) + _args)
+ return val
+
+ 2. Incorporate self into the _args tuple. This saves at least one tuple
+ allocation per method call.
+
+ def method1(self, *_args):
+ val = apply(test2c.PyClass1_method1, (self,) + _args)
+ return val
+
+ becomes
+
+ def method1(*_args):
+ val = apply(test2c.PyClass1_method1, _args)
+ return val
+
+ 3. Remove *Ptr classes.
+ Assume that we are SWIGging a c++ class CppClass.
+ Currently SWIG will generate both CppClassPtr class
+ that hosts all methods and also CppClass that is derived
+ from the former and contains just the constructor.
+ When CppClass method is called, the interpreter will try
+ to find it in the CppClass's dictionary first, and only then
+ check the base class.
+
+ CppClassPtr functionality may be emulated with:
+
+ import new
+ _new_instance = new.instance
+ def CppClassPtr(this):
+ return _new_instance(CppClass, {"this":this,"thisown":0})
+
+ This saves us one dictionary lookup per call.
+
+ <DB>The new module was first added in Python-1.5.2 so it
+ won't work with older versions. I've implemented an
+ alternative that achieves the same thing</DB>
+
+ 4. Use CObjects instead of strings for pointers.
+
+ Dave: This enhancements result in speedups of up to 50% in some
+ of the preliminary tests I ran.
+
+2/1/00 : Upgraded the Python module to use a new type-checking scheme that
+ is more memory efficient, provides better performance, and
+ is less error prone. Unfortunately, it will break all code that
+ depends on the SWIG_GetPtr() function call in typemaps.
+ These functions should be changed as follows:
+
+ if (SWIG_GetPtr(string,&ptr,"_Foo_p")) {
+ return NULL;
+ }
+
+ becomes
+
+ if (SWIG_ConvertPtr(pyobj, &ptr, SWIG_TYPE_Foo_p) == -1) {
+ return NULL;
+ }
+
+ Note: In the new implementation SWIG_TYPE_Foo_p is no longer
+ a type-signature string, but rather an index into a type
+ encoding table that contains type information.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+1/30/00 : loic
+ Conditionaly compile experimental code with --enable-experiment
+ configure flag.
+ Fix .cvsignore to ignore configrue & yacc generated files
+
+1/28/00 : loic
+ Apply automake everywhere
+ Keep configure scripts so that people are not *forced* to autoconf
+ Keep sources generated by yacc so that compilation without yacc
+ is possible.
+ Source/LParse/cscanner.c: change lyacc.h into parser.h to please
+ default yacc generation rules.
+ Use AC_CONFIG_SUBDIRS in configure.in instead of hand made script.
+ Update all relevant .cvsignore to include .deps
+ Fixed missing ; line 136 Source/Swig/swig.h
+
+1/13/00 : beazley
+ Fixed a number of minor end-of-file parsing problems in the
+ preprocessor.
+
+1/13/00 : beazley
+ Added -freeze option that forces SWIG to freeze upon exit.
+ This is only used as a debugging tool so that I can more
+ easily examine SWIG's memory footprint.
+
+1/13/00 : beazley
+ Added patch to guile module for supporting optional arguments
+ Patch contributed by Dieter Baron.
+
+1/13/00 : loic
+ Added .cvsignore, Examples/.cvsignore, Source/DOH/Doh/.cvsignore
+ Source/SWIG1.1/main.cxx: Fixed -I handling bug
+ Source/Modules1.1/java.cxx: fixed char* -> const char* warnings that are
+ errors when compiling with gcc-2.95.2
+ Source/SWIG1.1/main.cxx: cast const char* to char* for String_replace
+ token and rep should really be const.
+
+1/12/00 : beazley
+ Added Harco's Java modules.
+
+1/12/00 : beazley
+ Revoked the %ifdef, %ifndef, %endif, %if, %elif, and %else
+ directives. These are no longer needed as SWIG now has a real
+ preprocessor.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+1/12/00 : beazley
+ Moved the documentation modules from the SWIG directory
+ to the Modules directory (where they really should have been
+ to begin with).
+
+1/12/00 : beazley
+ Removed the -stat option for printing statistics. The
+ statistics reporting was inadequate and mostly broken
+ anyway.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+1/12/00 : beazley
+ Removed the -t option for reading a typemap file. More
+ trouble than it's worth. Just include typemaps at the top
+ of the interface file.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+1/12/00 : beazley
+ Removed the %checkout directive.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+1/12/00 : beazley
+ Removed the -ci option for file checkin. Too problematic
+ to implement. Probably better to just put your SWIG library
+ under CVS instead.
+ *** POTENTIAL INCOMPATIBILITY ***.
+
+1/11/00 : beazley
+ Deleted the LATEX module. Sorry... Didn't know anyone
+ who was using it. Besides, I'm looking to simplify
+ the documentation system.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+1/11/00 : beazley
+ Modified the ASCII documentation module to use a .txt
+ suffix for its output file instead of .doc.
+
+1/11/00 : beazley
+ Added the long-lost SWIG preprocessor back to the system.
+ It should be enabled by default. Raw preprocessed output
+ can be viewed using swig -E file.i.
+ *** NEW FEATURE ***
+
+1/11/00 : beazley and djmitche
+ Completely reorganized the SWIG directory structure. The
+ basic organization is now:
+
+ Source/ SWIG source code
+ Lib/ SWIG library files (swig_lib)
+ Doc/ Documentation
+ Examples/ Examples
+
+ More directories will be added as needed.
+
+12/08/99: Loic Dachary (loic@senga.org)
+ Enhanced package handling for perl5 and c++.
+
+ With new option -hide Foo::Bar, every perl5 object (Frob) is
+ qualified by Foo::Bar::Frob. The package name is solely used
+ to encapsulate C/C++ wrappers output in <module>_wrap.c and the
+ corresponding perl package in <module>.pm. Note that a package
+ name may contain :: (Frob::Nitz) and will be relative to the
+ package name provided by -hide (Foo::Bar::Frob::Nitz).
+
+ In *_wrap.c, SWIG_init macro is used. Was previously defined
+ but not used and simplifies code.
+
+ Added typemap(perl5,perl5in) and typemap(perl5,perl5out) that
+ do the equivalent of typemap(perl5,in) and typemap(perl5,out)
+ but contain perl code and applies to wrappers generated by
+ -shadow.
+
+ Lacking proper regression tests I used
+ Examples/perl5/{c++,constraint,defarg,except,
+ graph/graph[1234],multinherit,nested,shadow,simple,tree,
+ typemaps/{argv,argv2,arraymember,database,file,ignore,integer,
+ output,passref,reference,return}}/. I ran swig with and without
+ the patches, diff the generatedsources, run the .pl files
+ and checked that the results are identical. In all those examples
+ I had no error.
+
+11/21/99: Modified the Tcl module to provide full variable linking capabilities
+ to all datatypes. In previous versions, a pair of accessor functions
+ were created for datatypes incompatible with the Tcl_LinkVar() function.
+ Now, we simply use variable traces to support everything. This may
+ break scripts that rely upon the older behavior.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+11/21/99: Added slight tweak to wrapper generator to collect local variables
+ of similar type. Produces somewhat more compact wrapper code.
+
+11/20/99: Modified the Tcl module to use SWIG_GetArgs() to parse
+ arguments. This is a technique borrowed from Python in which
+ arguments are converted using a format string convention similiar
+ to fprintf(). This results in a *substantial* reduction in the
+ size of the resulting wrapper code with only a modest runtime overhead
+ in going through the extra conversion function.
+
+11/13/99: Completely rewrote the class/structure generation code for the
+ Tcl module. Now, a small set of runtime functions are used
+ to implement the functionality for all classes (instead of a
+ massive amount of runtime code being generated for each class).
+ Class specific information is simply encoded in a series of
+ static tables. This results in a *HUGE* reduction in wrapper
+ code size--especially for C++.
+
+11/13/99: Removed the -tcl (Tcl 7.x) module. Tcl 8.0 is now several
+ years old and the defacto standard--no real reason to keep
+ supporting the old version at this point.
+
+11/13/99: Cleaned up -c option for Python module. The pyexp.swg file
+ is now gone.
+
+11/13/99: Fixed external declarations to work better with static linking
+ on Windows. Static linking should now be possible by defining
+ the -DSTATIC_LINK option on the command line. Patch contributed
+ by Alberto Fonseca.
+
+11/5/99 : Fixed an obscure code generation bug related to the generation
+ of default constructors. Bug reported by Brad Clements.
+
+11/5/99 : Fixed a few memory problems found by purify.
+
+11/5/99 : Officially deprecated the -htcl, -htk, and -plugin options
+ from the Tcl and Tcl8 modules.
+
+10/26/99: Removed unused variable from python/typemaps.i. Patch
+ contributed by Keith Davidson.
+
+8/16/99 : Added _WIN32 symbol to libraries to better support Windows.
+
+8/16/99 : Deprecated the Perl4 module. It is no longer included in the
+ distribution and no longer supported. In the entire 3 years SWIG
+ has been around I never received a single comment about it so I'm
+ assuming no one will miss it...
+
+8/16/99 : Modified the type-checking code to register type mappings using a
+ table instead of repeated calls to SWIG_RegisterMapping(). This
+ reduces the size of the module initialization function somewhat.
+
+8/15/99 : Cleaned up the pointer type-checking code in the Tcl module.
+
+8/15/99 : Many changes to the libraries to support runtime libraries.
+
+8/13/99 : Eliminated C++ compiler warning messages about extern "C" linkage.
+
+8/13/99 : Some cleanup of Python .swg files to better support runtime libraries
+ on Windows.
+
+8/13/99 : Modified the %pragma directive to attach pragmas declared inside
+ a class definition to the class itself. For example:
+
+ class foo {
+ ...
+ %pragma(python) addtomethod = "insert:print `hello world'"
+ ...
+ }
+
+ Most people don't need to worry about how this works. For people
+ writing backend modules, class-based pragmas work like this:
+
+ lang->cpp_open_class() // Open a class
+ lang->cpp_pragma() // Supply pragmas
+ ... // Emit members
+
+ lang->cpp_close_class() // Close the class
+
+ All of the pragmas are passed first since they might be used to
+ affect the code generation of other members. Please see
+ the Python module for an example. Patches contributed
+ by Robin Dunn.
+
+8/13/99 : Patch to Python shadow classes to eliminate ignored
+ exception errors in destructors. Patch contributed
+ by Robin Dunn.
+
+8/11/99 : Minor patch to swig_lib/python/swigptr.swg (added SWIGSTATIC
+ declaration). Patch contributed by Lyle Johnson.
+
+8/11/99 : Added FIRSTKEY/NEXTKEY methods to Perl5 shadow classes
+ Patch contributed by Dennis Marsa.
+
+8/11/99 : Modified Python module so that NULL pointers are returned
+ and passed as 'None.' Patch contributed by Tal Shalif.
+
+8/10/99 : Fixed missing 'int' specifiers in various places.
+
+8/10/99 : Added Windows makefile for Runtime libraries. Contributed
+ by Bob Techentin.
+
+8/10/99 : Fixed minor problem in Python runtime makefile introduced
+ by keyword arguments.
+
+8/8/99 : Changed $target of perl5(out) typemap from ST(0) to
+ ST(argvi). Patch contributed by Geoffrey Hort.
+
+8/8/99 : Fixed bug in typemap checking related to the ANY keyword
+ in arrays and ignored arguments. Error reported by
+ Geoffrey Hort.
+
+8/8/99 : %enabledoc and %disabledoc directives can now be used
+ inside class/structure definitions. However, no check
+ is made to see if they are balanced (i.e., a %disabledoc
+ directive inside a class does not have to have a matching
+ %enabledoc in the same class).
+
+8/8/99 : Keyword argument handling is now supported in the Python
+ module. For example:
+
+ int foo(char *bar, int spam, double x);
+
+ Can be called from Python as
+
+ foo(x = 3.4, bar="hello", spam=42)
+
+ To enable this feature, run SWIG with the '-keyword' command
+ line option. Mixing keyword and default arguments
+ should work as well. Unnamed arguments are assigned names
+ such as "arg1", "arg2", etc...
+
+ *** POTENTIAL INCOMPATIBILITY ***
+ Functions with duplicate argument names such as
+ bar(int *OUTPUT, int *OUTPUT) will likely cause problematic
+ wrapper code to be generated. To fix this, use different
+ names or use %apply to map typemaps to alternate names.
+
+8/8/99 : Handling of the 'this' pointer has been changed in Python shadow
+ classes. Previously, dereferencing of '.this' occured in the
+ Python shadow class itself. Now, this step occurs in the C
+ wrappers using the following function:
+
+ SWIG_GetPtrObj(PyObject *, void **ptr, char *type)
+
+ This function can accept either a string containing a pointer
+ or a shadow class instance with a '.this' attribute of
+ appropriate type. This change allows the following:
+
+ 1. The real shadow class instance for an object is
+ passed to the C wrappers where it can be examined/modified
+ by typemaps.
+
+ 2. Handling of default/keyword arguments is now greatly
+ simplified.
+
+ 3. The Python wrapper code is much more simple.
+
+ Plus, it eliminated more than 300 lines of C++ code in the
+ Python module.
+
+ *** CAVEAT : This requires the abstract object interface.
+ It should work with Python 1.4, but probably nothing older
+ than that.
+
+
+8/8/99 : Fixed handling of "const" and pointers in classes. In particular,
+ declarations such as
+
+ class foo {
+ ...
+ const char *msg;
+ const int *iptr;
+ }
+
+ are handled as assignable variables as opposed to constant
+ values (this is the correct behavior in C/C++). Note:
+ declarations such as "char *const msg" are still unsupported.
+ Constants declared at the global level using const are also
+ broken (because I have a number of interfaces that rely upon
+ this behavior).
+
+ *** POTENTIAL INCOMPATIBILITY *** This may break interfaces that
+ mistakenly treat 'const char *' types as constant values.
+
+8/8/99 : Modified the parser to support bit-fields. For example:
+
+ typedef struct {
+ unsigned int is_keyword : 1;
+ unsigned int is_extern : 1;
+ unsigned int is_static : 1;
+ } flags;
+
+ Bit-fields can only be applied to integer types and their
+ are other restrictions. SWIG performs no such type-checking
+ (although the C compiler will catch problems when it tries to
+ compile the wrapper code).
+
+8/8/99 : Removed trailing space of $basetype substitution in typemaps.
+ This is to allow things like this:
+
+ %typemap(python, argout) spam** OUTPUT{
+ ...
+ char* a = "$basetype_p";
+ ...
+ }
+
+ (Patch suggested by Nathan Dunfield).
+
+6/22/99 : Made a very slight tweak to the Perl5 shadow class
+ code that allows typemaps to alter the return type
+ of objects (to support polymorphic types). Patch
+ contributed by Drake Diedrich.
+
+4/8/99 : Fixed null pointer handling bug in Perl module.
+ Patch contributed by Junio Hamano.
+
+3/17/99 : Fixed bug in perl5ptr.swg for ActiveState Perl.
+ Patch contributed by Greg Anderson.
+
+2/27/99 : Eliminated segmentation fault when Swig runs on
+ empty files.
+
+2/27/99 : Added patch to Guile module to eliminate unused
+ variables. Contributed by Mike Simons.
+
+2/27/99 : Fixed problem with %addmethods returning references.
+
+2/27/99 : Fixed Runtime/Makefile. Patch contributed by
+ Mike Romberg.
+
+2/27/99 : Incorporated patches to the type-checker.
+
+2/27/99 : Fixed problem with -exportall switch and shadow classes
+ in Perl5 module. Patch contributed by Dennis Marsa.
+
+2/27/99 : Modified Perl5 module to recognize 'undef' as a NULL char *.
+ Patch contributed by Junio Hamano.
+
+2/27/99 : Fixed the Perl5 module to support the newer versions of
+ ActiveState Perl for Win32.
+
+2/27/99 : Fixed the include order of files specified with the
+ -I option.
+
+2/5/98- : Dave finishes his dissertation, goes job hunting, moves to
+2/5/99 Chicago and generally thrashes about.
+
+Version 1.1 Patch 5 (February 5, 1998)
+======================================
+
+2/4/98 : Fixed a bug in the configure script when different package
+ locations are specified (--with-tclincl, etc...).
+
+2/2/98 : Fixed name-clash bug related to the switch to C macros for accessor
+ functions. The new scheme did not work correctly for objects
+ with members such as 'obj', 'val', etc... Fixed the bug by
+ appending the word 'swig' to macro argument names. Patch
+ contributed by Rudy Albachten.
+
+2/2/98 : Slight fix to the Perl5 module to eliminate warning messages
+ about 'varname used only once : possible typo'. Fix
+ contributed by Rudy Albachten.
+
+1/9/98 : Fixed a bug in the Perl 5 module related to the creation of
+ constants and shadow classes.
+
+1/9/98 : Fixed linking bug with Python 1.5 embed.i library file.
+
+Version 1.1 Patch 4 (January 4, 1998)
+=====================================
+
+1/4/98 : Changed structured of the Examples directory to be more friendly
+ to Borland C++.
+
+1/4/98 : Added the function Makefile.win.bc for compiling the examples
+ under Borland 5.2.
+
+1/4/98 : Slight change to the perl5 module and C++ compilation. The
+ <math.h> library is now included before any Perl headers
+ because Perl the extern "C" linkage of math.h screws alot
+ of things up (especially on Windows).
+
+1/2/98 : Change to the Python module that reduces the number of constants
+ created by C++ classes, inheritance, and shadow classes. This
+ modification may introduce a few slight incompatibilities if
+ you attempt to use the non-shadow class interface with shadow
+ classes enabled. Patch contributed by Mike Romberg.
+
+1/2/98 : Support for Tcl 8.0 namespaces has been added. This *replaces*
+ the original SWIG mechanism that assumed [incr Tcl] namespaces.
+ To use namespaces, simply run SWIG with the following options
+
+ swig -tcl -namespace foo.i
+
+ This places everything in a namespace that matches
+ the module name
+
+ swig -tcl -namespace -prefix bar foo.i
+
+ This places everything in the namespace 'bar'
+
+ The use of namespaces is new in Tcl 8.0. However, the wrapper code
+ generated by SWIG will still work with all versions of Tcl newer
+ than and including Tcl 7.3/Tk3.6 even if the -namespace option is
+ used.
+
+ *** POTENTIAL INCOMPATIBILITY ***
+ This change may break existing applications that relied on the
+ -prefix and -namespace options.
+
+1/2/98 : Added the following constants to the Tcl wrapper code
+
+ SWIG_name - Name of the SWIG module
+ SWIG_prefix - Prefix/namespace appended to command names
+ SWIG_namespace - Name of the namespace
+
+ SWIG library writers can use these to their advantages.
+
+1/2/98 : Fixed a bug in the Tcl8 module related to the creation of
+ pointer constants (the function SWIG_MakePtr was missing from
+ the wrapper code).
+
+1/2/98 : Added the consthash.i library file to the Tcl and Tcl8 modules.
+
+1/1/98 : Changed and cleaned up the Python typemaps.i file. The following
+ significant changes were made :
+
+ 1. The OUTPUT typemap now returns Python tuples instead of
+ lists. Lists can be returned as before by using the
+ L_OUTPUT type. If compatibility with older versions
+ is needed, run SWIG with the -DOUTPUT_LIST option.
+
+ 2. The BOTH typemap has been renamed to INOUT. For backwards
+ compatibility, the "BOTH" method still exists however.
+
+ 3. Output typemaps now generate less code than before.
+
+ Changes to typemaps.i may break existing Python scripts that assume
+ output in the form of a list.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+12/31/97: Fixed long overdue problems with the testing scripts and certain
+ makefiles that required the use of the bash shell. Everything should
+ work properly with the standard Bourne shell (sh) now.
+
+12/31/97: Modified typemaps to allow $basetype as a valid local variable.
+ This allows for all sorts of bizarre hackish typemaps that
+ do cool things. Patch contributed by Dominique Dumont.
+
+12/31/97: Switched accessor functions generated for member data to
+ C preprocessor macros (except in cases involving typemaps
+ or char *).
+
+12/31/97: Fixed a bug related to C++ member data involving references.
+
+12/31/97: Changed accessor functions for C++ member functions to
+ preprocessor macros. This cleans up the wrapper code
+ and results in fewer function definitions.
+
+12/31/97: Changed the default C constructor to use calloc() instead
+ of malloc()
+
+12/30/97: Changed the creation of constants in the Perl5 module.
+ For all practical purposes, they should work in exactly the
+ same way as before except that they now require much less
+ wrapper code. Modules containing large numbers of
+ constants may see greater than a 50% reduction in wrapper
+ code size.
+
+12/30/97: Modified the Python module to be more intelligent about the
+ creation of constants. SWIG no longer generates redundant
+ global variables and the size of the module initialization
+ function should be reduced. (Many thanks to Jim Fulton).
+
+12/29/97: Fixed a bug in C++ code generation related to member functions,
+ default arguments, and references.
+
+12/29/97: Fixed configure script and a few makefiles to support Python 1.5
+
+12/29/97: Added 'embed15.i' library file. This file should be used to
+ staticly link versions of Python 1.5. To make it the default,
+ simply copy 'swig_lib/python/embed15.i' to 'swig_lib/python/embed.i'
+
+Version 1.1 Patch 3 (November 24, 1997)
+========================================
+
+11/23/97: Fixed a bug in the Perl5 module with shadow classes and
+ static class functions that return class instances.
+ Note : The fix for this bug requires a slight restructuring of
+ of the .pm files created by SWIG.
+
+11/23/97: Fixed a bug in the Tcl/Tcl8 modules related to variable linking
+ of character arrays. If you declared a global variable 'char foo[10]',
+ the generated wrapper code would either cause a segmentation fault
+ immediately upon loading or weird memory corruption elsewhere.
+ This should now be fixed although character arrays can only be
+ read-only.
+
+11/23/97: Fixed a bug with the %import directive that caused it to
+ fail if files were imported from directories other than
+ the current working directory.
+
+11/23/97: Fixed incorrect diagnostic message in the ASCII documentation
+ module.
+
+11/23/97: Changed the behavior of the -o option when used with shadow
+ classes. If -o was used to specify both the pathname and filename
+ of SWIG's output such as
+
+ swig -o /home/swig/wrapper.c -shadow -perl5 foo.i
+
+ The wrapper code would be placed the file specified with -o,
+ but the .pm file and documentation would be placed in the
+ directory where SWIG was run. Now, these files are placed
+ in the same directory as the file specified with the -o option.
+ This change is also needed for proper operation on the
+ Macintosh.
+
+11/23/97: Added a 'this()' method to Perl5 shadow classes. This can
+ be used to return the normal pointer value from a shadow
+ class that is represented as a tied hash. To use just
+ invoke as a method like this :
+
+ $l = new List; # Create an object
+ $ptr = $l->this(); # Get the normal pointer value
+
+ *** NEW FEATURE ***
+
+11/23/97: Fixed the Tcl 8 pointer.i library file (which was completely
+ broken in 1.1p2).
+
+11/23/97: Modified the Perl5 type-checker to fix a few problems
+ with global variables of pointer types and to allow
+ tied hashes to be used interchangably with normal
+ pointer values.
+
+11/23/97: Modified the typemap mechanism to allow output
+ typemaps of type 'void'. These were ignored previously,
+ but now if you specify,
+
+ %typemap(lang,out) void {
+ ... return a void ...
+ }
+
+ You can change or assign a return value to the function.
+
+11/23/97: Fixed processing of 'bool' datatypes in the Python module.
+
+11/23/97: Fixed minor parsing error with C++ initializers. For example,
+
+ class B : public A {
+ public:
+ B() : A() { ... };
+ ...
+ }
+
+11/23/97: Fixed the Tcl8 module so that C functions that call back into
+ Tcl don't corrupt the return result object (SWIG was gathering
+ the result object too early which leads to problems if subsequent
+ Tcl calls are made).
+
+11/23/97: Fixed a code generation bug in the Python module when two or
+ more output parameters were used as the first arguments of a
+ function. For example :
+
+ %include typemaps.i
+ void foo(double *OUTPUT, double *OUTPUT, double a);
+
+ Previously, doing this resulted in the creation of an
+ extraneous comma in the output, resulting in a C syntax error.
+
+11/22/97: Fixed a bug when template handling that was stripping whitespace
+ around nested templates. For example :
+
+ Foo<Bar<double> >
+
+ was getting munged into Foo<Bar>> which is a syntax error in
+ in the C++ compiler.
+
+11/22/97: Fixed bugs in the Borland C++ makefiles.
+
+11/22/97: Fixed memory corruption bug when processing integer
+ arguments in Tcl8 module.
+
+11/21/97: Fixed a bug in the Runtime/Makefile related to Tcl 8.
+
+11/21/97: Fixed a bug with the %new directive and Perl5 shadow classes.
+ No longer generates a perl syntax error.
+
+11/9/97 : Changed a strncpy() to strcpy() in the pointer type-checker.
+ This results in a substantial performance improvement in
+ type-checking.
+
+10/29/97: Fixed a bug in the code generation of default arguments and
+ user-defined types. For example :
+
+ void foo(Vector a, Vector b = d);
+
+ should now work properly.
+
+Version 1.1 Patch 2 (September 4, 1997)
+=======================================
+
+9/4/97 : Fixed problem with handling of virtual functions that
+ was introduced by some changes in the C++ module.
+
+Version 1.1 Patch 1 (August 27, 1997)
+=====================================
+
+8/26/97 : Fixed compilation and run-time bugs with Tcl 8.0 final.
+
+8/21/97 : Fixed code generation bug with arrays appearing as arguments
+ to C++ member functions. For example :
+
+ class Foo {
+ public:
+ void Bar(int a[20][20]);
+ };
+
+ There is still a bug using arrays with added methods
+ however.
+
+8/20/97 : Fixed a bug with generating the code for added methods
+ involving pass-by-value.
+
+8/19/97 : Modified the typemapper to substitute the '$arg' value
+ when declaring local variables. For example :
+
+ %typemap(in) double * (double temp_$arg) {
+ ... do something ...
+ }
+
+ When applied to a real function such as the following :
+
+ void foo(double *a, double *b, double *result);
+
+ three local variables will be created as follows :
+
+ double temp_a;
+ double temp_b;
+ double temp_result;
+
+ This can be used when writing multiple typemaps that need
+ to access the same local variables.
+
+
+7/27/97 : Fixed a variety of problems with the %apply directive and arrays.
+ The following types of declarations should now work :
+
+ %apply double [ANY] { Real [ANY] };
+ %apply double [4] { double [10] };
+
+ A generic version of apply like this :
+
+ %apply double { Real };
+
+ should now work--even if arrays involving doubles and Reals are
+ used later.
+
+7/27/97 : Changed warning message about "Array X has been converted to Y" to
+ only appear if running SWIG in verbose mode.
+
+7/27/97 : Added the variables $parmname and $basemangle to the typemap
+ generator. $parmname is the name of the parameter used
+ when the typemap was matched. It may be "" if no parameter
+ was used. $basemangle is a mangled version of the base
+ datatype. Sometimes used for array handling.
+
+7/27/97 : Changed the behavior of output arguments with Python shadow classes.
+ Originally, if a function returned an object 'Foo', the shadow class
+ mechanism would create code like this :
+
+ def return_foo():
+ val = FooPtr(shadowc.return_foo())
+ val.this = 1
+ return val
+
+ The problem with this is that typemaps allow a user to redefine
+ the output behavior of a function--as a result, we can no longer
+ make any assumptions about the return type being a pointer or
+ even being a single value for that matter (it could be a list,
+ tuple, etc...). If SWIG detects the use of output typemaps
+ (either "out" or "argout") it returns the result unmodified like
+ this :
+
+ def return_foo():
+ val = shadowc.return_foo()
+ return val
+
+ In this case, it is up to the user to figure out what to do
+ with the return value (including the possibility of converting it
+ into a Python class).
+
+7/26/97 : Fixed a parsing problem with types like 'unsigned long int',
+ 'unsigned short int', etc...
+
+7/24/97 : Minor bug fix to Tcl 8 module to parse enums properly. Also
+ fixed a memory corruption problem in the type-checker.
+ (patch contributed by Henry Rowley.
+
+7/24/97 : Added Python-tuple typemaps contributed by Robin Dunn.
+
+7/24/97 : Incorporated some changes to the Python module in support of
+ Mark Hammond's COM support. I'm not entirely sure they
+ work yet however. Needs documentation and testing.
+
+7/24/97 : Fixed code generation bugs when structures had array members
+ and typemaps were used. For example :
+
+ %typemap(memberin) double [20][20] {
+ ... get a double [20][20] ...
+ }
+ struct Foo {
+ double a[20][20];
+ }
+
+ Originally, this would generate a compiler-type error when
+ the wrapper code was compiled. Now, a helper function like
+ this is generated :
+
+ double *Foo_a_set(Foo *a, double val[20][20]) {
+ ... memberin typemap here ...
+ return (double *) val;
+ }
+
+ When writing typemaps, one can assume that the source variable
+ is an array of the *same* type as the structure member. This
+ may break some codes that managed to work around the array bug.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+7/13/97 : Fixed bug in Perl5 module when using C global variables that
+ are pointers. When used in function calls and other operations,
+ the value of the pointer would be invalid---causing core
+ dumps and other problems. SWIG implements global variables
+ using Perl magic variables. As it turns out, the error
+ was caused by the fact that the pointer-extraction code
+ was somehow bypassing the procedure used to resolve magical
+ variables (hence, leaving the value undefined). To fix
+ the problem, SWIG now explicitly resolves magic before
+ extracting pointer values.
+
+7/12/97 : Eliminated the last remnants of free() and malloc() from
+ the SWIG compiler.
+
+7/12/97 : Fixed parsing problems with typemaps involving arrays and
+ temporary variables of arrays. Also made it possible for
+ SWIG to handle typemaps like this :
+
+ %typemap(in) double [ANY] (double temp[$dim0]) {
+ ... store data in temp[$dim0] ...
+ }
+
+ Not only does this typemap match any double [] array, it
+ creates a local variable with precisely the right dimensions.
+ (ie. $dim0 gets filled in with the real number of dimensions).
+ Of course, off the record, this will be a way to add more
+ functionality to the typemaps.i libraries.
+
+7/9/97 : Fixed some problems with Perl5, static linking, and shadow
+ classes. When statically linking multiple modules together, write
+ a top-level interface file like this when shadow classes are not
+ used :
+
+ %module swig, foo, bar, glob;
+ %include perlmain.i
+
+ When shadow classes are used, the module names have an extra 'c'
+ appended so it should read as :
+
+ %module swig, fooc, barc, globc;
+ %include perlmain.i
+
+ When linking multiple modules, consider using the SWIG runtime
+ library.
+
+7/8/97 : Incorporated fixed versions of the Borland C++ Makefiles.
+
+7/8/97 : First cut at trying to eliminate excessive compiler warnings.
+ As it turns out, alot of warnings go away if you just make
+ declarations like this
+
+ clientData = clientData;
+
+ in the resulting wrapper code. Most compilers should just
+ ignore this code (at least would can hope).
+
+7/8/97 : Fixed bizarre code generation bug with typemaps and C++ classes.
+ In some cases, typemaps containing printf formatting strings such as
+
+ %typemap(memberout) int * {
+ printf("%d",42);
+ }
+
+ Would generate completely bogus code with garbage replacing
+ the '%d'. Caused by one faulty use of printf (wasn't able to find
+ any other occurences).
+
+7/7/97 : Fixed bug in Python shadow class generation with non-member
+ functions that are returning more than one value.
+
+7/7/97 : Incorporated modifications to make SWIG work with Guile 1.2.
+ Still need to test it out, but it is rumored to work.
+
+7/2/97 : Fixed some bugs related to output arguments and Python shadow
+ classes. If an output argument is detected, SWIG assumes
+ that the result is a list and handles it appropriately.
+ If the normal return type of an function is an object,
+ it will be converted into a shadow class as before, but
+ with the assumption that it is the first element of a
+ list. *** NOTE : This behavior has been subsequently changed ***
+
+6/29/97 : Changed EXPORT to SWIGEXPORT in all of the language modules.
+ Should provide better compatibility with Windows.
+
+6/29/97 : Modified Python shadow classes so that output arguments
+ work correctly (when typemaps are used).
+
+Version 1.1 (June 24, 1997)
+===========================
+
+6/24/97 : Fixed Objective-C constructor bug when working with Perl5
+ shadow classes.
+
+6/23/97 : Fixed some parsing problems with Objective-C. Declarations
+ such as the following should work now :
+
+ - foo : (int) a with: (int) b;
+
+6/22/97 : Added SWIG Runtime library. This library contains
+ the SWIG pointer type-checker and support functions
+ that are normally included in every module. By using
+ the library, it is easier to work with multiple SWIG
+ generated modules.
+
+6/22/97 : Fixed minor bug in Perl5 module related to static linking
+ of multiple modules.
+
+6/22/97 : Fixed some bugs with the %import directive. When used with
+ Perl5 shadow classes, this generates a 'require' statement
+ to load in external modules.
+
+6/22/97 : Added -swiglib option. This prints out the location of the
+ SWIG library and exits. This option is only really useful to
+ configuration tools that are looking for SWIG and its library
+ location (e.g. autoconf, configure, etc...).
+
+6/21/97 : Fixed export bug with Perl5.004 on Windows-NT.
+
+6/20/97 : Minor change to code generation of class/structure members in
+ order to work better with typemaps. Should have no noticable
+ impact on existing SWIG modules.
+
+6/19/97 : Added -t option. This allows SWIG to load a typemap file before
+ processing any declarations. For example :
+
+ swig -t typemaps.i -python example.i
+
+ At most, only one typemap file can be specified in this manner.
+ *** NEW FEATURE ***
+
+6/18/97 : Need a Makefile fast? Type
+
+ swig [-tcl, -perl5, -python] -co Makefile
+
+ and you will get a Makefile specific to that target language.
+ You just need to modify it for your application and you're
+ ready to run.
+
+6/18/97 : Completed the -ci option. This option checks a file into the
+ SWIG library. It should be used in conjunction with a
+ language option. For example :
+
+ swig -tcl -ci foobar.i
+
+ Checks the file foobar.i into the Tcl part of the library.
+ In order to check a file into the general library (accessible
+ to all languages modules), do the following
+
+ swig -ci -o ../foobar.i foobar.i
+
+ (Admittedly this looks a little strange but is unavoidable).
+ The check-in option is primarily designed for SWIG maintenance
+ and library development. The command will fail if the user does
+ not have write permission to the SWIG library. Third party library
+ extensions can easily install themselves by simply providing
+ a shell script that uses 'swig -ci' to install the appropriate
+ library files. It is not necessary to know where the SWIG library
+ is located if you use this mechanism.
+ *** NEW FEATURE ***
+
+6/16/97 : Fixed a bug in shadow class generation when %name() was applied
+ to a class definition. Unfortunately, fixing the bug required
+ a change in the Language C API by adding an extra argument to
+ the Language::cpp_class_decl() function. This may break
+ SWIG C++ extensions.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+6/15/97 : Added a warning message if no module name is specified with the
+ %module directive or -module option.
+
+6/15/97 : Fixed line number bug when reporting errors for undefined
+ base classes.
+
+6/15/97 : Added new %rename directive. This allows the forward declaration
+ of a renaming. For example :
+
+ %rename OldName NewName;
+
+ .... later ...
+ int OldName(int);
+
+ Unlike %name, %rename will rename any occurence of the old name.
+ This applies to functions, variables, class members and so forth.
+ There is no way to disable %rename once set, but you can change the
+ name by redeclaring it to something else.
+ *** NEW FEATURE ***
+
+6/15/97 : Improved the implementation of the %name directive so that it
+ could be used with conditional compilation :
+
+ #ifdef SWIG
+ %name(NewName)
+ #endif
+ int OldName(int);
+
+6/15/97 : Added support for functions with no return datatype. In this case,
+ SWIG assumes a return type of 'int'.
+
+6/11/97 : Improved error reporting in the parser. It should be a little
+ less sensitive to errors that occur inside class definitions
+ now. Also reports errors for function pointers.
+
+6/11/97 : Made '$' a legal symbol in identifiers. This is to support
+ some Objective-C libraries. Some compilers (such as gcc) may also
+ allow identifiers to contain a $ in C/C++ code as well (this is
+ an obscure feature of C). When '$' appears in identifier, SWIG
+ remaps it to the string '_S_' when creating the scripting language
+ function. Thus a function 'foo$bar' would be called 'foo_S_bar'.
+
+6/11/97 : Fixed bug in Python shadow classes with __repr__ method. If
+ supplied by the user, it was ignored, but now it should work.
+
+6/9/97 : Fixed the Tcl 8.0 module to work with Tcl 8.0b1. SWIG is no
+ longer compatible with *any* alpha release of Tcl 8.0.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+6/7/97 : Put a maximal error count in (currently set to 20). SWIG will bail out
+ if it generates more errors than this (useful for preventing SWIG
+ from printing 4000 syntax errors when it gets confused).
+
+6/7/97 : Fixed segmentation fault when parsing variable length arguments.
+
+6/7/97 : Minor change to Perl5 module. C++ static functions are now
+ put in the same package as their class when using shadow classes.
+
+6/7/97 : Centralized the naming of functions, members, wrappers etc... By
+ centralizing the naming scheme, it should be possible to make
+ some multi-file optimizations. Also, it should be possible to
+ change SWIG's naming scheme (perhaps a new feature to be added
+ later).
+
+6/2/97 : Added 'arginit' typemap. This can be used to assign initial values
+ to function arguments. Doing so makes it somewhat easier to detect
+ improper argument passing when working with other typemaps.
+
+6/2/97 : Fixed code generation bug when read-only variables were inherited
+ into other classes. Under inheritance, the variables would
+ become writable, but this has now been corrected.
+
+5/30/97 : An empty %name() directive is no longer allowed or supported.
+ This directive was originally used to strip the prefix
+ off of a class or structure. Unfortunately, this never really
+ seemed to work right and it complicated the C++ code generator
+ significantly. As far as I can tell no one uses it, so it
+ is now history. *** POTENTIAL INCOMPATIBILITY ***
+
+5/28/97 : Fixed a parsing bug with #define and C++ comments. Declarations
+ such as the following now work properly :
+
+ #define CONST 4 // A Comment
+
+5/28/97 : Made some performance improvements to the SWIG String class.
+ (only affects the SWIG compiler itself).
+
+5/28/97 : Modified the parser to skip template definitions and issue a
+ warning message.
+
+5/28/97 : Preliminary support for parameterized types added (ie. templates).
+ Types such as the following should pass through the SWIG compiler
+
+ void foo(vector<complex> *a, vector<double> *b);
+
+ When used, the entire name 'vector<complex>' becomes the name
+ of the datatype. Due to space limitations in datatype
+ representations, the name should not exceed 96 characters.
+
+ Note : This is only part of what is needed for template support.
+ Template class definitions are not yet supported by SWIG.
+
+ The template notation above may also be used when specifying
+ Objective-C protocol lists.
+ *** NEW FEATURE ***
+
+5/24/97 : First cut at Objective-C support added. As it turns out, almost
+ everything can be handled with only a few minor modifications to
+ the C++ module.
+ *** NEW FEATURE ***
+
+5/23/97 : Fixed repeated definition bug in multiple inheritance handling
+ when multiple base classes share a common base class (ie.
+ the evil diamond).
+
+5/21/97 : Fixed rather embarrassing typo that worked its way into the
+ Tests/Build directory.
+
+5/19/97 : Fixed code generation bug when using native methods and
+ shadow classes with Python and Perl5 modules.
+
+5/19/97 : Modified the %apply directive slightly so that it would work
+ with pointers a little better. For example :
+
+ %apply unsigned long { DWORD };
+
+ Applies *all* typemaps associated with "unsigned long" to
+ "DWORD". This now includes pointers to the two datatypes.
+ For example, a typemap applied to "unsigned long **" would
+ also be applied to any occurrence of "DWORD **" as well.
+
+5/19/97 : Fixed an ownership assignment bug in the Perl5 module when
+ class members were returning new objects belonging to
+ different classes.
+
+5/17/97 : Added a few more typemap variables.
+
+ $name - Name of function/variable/member
+ $basetype - Base datatype (type without pointers)
+ $argnum - Argument number
+
+5/16/97 : Fixed embarrassing underscore error in local variable
+ allocator.
+
+5/16/97 : Fixed namespace clash bug in parameterized typemaps
+ when creating arrays as new local variables.
+
+5/15/97 : Fixed some bugs with inheritance of added methods across
+ multiple files. SWIG now uses names of base classes
+ when generating such functions.
+
+5/14/97 : Finished support for default typemaps. Primarily used
+ internally, they can be used to match the basic
+ built-in datatypes used inside of SWIG. You can
+ specify them in interface files as well like this :
+
+ %typemap(tcl,in) int SWIG_DEFAULT_TYPE {
+ $target = atoi($target);
+ }
+
+ Unlike normal typemaps, this default map will get applied
+ to *all* integer datatypes encountered, including those
+ renamed with typedef, etc...
+
+5/13/97 : Fixed substring bug in type checker.
+
+5/12/97 : Fixed bug in parameterized typemaps when declaring local
+ variables of structures.
+
+Version 1.1 Beta6 (May 9, 1997)
+===============================
+
+5/9/97 : Fixed bizarre NULL pointer handling bug in Perl5 module.
+
+5/8/97 : Fixed mysterious segmentation fault when running SWIG on an
+ empty file.
+
+5/7/97 : The code generator will now replace the special symbol "$cleanup"
+ with the cleanup code specified with the "freearg" typemap.
+ This change needed to properly manage memory and exceptions.
+
+5/5/97 : Added the 'typemaps.i' library file. This contains a
+ variety of common typemaps for input values, pointers,
+ and so on.
+
+5/5/97 : Changed behavior of "argout" typemap in Python module.
+ Old versions automatically turned the result into a
+ Python list. The new version does nothing, leaving the
+ implementation up to the user. This provides more flexibility
+ but may break older codes that rely on typemaps.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+5/5/97 : Fixed bug in Python module related to the interaction of
+ "argout" and "ignore" typemaps.
+
+5/5/97 : Fixed bug in Python module that would generate incorrect code
+ if all function arguments are "ignored".
+
+5/4/97 : Added %apply and %clear directives. These form a higher level
+ interface to the typemap mechanism. In a nutshell, they
+ can be used to change the processing of various datatypes without
+ ever having to write a typemap. See the SWIG documentation
+ for more details. ** NEW FEATURE **
+
+5/4/97 : Added a local variable extension to the typemap handler.
+ For example :
+
+ %typemap(tcl,in) double *(double temp) {
+ temp = atof($source);
+ $target = &temp;
+ }
+
+ In this case, 'temp' is a local variable that exists
+ in the entire wrapper function (not just the typemap
+ code). This mechanism provides better support for
+ certain types of argument handling and also makes it
+ possible to write thread-safe typemaps. Any number
+ local variables can be declared by supplying a comma
+ separated list. Local variables are guaranteed to be
+ unique, even if the same typemap is applied many times
+ in a given function.
+ ** Not currently supported in Perl4 or Guile modules.
+
+5/2/97 : Fixed processing of %ifdef, %endif, %if, etc... (These are
+ SWIG equivalents of the C preprocessor directives that
+ can pass through the C preprocessor without modification).
+
+5/2/97 : Fixed major (but subtle) bug in the run-time type checker
+ related to searching and type-checking for C++ inheritance.
+ To make a long story short, if you had two classes named
+ "Foo" and "FooObject" the type checker would sometimes
+ get confused and be unable to locate "Foo" in an internal
+ table.
+
+5/2/97 : Fixed some bugs in the -co option.
+
+4/24/97 : Pointer library added to the SWIG library.
+
+4/19/97 : Added the %new directive. This is a "hint" that can be used
+ to tell SWIG that a function is returning a new object. For
+ example :
+
+ %new Foo *create_foo();
+
+ This tells SWIG that create_foo() is creating a new object
+ and returning a pointer to it. Many language modules may
+ choose to ignore the hint, but when working with shadow classes,
+ the %new is used to handle proper ownership of objects.
+
+ %new can also be used with dynamically allocated strings.
+ For example :
+
+ %new char *create_string();
+
+ When used, all of the language modules will automatically cleanup
+ the returned string--eliminating memory leaks.
+ ** NEW FEATURE **
+
+4/19/97 : Added a new typemap "newfree". This is used in conjunction with
+ the %new directive and can be used to change the method by which
+ a new object returned by a function is deleted.
+
+4/19/97 : The symbol "__cplusplus" is now defined in the SWIG interpreter
+ when running with the -c++ option.
+
+4/17/97 : Added support for static member functions when used inside the
+ %addmethods directive.
+
+4/15/97 : Added a special typemap symbol PREVIOUS that can be used to
+ restore a previous typemap. For example :
+
+ %typemap(tcl,in) int * = PREVIOUS;
+
+ This is primarily used in library files.
+
+4/13/97 : Added %pragma directive for Perl5 module. Two new pragmas are
+ available :
+
+ %pragma(perl5) code = "string"
+ %pragma(perl5) include = "file.pl"
+
+ Both insert code into the .pm file created by SWIG. This can
+ be used to automatically customize the .pm file created by SWIG.
+
+4/13/97 : Scanner modified to only recognize C++ keywords when the -c++
+ option has been specified. This provides support for C programs
+ that make use of these keywords for identifiers.
+ SWIG may need to be explicitly run with the -c++ option when
+ compiling C++ code (this was allowed, but not recommended in
+ previous versions). **POTENTIAL INCOMPATIBILITY**
+
+4/11/97 : Fixed a rather nasty bug in the Perl5 module related to using
+ variable linking with complex datatypes and pointers. On Unix,
+ code would work (somehow), but would cause an access violation
+ under Windows-NT. The fix should correct the problem,
+ but there may still be a problem using global variables of
+ complex datatypes in conjunction with shadow classes. Fortunately,
+ this sort of thing seems to be relatively rare (considering
+ that the bug has been around for more than a year - yikes!).
+
+4/11/97 : Fixed bizarre constant evaluation bug in Perl5 code generation
+ when running under Windows-NT.
+
+4/8/97 : Bug when using default arguments and C++ references fixed.
+
+4/8/97 : Fixed code generation bugs in Python and Perl5 modules related to
+ using class renaming (applying the %name directive to a class
+ definition) and shadow classes.
+
+4/7/97 : Fixed minor bugs in swigptr.swg, tcl8ptr.swg, and perl5ptr.swg to
+ prevent infinite loops when weird datatypes are passed.
+
+3/29/97 : 'Makefile.win' added. This is used to build most of the examples
+ in the Examples directory under Windows NT/95.
+
+3/27/97 : Fixes to SWIG's error return codes. SWIG now returns non-zero
+ exit codes for certain kinds of errors (which makes it more
+ friendly to makefiles). An overhaul of the error handling
+ is on the to-do list and will probably show up in a later release.
+
+3/25/97 : Bug fix. "freearg" and "argout" typemaps have been fixed in
+ the Perl5 module. In previous versions, function input parameters
+ and function output parameters shared the same memory space--causing
+ all sorts of nasty problems when trying to pass perl values by
+ reference. SWIG now internally makes a "copy" (which is really
+ just a pointer) of affected parameters and uses that. This
+ is done transparently so there is no noticable impact on any
+ SWIG generated modules. This change is probably only noticable
+ to expert users.
+
+3/25/97 : Added type-check to verbose and stat mode. SWIG will now generate a list
+ of all datatypes that were used but undefined (useful for tracking
+ down weird bugs). This is enabled with the -v option (which
+ is now officially known as "overly verbose" mode) or the -stat option.
+
+3/25/97 : Slight change to the parser to make include guards work correctly.
+ For example :
+
+ #ifndef INTERFACE_I
+ #define INTERFACE_I
+ %module foobar.i
+ ... declarations ...
+ #endif
+
+3/24/97 : %checkout directive added. This allows an interface file to
+ extract files from the SWIG library and place them in the
+ current directory. This can be used to extract scripts and
+ other helper code that might be associated with library files.
+ For example :
+
+ %checkout array.tcl
+
+ Will look for a file "array.tcl" in the library and copy it
+ to the current directory. If the file already exists in the
+ directory, this directive does nothing (it will not overwrite an
+ existing file). This only an experimental feature for now.
+
+3/24/97 : SWIG will now look in the SWIG Library for a file if it can't
+ find it in the current directory. As a result, it is easy to
+ make modules from SWIG library files. For example, if you
+ want to make a Python module from the SWIG timers library, just
+ type this in any directory :
+
+ swig -python timers.i
+
+ You will get the files timers_wrap.c and timers_wrap.doc in
+ the current directory that you can now compile. The file
+ remains in the SWIG library (although you can check it out
+ using the -co option). *** New Feature ***
+
+3/24/97 : -co option added to SWIG to allow easy access to the SWIG library.
+ When used, this instructs SWIG to check out a library file and
+ place it in the current directory. For example :
+
+ unix > swig -co array.i
+ array.i checked out from the SWIG library
+ unix >
+
+ Once in your directory you can customize the file to suit your
+ particular purposes. The checkout option makes it easy to
+ grab library files without knowing anything about the SWIG
+ installation, but it also makes it possible to start
+ including scripts, C code, and other miscellaneous files
+ in the library. For example, you could put a cool script
+ in the library and check it out whenever you wanted to use it.
+ *** New Feature ***
+
+3/24/97 : #pragma export directives added to Tcl output for compiling
+ shared libraries on the Mac.
+
+3/24/97 : Minor changes to wish.i and tclsh.i library files to provide
+ support for the Macintosh.
+
+3/19/97 : SWIG's policy towards NULL pointers has been relaxed. The
+ policy of requiring a special compiler directive -DALLOW_NULL
+ to use NULL pointers is no longer supported. While this may
+ seem "unsafe", it turns out that you can use a "check"
+ typemap to achieve some safety. For example :
+
+ %typemap(perl5,check) Node * {
+ if (!$target)
+ croak("NULL Pointers not allowed.");
+ }
+
+ This prevents any NULL value of a "Node *" pointer to be
+ passed to a function. (I think this is much cleaner
+ than the old -DALLOW_NULL hack anyways).
+
+3/19/97 : Fixed pointer handling errors in Perl5 module. Modules no
+ longer core dump when a Perl reference is inadvertently
+ passed in as a C pointer.
+
+3/18/97 : Added a "check" typemap. This can be used to check the
+ validity of function input values. For example :
+
+ %typemap(perl5,check) int posint {
+ if ($target < 0)
+ croak("Argument is not a positive integer");
+ }
+
+3/18/97 : Added an $arg variable to Tcl typemaps. This makes it easier
+ to return argument values by "reference".
+
+3/18/97 : Fixed a code generation bug when using C++ references and
+ the %addmethods directive.
+
+3/18/97 : Fixed a few glitches in the typemap module with respect to
+ chaining. For example :
+
+ %typemap(tcl,in) int {
+ $in // Inserts prexisting typemap
+ printf("Received a %d\n", $target);
+ }
+
+ This has been allowed for quite some time, but didn't work
+ if no existing typemap was defined. Now, it still doesn't
+ work if no existing typemap is defined, but it issues a
+ warning message. There is some support using default typemaps,
+ but none of the language modules take advantage of it. This
+ should be considered experimental at this time.
+
+Version 1.1b5 Patch 1 (March 16, 1997)
+======================================
+
+3/16/97 : Fixed references bug with C++ code generation.
+
+3/16/97 : Fixed initialization bug in the documentation system that
+ was causing weird problems.
+
+3/16/97 : Fixed fatal bug with -c option in the Python module.
+
+3/13/97 : Fixed bug in the documentation system involving the %text directive
+ and sorting. In the old system, %text entries would float to the
+ top of a section because they were "nameless". Now they are
+ attached to the previous declaration and will stay in the proper
+ location relative to the previous entry.
+
+Version 1.1b5 (March 12, 1997)
+==============================
+
+3/11/97 : Fixed compilation problems introduced by Tcl/Tk 8.0a2.
+ *** INCOMPATIBILITY *** SWIG no longer works with Tcl/Tk 8.0a1.
+
+3/10/97 : Fixed bug with ignored arguments and C++ member functions in
+ the Python module.
+
+3/9/97 : Parsing bugs with nested class definitions and privately
+ declared nested class definitions fixed.
+
+3/9/97 : Fixed a few minor code generation bugs with C++ classes and
+ constructors. In some cases, the resulting wrapper code
+ would not compile properly. SWIG now attempts to use
+ the default copy constructor instead.
+
+3/8/97 : Added a -l option to SWIG that allows additional SWIG library files
+ to be grabbed without having them specified in the interface file.
+ This makes it easier to keep the interface file clean and move certain
+ options into a Makefile. For example :
+
+ swig -tcl example.i # Build a normal Tcl extension
+ swig -tcl -lwish.i example.i # Build it as a wish extension
+ # by including the 'wish.i' file.
+
+ swig -python example.i # Build a dynamically loaded extension
+ swig -python -lembed.i example.i # Build a static extension
+
+ These kinds of options could previously be accomplished with
+ conditional compilation such as :
+
+ %module example
+ ...
+ #ifdef STATIC
+ %include embed.i
+ #endif
+
+3/8/97 : Incorporated changes to Guile module to use the new gh interface
+ in FSF Guile 1.0. The older gscm interface used in Cygnus
+ Guile releases is no longer supported by SWIG.
+
+3/8/97 : Cleaned up the Tcl Netscape plugin example. It should work with
+ version 1.1 of the plugin now.
+
+3/8/97 : Added better array support to the typemap module. The keyword
+ ANY can now be used to match any array dimension. For example :
+
+ %typemap(tcl,in) double [ANY] {
+ ... get an array ...
+ }
+
+ This will match any single-dimensional double array. The array
+ dimension is passed in the variables $dim0, $dim1, ... $dim9. For
+ example :
+
+ %typemap(tcl,in) double [ANY][ANY][ANY] {
+ printf("Received a double[%d][%d][%d]\n",$dim0,$dim1,$dim2);
+ }
+
+ Any typemap involving a specific array dimension will override any
+ specified with the ANY tag. Thus, a %typemap(tcl,in) double [5][4][ANY] {}
+ would override a double [ANY][ANY][ANY]. However, overuse of the ANY
+ tag in arrays of high-dimensions may not work as you expect due to
+ the pattern matching rule used. For example, which of the following
+ typemaps has precedence?
+
+ %typemap(in) double [ANY][5] {} // Avoid this!
+ %typemap(in) double [5][ANY] {}
+
+3/7/97 : Fixed a number of bugs related to multi-dimensional array handling.
+ Typedefs involving multi-dimensional arrays now works correctly.
+ For example :
+
+ typedef double MATRIX[4][4];
+
+ ...
+ extern double foo(MATRIX a);
+
+ Typecasting of pointers into multi-dimensional arrays is now
+ implemented properly when making C/C++ function calls.
+
+3/6/97 : Fixed potentially dangerous bug in the Tcl Object-oriented
+ interface. Well, actually, didn't fix it but issued a
+ Tcl error instead. The bug would manifest itself as follows:
+
+ % set l [List] # Create an object
+ ...
+ % set m [List -this $l] # Make $m into an object assuming $l
+ # contains a pointer.
+ # Since $m == $l, $l gets destroyed
+ # (since its the same command name)
+ % $m insert Foo
+ Segmentation fault # Note : the list no longer exists!
+
+ Now, an error will be generated instead of redefining the command.
+ As in :
+
+ % set l [List]
+ ...
+ % set m [List -this $l]
+ Object name already exists!
+
+ Use catch{} to ignore the error.
+
+3/3/97 : Better support for enums added. Datatypes of 'enum MyEnum'
+ and typedefs such as 'typedef enum MyEnum Foo;' now work.
+
+3/3/97 : Parser modified to ignore constructor initializers such as :
+
+ class Foo : public Bar {
+ int a,b;
+ public:
+ Foo(int i) : a(0), b(i), Bar(i,0) { };
+ };
+
+3/3/97 : Modified parser to ignore C++ exception specifications such as :
+
+ int foo(double) throw(X,Y);
+
+3/3/97 : Added %import directive. This works exactly like %extern
+ except it tells the language module that the declarations are
+ coming from a separate module. This is usually only
+ needed when working with shadow classes.
+
+3/2/97 : Changed pointer type-checker to be significantly more
+ efficient when working with derived datatypes. This
+ has been accomplished by storing type-mappings in sorted
+ order, using binary search schemes, and caching recently
+ used datatypes. For SWIG generated C++ modules that
+ make a large number of C function calls with derived types,
+ this could result in speedups of between 100 and 50000 percent.
+ However, due to the required sorting operation, module
+ loading time may increased slightly when there are lots of
+ datatypes.
+
+3/2/97 : Fixed some C++ compilation problems with Python
+ embed.i library files.
+
+2/27/97 : Slight change to C++ code generation to use copy constructors
+ when returning complex data type by value.
+
+2/26/97 : Fixed bug in Python module with -c option.
+
+2/26/97 : Slight tweak of parser to allow trailing comma in enumerations
+ such as
+
+ enum Value (ALE, STOUT, LAGER, };
+
+2/25/97 : Fixed code generation bug in Tcl module when using the
+ %name() directive on a classname.
+
+2/25/97 : Finished code-size optimization of C++ code generation with
+ inheritance of attributes. Inherited attributes now
+ only generate one set of wrapper functions that are re-used
+ in any derived classes. This could provide big code
+ size improvements in some scripting language interfaces.
+
+2/25/97 : Perl5 module modified to support both the Unix and Windows
+ versions. The windows version has been tested with the
+ Activeware port of Perl 5.003 running under Windows 95.
+ The C source generated by SWIG should compile without
+ modification under both versions of Perl, but is now
+ even more hideous than before.
+
+2/25/97 : Modified parser to allow scope resolution operation to
+ appear in expressions and default arguments as in :
+
+ void foo(int a = Bar::defvalue);
+
+2/25/97 : Fixed bug when resolving symbols inside C++ classes.
+ For example :
+
+ class Foo {
+ public:
+ enum Value {ALE, STOUT, LAGER};
+ ...
+ void defarg(Value v = STOUT);
+
+ };
+
+2/24/97 : Fixed bug with member functions returning void *.
+
+2/23/97 : Modified Python module to be better behaved under Windows
+
+ - Module initialization function is now properly exported.
+ It should not be neccessary to explicitly export this function
+ yourself.
+
+ - Bizarre compilation problems when compiling the SWIG wrapper
+ code as ANSI C under Visual C++ 4.x fixed.
+
+ - Tested with both the stock Python-1.4 distribution and Pythonwin
+ running under Win95.
+
+2/19/97 : Fixed typedef handling bug in Perl5 shadow classes.
+
+2/19/97 : Added exception support. To use it, do the following :
+
+ %except(lang) {
+ ... try part of the exception ...
+ $function
+ ... catch part of exception ...
+ }
+
+ $function is a SWIG variable that will be replaced by the
+ actual C/C++ function call in a wrapper function. Thus,
+ a real exception specification might look like this :
+
+ %except(perl5) {
+ try {
+ $function
+ } catch (char *& sz) {
+ ... process an exception ...
+ } catch(...) {
+ croak("Unknown exception. Bailing out...");
+ }
+ }
+
+2/19/97 : Added support for managing generic code fragments (needed
+ for exceptions).
+
+2/19/97 : Fixed some really obscure typemap scoping bugs in the C++
+ handler.
+
+2/18/97 : Cleaned up perlmain.i file by removing some problematic,
+ but seemingly unnecessary declarations.
+
+2/18/97 : Optimized handling of member functions under inheritance.
+ SWIG can now use wrapper functions generated for a
+ base class instead of regenerating wrappers for
+ the same functions in a derived class. This could
+ make a drastic reduction in wrapper code size for C++
+ applications with deep inheritance hierarchies and
+ lots of functions.
+
+2/18/97 : Additional methods specified with %addmethods can now
+ be inherited along with normal C++ member functions.
+
+2/18/97 : Minor internal fixes to make SWIG's string handling a little
+ safer.
+
+2/16/97 : Moved some code generation of Tcl shadow classes to
+ library files.
+
+2/16/97 : Fixed documentation error of '-configure' method in
+ Tcl modules.
+
+2/16/97 : Modified Perl5 module slightly to allow typemaps
+ to use Perl references.
+
+2/12/97 : Fixed argument checking bug that was introduced by
+ default arguments (function calls with too many
+ arguments would still be executed). Functions now
+ must have the same number of arguments as C version
+ (with possibility of default/optional arguments
+ still supported).
+
+2/12/97 : Fixed default argument bug in Perl5 module when
+ generating wrapper functions involving default
+ arguments of complex datatypes.
+
+2/12/97 : Fixed typemap scoping problems. For example :
+
+ %typemap(tcl,in) double {
+ .. get a double ..
+ }
+
+ class Foo {
+ public:
+ double bar(double);
+ }
+
+ %typemap(tcl,in) double {
+ .. new get double ..
+ }
+
+ Would apply the second typemap to all functions in Foo
+ due to delayed generation of C++ wrapper code (clearly this
+ is not the desired effect). Problem has been fixed by
+ assigning unique numerical identifiers to every datatype in
+ an interface file and recording the "range of effect" of each
+ typemap.
+
+2/11/97 : Added support for "ignore" and "default" typemaps. Only use
+ if you absolutely know what you're doing.
+
+2/9/97 : Added automatic creation of constructors and destructors for
+ C structs and C++ classes that do not specify any sort of
+ constructor or destructor. This feature can be enabled by
+ running SWIG with the '-make_default' option or by inserting
+ the following pragma into an interface file :
+
+ %pragma make_default
+
+ The following pragma disables automatic constructor generation
+
+ %pragma no_default
+
+2/9/97 : Added -make_default option for producing default constructors
+ and destructors for classes without them.
+
+2/9/97 : Changed the syntax of the SWIG %pragma directive to
+ %pragma option=value or %pragma(lang) option=value.
+ This change makes the syntax a little more consistent
+ between general pragmas and language-specific pragmas.
+ The old syntax still works, but will probably be phased
+ out (a warning message is currently printed).
+
+2/9/97 : Improved Tcl support of global variables that are of
+ structures, classes, and unions.
+
+2/9/97 : Fixed C++ compilation problem in Python 'embed.i' library file.
+
+2/9/97 : Fixed missing return value in perlmain.i library file.
+
+2/9/97 : Fixed Python shadow classes to return an AttributeError when
+ undefined attributes are accessed (older versions returned
+ a NameError).
+
+2/9/97 : Fixed bug when %addmethods is used after a class definition whose
+ last section is protected or private.
+
+2/8/97 : Made slight changes in include file processing to support
+ the Macintosh.
+
+2/8/97 : Extended swigmain.cxx to provide a rudimentary Macintosh interface.
+ It's a really bad interface, but works until something better
+ is written.
+
+1/29/97 : Fixed type-casting bug introduced by 1.1b4 when setting/getting the
+ value of global variables involving complex data types.
+
+1/29/97 : Removed erroneous white space before an #endif in the code generated
+ by the Python module (was causing errors on DEC Alpha compilers).
+
+1/26/97 : Fixed errors when using default/optional arguments in Python shadow
+ shadow classes.
+
+1/23/97 : Fixed bug with nested %extern declarations.
+
+1/21/97 : Fixed problem with typedef involving const datatypes.
+
+1/21/97 : Somewhat obscure, but serious bug with having multiple levels
+ of typedefs fixed. For example :
+
+ typedef char *String;
+ typedef String Name;
+
+Version 1.1 Beta4 (January 16, 1997)
+====================================
+
+Note : SWIG 1.1b3 crashed and burned shortly after take off due
+to a few major run-time problems that surfaced after release.
+This release should fix most, if not all, of those problems.
+
+1/16/97 : Fixed major memory management bug on Linux
+
+1/14/97 : Fixed bug in functions returning constant C++ references.
+
+1/14/97 : Modified C++ module to handle datatypes better.
+
+1/14/97 : Modified parser to allow a *single* scope resolution
+ operator in datatypes. Ie : Foo::bar. SWIG doesn't
+ yet handle nested classes, so this should be
+ sufficient for now.
+
+1/14/97 : Modified parser to allow typedef inside a C++ class.
+
+1/14/97 : Fixed some problems related to datatypes defined inside
+ a C++ class. SWIG was not generating correct code,
+ but a new scoping mechanism and method for handling
+ datatypes inside a C++ class have been added.
+
+1/14/97 : Changed enumerations to use the value name instead
+ of any values that might have appeared in the interface
+ file. This makes the code a little more friendly to
+ C++ compilers.
+
+1/14/97 : Removed typedef bug that made all enumerations
+ equivalent to each other in the type checker (since
+ it generated alot of unnecessary code).
+
+Version 1.1 Beta3 (January 9, 1997)
+===================================
+
+Note : A *huge* number of changes related to ongoing modifications.
+
+1. Support for C++ multiple inheritance added.
+
+2. Typemaps added.
+
+3. Some support for nested structure definitions added.
+
+4. Default argument handling added.
+
+5. -c option added for building bare wrapper code modules.
+
+6. Rewrote Pointer type-checking to support multiple inheritance
+ correctly.
+
+7. Tcl 8.0 module added.
+
+8. Perl4 and Guile modules resurrected from the dead (well, they
+ at least work again).
+
+9. New Object Oriented Tcl interface added.
+
+10. Bug fixes to Perl5 shadow classes.
+
+11. Cleaned up many of the internal modules of the parser.
+
+12. Tons of examples and testing modules added.
+
+13. Fixed bugs related to use of "const" return values.
+
+14. Fixed bug with C++ member functions returning void *.
+
+15. Changed SWIG configuration script.
+
+Version 1.1 Beta2 (December 3, 1996)
+====================================
+
+1. Completely rewrote the SWIG documentation system. The changes
+ involved are too numerous to mention. Basically, take everything
+ you knew about the old system, throw them out, and read the
+ file Doc/doc.ps.
+
+2. Limited support for #if defined() added.
+
+3. Type casts are now allowed in constant expressions. ie
+
+ #define A (int) 3
+
+4. Added support for typedef lists. For example :
+
+ typedef struct {
+ double x,y,z;
+ } Vector, *VectorPtr;
+
+5. New SWIG directives (related to documentation system)
+
+ %style
+ %localstyle
+ %subsection
+ %subsubsection
+
+6. Reorganized the C++ handling and made it a little easier to
+ work with internally.
+
+7. Fixed problem with inheriting data members in Python
+ shadow classes.
+
+8. Fixed symbol table problems with shadow classes in both
+ Python and Perl.
+
+9. Fixed annoying segmentation fault bug in wrapper code
+ generated for Perl5.
+
+10. Fixed bug with %addmethods directive. Now it can be placed
+ anywhere in a class.
+
+11. More test cases added to the SWIG self-test. Documentation
+ tests are now performed along with other things.
+
+12. Reorganized the SWIG library a little bit and set it up to
+ self-document itself using SWIG.
+
+13. Lots and lots of minor bug fixes (mostly obscure, but bugs
+ nonetheless).
+
+
+Version 1.1 Beta1 (October 30, 1996)
+====================================
+
+1. Added new %extern directive for handling multiple files
+
+2. Perl5 shadow classes added
+
+3. Rewrote conditional compilation to work better
+
+4. Added 'bool' datatype
+
+5. %{,%} block is now optional.
+
+6. Fixed some bugs in the Python shadow class module
+
+7. Rewrote all of the SWIG tests to be more informative
+ (and less scary).
+
+8. Rewrote parameter list handling to be more memory
+ efficient and flexible.
+
+9. Changed parser to ignore 'static' declarations.
+
+10. Initializers are now ignored. For example :
+
+ struct FooBar a = {3,4,5};
+
+11. Somewhat better parsing of arrays (although it's
+ usually just a better error message now).
+
+12. Lot's of minor bug fixes.
+
+
+Version 1.0 Final (August 31, 1996)
+===================================
+
+1. Fixed minor bug in C++ module
+
+2. Fixed minor bug in pointer type-checker when using
+ -DALLOW_NULL.
+
+3. Fixed configure script to work with Python 1.4beta3
+
+4. Changed configure script to allow compilation without
+ yacc or bison.
+
+Version 1.0 Final (August 28, 1996)
+===================================
+
+1. Changed parser to support more C/C++ datatypes (well,
+ more variants). Types like "unsigned", "short int",
+ "long int", etc... now work.
+
+2. "unions" added to parser.
+
+3. Use of "typedef" as in :
+
+ typedef struct {
+ double x,y,z;
+ } Vector;
+
+ Now works correctly. The name of the typedef is used as
+ the structure name.
+
+4. Conditional compilation with #ifdef, #else, #endif, etc...
+ added.
+
+5. New %disabledoc, %enabledoc directives allow documentation
+ to selectively be disabled for certain parts of a wrapper
+ file.
+
+6. New Python module supports better variable linking, constants,
+ and shadow classes.
+
+7. Perl5 module improved with better compatibility with XS
+ and xsubpp. SWIG pointers and now created so that they
+ are compatible with xsubpp pointers.
+
+8. Support for [incr Tcl] namespaces added to Tcl module.
+
+9. %pragma directive added.
+
+10. %addmethods directive added.
+
+11. %native directive added to allow pre-existing wrapper functions
+ to be used.
+
+12. Wrote configure script for SWIG installation.
+
+13. Function pointers now allowed with typedef statements.
+
+14. %typedef modified to insert a corresponding C typedef into
+ the output file.
+
+15. Fixed some problems related to C++ references.
+
+16. New String and WrapperFunction classes add to make generating
+ wrapper code easier.
+
+17. Fixed command line option processing to eliminate core dumps
+ and to allow help messages.
+
+18. Lot's of minor bug fixes to almost all code modules
+
+
+Version 1.0 Beta 3 (Patch 1) July 17, 1996
+==========================================
+
+1.0 Final is not quite ready yet, but this release fixes a
+number of immediate problems :
+
+1. Compiler errors when using -strict 1 type checking have been fixed.
+
+2. Pointer type checker now recognizes pointers of the form
+ _0_Type correctly.
+
+3. A few minor fixes were made in the Makefile
+
+Version 1.0 Beta 3 (June 14, 1996)
+==================================
+
+
+There are lots of changes in this release :
+
+1. SWIG is now invoked using the "swig" command instead of "wrap".
+ Hey, swig sounds cooler.
+
+2. The SWIG_LIB environment variable can be set to change the
+ location where SWIG looks for library files.
+
+3. C++ support has been added. You should use the -c++ option
+ to enable it.
+
+4. The %init directive has been replaced by the %module directive.
+ %module constructs a valid name for the initialization function
+ for whatever target language you're using (actually this makes
+ SWIG files a little cleaner). The old %init directive still works.
+
+5. The syntax of the %name directive has been changed. Use of the
+ old one should generate a warning message, but may still work.
+
+6. To support Tcl/Tk on non-unix platforms, SWIG imports a file called
+ swigtcl.cfg from the $(SWIG_LIB)/tcl directory. I don't have access
+ to an NT machine, but this file is supposedly allows SWIG to
+ produce wrapper code that compiles on both UNIX and non UNIX machines.
+ If this doesn't work, you'll have to edit the file swigtcl.cfg. Please
+ let me know if this doesn't work so I can update the file as
+ necessary.
+
+7. The SWIG run-time typechecker has been improved. You can also
+ now redefine how it works by supplying a file called "swigptr.cfg"
+ in the same directory as your SWIG interface files. By default,
+ SWIG reads this file from $(SWIG_LIB)/config.
+
+8. The documentation system has been changed to support the following :
+
+ - Documentation order is printed in interface file order by
+ default. This can be overridden by putting an %alpha
+ directive in the beginning of the interface file.
+
+ - You can supply additional documentation text using
+
+ %text %{ put your text here %}
+
+ - A few minor bugs were fixed.
+
+9. A few improvements have been made to the handling of command line
+ options (but it's still not finished).
+
+10. Lots of minor bug fixes in most of the language modules have been
+ made.
+
+11. Filenames have been changed to 8.3 for compatibility with a SWIG
+ port to non-unix platforms (work in progress).
+
+12. C++ file suffix is now .cxx (for same reason).
+
+13. The documentation has been upgraded significantly and is now
+ around 100 pages. I added new examples and a section on
+ C++. The documentation now includes a Table of Contents.
+
+14. The SWIG Examples directory is still woefully sparse, but is
+ getting better.
+
+Special notice about C++
+------------------------
+This is the first version of SWIG to support C++ parsing. Currently
+the C++ is far from complete, but seems to work for simple cases.
+No work has been done to add special C++ processing to any of
+the target languages. See the user manual for details about how
+C++ is handled. If you find problems with the C++ implementation,
+please let me know. Expect major improvements in this area.
+
+Note : I have only successfully used SWIG and C++ with Tcl and
+Python.
+
+Notice about Version 1.0Final
+-----------------------------
+
+Version 1.0B3 is the last Beta release before version 1.0 Final is
+released. I have frozen the list of features supported in version 1.0
+and will only fix bugs as they show up. Work on SWIG version 2.0 is
+already in progress, but is going to result in rather significant
+changes to SWIG's internal structure (hopefully for the better). No
+anticipated date for version 2.0 is set, but if you've got an idea,
+let me know.
+
+Version 1.0 Beta 2 (April 26, 1996)
+===================================
+
+This release is identical to Beta1 except a few minor bugs are
+fixed and the SWIG library has been updated to work with Tcl 7.5/Tk 4.1.
+A tcl7.5 examples directory is now included.
+
+- Fixed a bug in the Makefile that didn't install the libraries
+ correctly.
+
+- SWIG Library files are now updated to work with Tcl 7.5 and Tk 4.1.
+
+- Minor bug fixes in other modules.
+
+
+Version 1.0 Beta 1 (April 10, 1996).
+=====================================
+
+This is the first "semi-official" release of SWIG. It has a
+number of substantial improvements over the Alpha release. These
+notes are in no particular order--hope I remembered everything....
+
+1. Tcl/Tk
+
+SWIG is known to work with Tcl7.3, Tk3.6 and later versions.
+I've also tested SWIG with expect-5.19.
+
+Normally SWIG expects to use the header files "tcl.h" and "tk.h".
+Newer versions of Tcl/Tk use version numbers. You can specify these
+in SWIG as follows :
+
+ % wrap -htcl tcl7.4.h -htk tk4.0.h example.i
+
+Of course, I prefer to simply set up symbolic links between "tcl.h" and
+the most recent stable version on the machine.
+
+2. Perl4
+
+This implementation has been based on Perl-4.035. SWIG's interface to
+Perl4 is based on the documentation provided in the "Programming Perl"
+book by Larry Wall, and files located in the "usub" directory of the
+Perl4 distribution.
+
+In order to compile with Perl4, you'll need to link with the uperl.o
+file found in the Perl4 source directory. You may want to move this
+file to a more convenient location.
+
+3. Perl5
+
+This is a somewhat experimental implementation, but is alot less
+buggy than the alpha release. SWIG operates independently of
+the XS language and xsubpp supplied with Perl5. Currently SWIG
+produces the necessary C code and .pm file needed to dynamically
+load a module into Perl5.
+
+To support Perl5's notion of modules and packages (as with xsubpp),
+you can use the following command line options :
+
+ % wrap -perl5 -module MyModule -package MyPackage example.i
+
+Note : In order for dynamic loading to be effective, you need to be
+careful about naming. For a module named "MyModule", you'll need to
+create a shared object file called "MyModule.so" using something like
+
+ % ld -shared my_obj.o -o MyModule.so
+
+The use of the %init directive must match the module name since Perl5
+calls a function "boot_ModuleName" in order to initialize things.
+See the Examples directory for some examples of how to get things
+to work.
+
+4. Python1.3
+
+This is the first release supporting Python. The Python port is
+experimental and may be rewritten. Variable linkage is done through
+functions which is sort of a kludge. I also think it would be nice
+to import SWIG pointers into Python as a new object (instead of strings).
+Of course, this needs a little more work.
+
+5. Guile3
+
+If you really want to live on the edge, pick up a copy of Guile-iii and
+play around with this. This is highly experimental---especially since
+I'm not sure what the official state of Guile is these days. This
+implementation may change at any time should I suddenly figure out better
+ways to do things.
+
+6. Extending SWIG
+
+SWIG is written in C++ although I tend to think of the code as mostly
+being ANSI C with a little inheritance thrown in. Each target language
+is implemented as a C++ class that can be plugged into the system.
+If you want to add your own modifications, see Appendix C of the user
+manual. Then take a look at the "user" directory which contains some
+code for building your own extenions.
+
+7. The SWIG library
+
+The SWIG library is still incomplete. Some of the files mentioned in
+the user manual are unavailable. These files will be made available
+when they are ready. Subscribe to the SWIG mailing list for announcements
+and updates.
+
+8. SWIG Documentation
+
+I have sometimes experienced problems viewing the SWIG documentation in
+some postscript viewers. However, the documentation seems to print
+normally. I'm working on making much of the documentation online,
+but this takes time.
+
+Version 0.1 Alpha (February 9, 1996)
+====================================
+
+1. Run-time type-checking of SWIG pointers. Pointers are now represented
+ as strings with both numeric and encoded type information. This makes
+ it a little harder to shoot yourself in the foot (and it eliminates
+ some segmentation faults and other oddities).
+
+2. Python 1.3 now supported.
+
+3. #define and enum can be used to install constants.
+
+4. Completely rewrote the %include directive and made it alot more powerful.
+
+5. Restructured the SWIG library to make it work better.
+
+6. Various bug fixes to Tcl, Perl4, Perl5, and Guile implementations.
+
+7. Better implementation of %typedef directive.
+
+8. Made some changes to SWIG's class structure to make it easier to expand.
+ SWIG is now built into a library file that you can use to make your
+ own extenions.
+
+9. Made extensive changes to the documentation.
+
+10. Minor changes to the SWIG parser to make it use less memory.
+ Also took out some extraneous rules that were undocumented and
+ didn't work in the first place.
+
+11. The SWIG library files "tclsh", "wish", "expect", etc... in the first
+ release have been restructured and renamed to "tclsh.i", "wish.i",
+ and so on.