Fix typos and some explanations.

#error behaviour is back like it was in 1.3.27, so removed entry that turned default #error behaviour into #warning.


git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@8567 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
William S Fulton 2006-01-26 21:35:16 +00:00
commit 0f4408b17f

View file

@ -2,6 +2,7 @@ Version 1.3.28 (unreleased).
=========================== ===========================
01/24/2006: mgossage 01/24/2006: mgossage
[Lua]
- Removed the type swig_lua_command_info & replace with luaL_reg - Removed the type swig_lua_command_info & replace with luaL_reg
(which then broke the code), fixed this (which then broke the code), fixed this
- added an additional cast in the typemaps for enum's - added an additional cast in the typemaps for enum's
@ -91,12 +92,14 @@ Version 1.3.28 (unreleased).
to avoid clashings with other swig macros/directives. to avoid clashings with other swig macros/directives.
01/14/2006: cfisavage 01/14/2006: cfisavage
[Ruby]
Added support for Ruby bang! methods via a new %bang feature. Added support for Ruby bang! methods via a new %bang feature.
Bang methods end in exclamation points and indicate that the Bang methods end in exclamation points and indicate that the
object being processed will be modified in-place as object being processed will be modified in-place as
opposed to being copied. opposed to being copied.
01/12/2006: cfisavage 01/12/2006: cfisavage
[Ruby]
Updated the Ruby module to automatically convert Updated the Ruby module to automatically convert
method names to lower_case_with_underscores using the method names to lower_case_with_underscores using the
new %rename functionality. new %rename functionality.
@ -193,9 +196,9 @@ Version 1.3.28 (unreleased).
also updated the %init block bug #1356586 also updated the %init block bug #1356586
01/10/2006: mmatus 01/10/2006: mmatus
- Ass the 'utitle' encoder, as an example of how to add - Add the 'utitle' encoder, as an example of how to add
your own encoder. I added the encoder method in misc.c your own encoder. I added the encoder method in misc.c
but you can add another one, the same way, inside any but developers can add others, the same way, inside any
target language. target language.
Well, 'utitle' is the reverse of 'ctitle', ie: Well, 'utitle' is the reverse of 'ctitle', ie:
@ -205,12 +208,13 @@ Version 1.3.28 (unreleased).
01/10/2006: cfisavage 01/10/2006: cfisavage
Updated Ruby Exception handling. Classes that are specified in throws clauses, [Ruby]
or are marked as %exceptionclass, are now inherited from rb_eRuntimeError. Updated Ruby Exception handling. Classes that are specified in throws clauses,
This allows instances of these classes to be returned to Ruby as exceptions. or are marked as %exceptionclass, are now inherited from rb_eRuntimeError.
Thus if a C++ method throws an instance of MyException, the calling Ruby This allows instances of these classes to be returned to Ruby as exceptions.
method will get back a MyException object. To see an example, Thus if a C++ method throws an instance of MyException, the calling Ruby
ook at ruby/examples/exception_class. method will get back a MyException object. To see an example,
look at ruby/examples/exception_class.
01/10/2006: mmatus 01/10/2006: mmatus
@ -233,8 +237,8 @@ Version 1.3.28 (unreleased).
return 0; return 0;
} }
ie, where there is no explicit throw list in the decl, you ie, where there is no explicit exception specification in the decl, you
end doing: end up doing:
%exception barfoo { %exception barfoo {
try { try {
@ -244,9 +248,9 @@ Version 1.3.28 (unreleased).
} }
which is very tedious. Well, the %catches directive defines which is very tedious. Well, the %catches directive defines
the list of exception to catch, and from swig: the list of exceptions to catch, and from swig:
%catch(E1,E2) barfoo(int i); %catches(E1,E2) barfoo(int i);
int barfoo(int i); int barfoo(int i);
is equivalent to is equivalent to
@ -254,7 +258,7 @@ Version 1.3.28 (unreleased).
int barfoo(int i) throw(E1,E2); int barfoo(int i) throw(E1,E2);
Note, however, that the %catches list doesn't have to Note, however, that the %catches list doesn't have to
correspond to the C++ 'throw' list. For example, if you correspond to the C++ exception specification. For example, if you
have: have:
struct E {}; struct E {};
@ -276,8 +280,8 @@ Version 1.3.28 (unreleased).
} }
Of course, you still have to satisfy the C++ restrictions, Of course, you still have to satisfy the C++ restrictions,
and the catchs list must be compatible (not the same) and the catches list must be compatible (not the same)
than the original C++ throw list. as the original list of types in the exception specification.
Also, you can now specify that you want to catch the Also, you can now specify that you want to catch the
unknown exception '...', for example: unknown exception '...', for example:
@ -285,9 +289,10 @@ Version 1.3.28 (unreleased).
%catches(E1,E2,...) barfoo(int); %catches(E1,E2,...) barfoo(int);
In any case, the %catches directive will emit the In any case, the %catches directive will emit the
'rethrowing' code using the 'throw' typemap. code to convert into the target language error/exception
using the 'throws' typemap.
For the same, for the '...' case to work, you need to For the '...' case to work, you need to
write the proper typemap in your target language. In the write the proper typemap in your target language. In the
UTL, this looks like: UTL, this looks like:
@ -301,7 +306,7 @@ Version 1.3.28 (unreleased).
- Bug #1398394 with patch from Dries Decock - Bug #1398394 with patch from Dries Decock
01/06/2006: mmatus 01/06/2006: mmatus
Add 'named' warning codes, now besides of: Add 'named' warning codes, now in addition to:
%warnfilter(813); %warnfilter(813);
@ -312,19 +317,16 @@ Version 1.3.28 (unreleased).
just use the same code name found in Source/Include/swigwarn.h just use the same code name found in Source/Include/swigwarn.h
plus the 'SWIG' prefix. plus the 'SWIG' prefix.
If you add a new warning code, remember to run: If a developer adds a new warning code, the Lib/swigwarn.swg file
will be generated when running the top level make.
make Lib/swigwarn.swg
in the swig root directory and commit both files. You need
a machine with awk/echo to do that.
01/05/2006: cfisavage 01/05/2006: cfisavage
Reimplemented object tracking for Ruby. The new implementation works [Ruby]
by expanding the swig_class structure for Ruby by adding a trackObjects Reimplemented object tracking for Ruby. The new implementation works
field. This field can be set/unset via %trackobjects as explained by expanding the swig_class structure for Ruby by adding a trackObjects
in the Ruby documentation. The new implementation is more robust field. This field can be set/unset via %trackobjects as explained
and takes less code to implement. in the Ruby documentation. The new implementation is more robust
and takes less code to implement.
01/05/2006: wsfulton 01/05/2006: wsfulton
Fix for %extend and static const integral types, eg: Fix for %extend and static const integral types, eg:
@ -362,7 +364,7 @@ Version 1.3.28 (unreleased).
and then swig -version will report 1.3.22 instead of the and then swig -version will report 1.3.22 instead of the
current version. current version.
Tipical use could be Typical use would be
SWIG_FEATURES="-fakeversion 1.3.22" ./configure SWIG_FEATURES="-fakeversion 1.3.22" ./configure
@ -378,7 +380,7 @@ Version 1.3.28 (unreleased).
%rename("swig_%s") import; %rename("swig_%s") import;
Now, since the format is processed via swig Printf, you Now, since the format is processed via swig Printf, you
can use encoder as follows: can use encoders as follows:
%rename("%(title)s") import; -> Import %rename("%(title)s") import; -> Import
%rename("%(upper)s") import; -> IMPORT %rename("%(upper)s") import; -> IMPORT
@ -474,7 +476,7 @@ Version 1.3.28 (unreleased).
int hello() -> hello int hello() -> hello
Note that if the 'command' encoder returns an empty string, swig Note that if the 'command' encoder returns an empty string, swig
understand that no rename is necessary. understands that no rename is necessary.
Also note that %rename 'passes' the matched name. For example, in Also note that %rename 'passes' the matched name. For example, in
this case this case
@ -546,7 +548,7 @@ Version 1.3.28 (unreleased).
Lib/gcj Lib/gcj
and localize especific issues as jstring, as can be found and localize specific types such as jstring, as can be found
in in
Lib/python/jstring.i Lib/python/jstring.i
@ -572,12 +574,12 @@ Version 1.3.28 (unreleased).
a1 = A(); a1 = A();
a2 = A(a1); a2 = A(a1);
Also, since is a feature, if you type just Also, since it is a feature, if you just type
%copyctor; %copyctor;
that will enable the automatic generation for all the that will enable the automatic generation for all the
classes. That is also equivalent to classes. It is also equivalent to
swig -copyctor -c++ ... swig -copyctor -c++ ...
@ -590,17 +592,17 @@ Version 1.3.28 (unreleased).
language doesn't support overloading, a special name language doesn't support overloading, a special name
will be used (A_copy). will be used (A_copy).
3.- For the same above, probably is not a good idea to 3.- For the overloading reasons above, it is probably not
use the flag when, for example, in python if you are a good idea to use the flag when, for example, you are
using keywords. using keywords in Python.
4.- The copyctor automatic mechanism follows more or less 4.- The copyctor automatic mechanism follows more or less
the same rules than the default constructor mechanism, the same rules as the default constructor mechanism,
i.e., a copy constructor will not be added if the i.e., a copy constructor will not be added if the
class is abstract or if there is a pertinent non-public class is abstract or if there is a pertinent non-public
copy ctor in the class or its hierarchy. copy ctor in the class or its hierarchy.
Hence, it could be necessary for you to complete the Hence, it might be necessary for you to complete the
class declaration with the proper non-public copy ctor class declaration with the proper non-public copy ctor
to avoid a wrong constructor addition. to avoid a wrong constructor addition.
@ -609,7 +611,7 @@ Version 1.3.28 (unreleased).
12/27/2005: mmatus 12/27/2005: mmatus
- Add the 'math' option to typemaps. Assume you have: - Add the 'match' option to typemaps. Assume you have:
%typemap(in) SWIGTYPE * (int res) {..} %typemap(in) SWIGTYPE * (int res) {..}
%typemap(freearg) SWIGTYPE * { if (res$argnum) ...} %typemap(freearg) SWIGTYPE * { if (res$argnum) ...}
@ -619,7 +621,7 @@ Version 1.3.28 (unreleased).
%typemap(in) A * {...} %typemap(in) A * {...}
swig will 'overload the 'in' typemap, but the 'freearg' swig will 'overload the 'in' typemap, but the 'freearg'
typemap will be also applied, even when is wrong. The old typemap will be also applied, even when this is wrong. The old
solutions is to write: solutions is to write:
%typemap(in) A * {...} %typemap(in) A * {...}
@ -629,20 +631,19 @@ Version 1.3.28 (unreleased).
The problem is, however, there is no way to know you need The problem is, however, there is no way to know you need
to do that until you start getting broken C++ code, or to do that until you start getting broken C++ code, or
worse, broken runtime code. worse, broken runtime code.
The same applies to the infamous 'typecheck' typemap, The same applies to the infamous 'typecheck' typemap,
which always confuses people, since the first thing you do which always confuses people, since the first thing you do
is just to write the 'in' typemap. is to just write the 'in' typemap.
Well, the 'match' option solves the problem, and if you The 'match' option solves the problem, and if instead you write:
write instead
%typemap(in) SWIGTYPE * (int res) {..} %typemap(in) SWIGTYPE * (int res) {..}
%typemap(freearg,match="in") SWIGTYPE * { if (res$argnum) ...} %typemap(freearg,match="in") SWIGTYPE * { if (res$argnum) ...}
%typemap(typecheck,match="in",precedence...) SWIGTYPE * {...} %typemap(typecheck,match="in",precedence...) SWIGTYPE * {...}
that will tell swig to apply the 'freearg/typecheck' it will tell swig to apply the 'freearg/typecheck'
typemaps only if they 'match' the type of the 'in' typemaps only if they 'match' the type of the 'in'
typemap. The same can be done with other typemaps as: typemap. The same can be done with other typemaps as:
@ -655,7 +656,7 @@ Version 1.3.28 (unreleased).
variables in a more natural way, ie, similar to the global variables in a more natural way, ie, similar to the global
variable behavior. variable behavior.
You cam use it in a global way via the command line You can use it in a global way via the command line
swig -naturalvar ... swig -naturalvar ...
@ -663,7 +664,7 @@ Version 1.3.28 (unreleased).
%module(naturalvar=1) %module(naturalvar=1)
both forms make swig to treat all the member variables in the both forms make swig treat all the member variables in the
same way it treats global variables. same way it treats global variables.
Also, you can use it in a case by case approach for Also, you can use it in a case by case approach for
@ -689,9 +690,9 @@ Version 1.3.28 (unreleased).
This is valid for all the languages, and the This is valid for all the languages, and the
implementation is based simply in forcing to use the implementation is based on forcing the use of the
typemaps const SWIGTYPE& (C++)/SWIGTYPE (C) for the const SWIGTYPE& (C++)/SWIGTYPE (C) typemaps for the
get/set methods instead of the old SWIGTYPE *. get/set methods instead of the SWIGTYPE * typemaps.
Hence, for 'naturalvar' to work, each target language Hence, for 'naturalvar' to work, each target language
must implement 'typemap(in/out) const Type&' properly. must implement 'typemap(in/out) const Type&' properly.
@ -701,12 +702,12 @@ Version 1.3.28 (unreleased).
unnecessary. unnecessary.
Note1: If your interface has other kind of workarounds to Note1: If your interface has other kinds of workarounds to
deal with the old 'unnatural' way to deal with member deal with the old 'unnatural' way to deal with member
variables (returning/expexting pointers), the variables (returning/expecting pointers), the
'narturalvar' option could break them. 'naturalvar' option could break them.
Note2: the option has no effect over unnamed types, such Note2: the option has no effect on unnamed types, such
as unnamed nested unions. as unnamed nested unions.
@ -714,7 +715,7 @@ Version 1.3.28 (unreleased).
- Add more 'expressive' result states for the typemap - Add more 'expressive' result states for the typemap
libraries. libraries.
In the old times, you just check something like: In the past, for scripting languages, you would do checking something like:
if (ConvertPtr(obj,&vptr,ty,flags) != -1) { if (ConvertPtr(obj,&vptr,ty,flags) != -1) {
// success // success
@ -725,7 +726,7 @@ Version 1.3.28 (unreleased).
Now the result state can carry more information, Now the result state can carry more information,
including: including:
- Error state: as the old -1/0, but with error codes from swigerrors.swg. - Error state: like the old -1/0, but with error codes from swigerrors.swg.
int res = ConvertPtr(obj,&vptr,ty,flags); int res = ConvertPtr(obj,&vptr,ty,flags);
if (SWIG_IsOK(res)) { if (SWIG_IsOK(res)) {
@ -760,8 +761,9 @@ Version 1.3.28 (unreleased).
'explicit') and overload.cxx (to replace $implicitconv as 'explicit') and overload.cxx (to replace $implicitconv as
needed). needed).
Still, real support in each target language requires to modify Still, real support in each target language requires each
each module language. Python provides an example, see bellow. target language to be modified. Python provides an example,
see below.
- Add support for native C++ implicit conversions, ie, if you - Add support for native C++ implicit conversions, ie, if you
@ -819,8 +821,8 @@ Version 1.3.28 (unreleased).
b.a = 1.0 b.a = 1.0
b.a = "hello" -> error, explicit constructor b.a = "hello" -> error, explicit constructor
Note that the last case, assigning directly a member var, Note that the last case, assigning a member var directly,
requires also the 'naturalvar' option. also requires the 'naturalvar' option.
This support now makes the old '%implicit' macro, which This support now makes the old '%implicit' macro, which
was found in 'implicit.i' and it was fragile in many ways, was found in 'implicit.i' and it was fragile in many ways,
@ -833,7 +835,7 @@ Version 1.3.28 (unreleased).
int get(A a) {return a.ii;} int get(A a) {return a.ii;}
int get(const A& a) {return a.ii;} int get(const A& a) {return a.ii;}
but not in this cases: but not in these cases:
int get(A *a) {return a->ii;} int get(A *a) {return a->ii;}
int get(A& a) {return a.ii;} int get(A& a) {return a.ii;}
@ -846,7 +848,7 @@ Version 1.3.28 (unreleased).
def get_a(self): def get_a(self):
return 1 return 1
but not in this cases: but not in this case:
virtual const A& get_a() = 0; virtual const A& get_a() = 0;
virtual A& get_a() = 0; virtual A& get_a() = 0;
@ -866,15 +868,14 @@ Version 1.3.28 (unreleased).
then 'my code' will also be executed. then 'my code' will also be executed.
- Since the %implicitconv directive is based in SWIG - Since the %implicitconv directive is a SWIG feature, if you type:
features, if you type:
%implicitconv; %implicitconv;
that will enable implicit conversion for all the classes in that will enable implicit conversion for all the classes in
your module. your module.
But if you are worry about performance, maybe that will be But if you are worried about performance, maybe that will be
too much, especially if you have overloaded methods, since too much, especially if you have overloaded methods, since
to resolve the dispatching problem, python will efectively to resolve the dispatching problem, python will efectively
try to call all the implicit constructors as needed. try to call all the implicit constructors as needed.
@ -885,11 +886,11 @@ Version 1.3.28 (unreleased).
- [python] The %implicit directive is declared obsolete, and - [python] The %implicit directive is declared obsolete, and
you should use %implicitconv instead. If you include you should use %implicitconv instead. If you include
the implicit.i file, a warning will remind you this. the implicit.i file, a warning will remind you of this.
Note: Since %implicit is fragile, just replacing it by Note: Since %implicit is fragile, just replacing it by
%implicitconv could lead to different behavior. Hence, we %implicitconv could lead to different behavior. Hence, we
don't automatically switch one by the other, and the user don't automatically switch from to the other, and the user
must migrate to the new %implicitconv directive manually. must migrate to the new %implicitconv directive manually.
@ -918,7 +919,7 @@ Version 1.3.28 (unreleased).
12/23/2005: mmatus 12/23/2005: mmatus
[python] Add the castmode that allows the python [python] Add the castmode that allows the python
type casting to occurr. type casting to occur.
For example, if you have 'int foo(int)', now For example, if you have 'int foo(int)', now
@ -934,7 +935,7 @@ Version 1.3.28 (unreleased).
a = Ai(4) a = Ai(4)
foo(ai) // Ok foo(ai) // Ok
The castmode, which can be enable either with the The castmode, which can be enabled either with the
'-castmode' option or the %module("castmode") option, uses '-castmode' option or the %module("castmode") option, uses
the new cast/rank dispatch mechanism. Hence, now if you the new cast/rank dispatch mechanism. Hence, now if you
have 'int foo(int); int foo(double);', the following works have 'int foo(int); int foo(double);', the following works
@ -951,11 +952,11 @@ Version 1.3.28 (unreleased).
entire test-suite compiles fine with and without the entire test-suite compiles fine with and without the
castmode. castmode.
Note2: the cast mode can't be comnined with the fast Note2: the cast mode can't be combined with the fast
dispatch mode, ie, the -fastdispatch option has no effect dispatch mode, ie, the -fastdispatch option has no effect
when the cast mode is selected. The penalties, however, when the cast mode is selected. The penalties, however,
are minimum since the cast dispatch code is already based are minimum since the cast dispatch code is already based
in the same fast dispatch mechanism. on the same fast dispatch mechanism.
See the file overload_dispatch_cast_runme.py file for See the file overload_dispatch_cast_runme.py file for
new cases and examples. new cases and examples.
@ -1005,8 +1006,8 @@ Version 1.3.28 (unreleased).
foo("l") -> foo(char*) foo("l") -> foo(char*)
Note: In perl the old dispatch mechanism was broken, Note: In perl the old dispatch mechanism was broken,
so, we don't provide and option to enable the old one so, we don't provide an option to enable the old one
since, again, was really really broken. since, again, it was really really broken.
See 'overload_simple_runme.pl' for more cases and tests. See 'overload_simple_runme.pl' for more cases and tests.
@ -1024,14 +1025,14 @@ Version 1.3.28 (unreleased).
mechanism, could see now a difference in perl behavior. mechanism, could see now a difference in perl behavior.
12/21/2005: mmatus 12/21/2005: mmatus
- The '-nodefault' flag (pragma and features) now generates - The '-nodefault' flag (pragma and feature) now generates
a warning, and recommends to use the explicit a warning, and recommends to use the explicit
-nodefaultctor and -nodefaultdtor options. -nodefaultctor and -nodefaultdtor options.
The reason to split the 'nodefault' behavior is that, in The reason to split the 'nodefault' behavior is that, in
general, ignoring the default destructor generates memory general, ignoring the default destructor generates memory
leaks in the target language. Hence, is to risky just to leaks in the target language. Hence, is too risky just to
disable the both the default constructor and destructor disable both the default constructor and destructor
at the same time. at the same time.
If you need to disable the default destructor, it is If you need to disable the default destructor, it is
@ -1084,8 +1085,8 @@ Version 1.3.28 (unreleased).
[Python] [Python]
- Add the -proxydel/-noproxydel options to enable/disable - Add the -proxydel/-noproxydel options to enable/disable
the generation of proxy/shadow __del__ methods, even the generation of proxy/shadow __del__ methods, even
when now are redundant, since they are empty. when now they are redundant, since they are empty.
However, old interfaces could relay in calling them. However, old interfaces could rely on calling them.
The default behavior is to generate the __del__ methods The default behavior is to generate the __del__ methods
as in 1.3.27 or older swig versions. as in 1.3.27 or older swig versions.
@ -1094,7 +1095,7 @@ Version 1.3.28 (unreleased).
12/10/2005: mmatus 12/10/2005: mmatus
[UTF] [UTF]
- Fix inneccessary calls to SWIG_TypeQuery for 'char *' - Fix unneccessary calls to SWIG_TypeQuery for 'char *'
and 'wchar_t *', problem found by Clay Culver while and 'wchar_t *', problem found by Clay Culver while
profiling the PyOgre project. profiling the PyOgre project.
@ -1102,17 +1103,17 @@ Version 1.3.28 (unreleased).
[Python] [Python]
- Add the -dirvtable/-nodirvtable to enable/disable - Add the -dirvtable/-nodirvtable to enable/disable
a pseudo virtual table used for directors, avoiding a pseudo virtual table used for directors, avoiding
to resolv the python method at each call. the need to resolve the python method at each call.
- Add the -safecstrings/-nosafecstrings options to - Add the -safecstrings/-nosafecstrings options to
enable/disable the use of safe conversions from PyString enable/disable the use of safe conversions from PyString
to char *. Python requires you never change the internal to char *. Python requires you to never change the internal
buffer directly, and henve 'safectrings' warranties that buffer directly, and hence 'safectrings' warranties that
but returning a copy of the internal python string buffer. but returning a copy of the internal python string buffer.
The default, as in previous releases, is to return a The default, as in previous releases, is to return a
pointer to the buffer (nosafecstrings), so, is the user pointer to the buffer (nosafecstrings), so, it is the user's
responsability to avoid its modification. responsibility to avoid its modification.
- Add the -O option to enable all the optimization options - Add the -O option to enable all the optimization options
at once, initially equivalent to at once, initially equivalent to
@ -1122,11 +1123,11 @@ Version 1.3.28 (unreleased).
12/08/2005: mmatus 12/08/2005: mmatus
- Add the -fastdispatch option (fastdispatch feature). This - Add the -fastdispatch option (fastdispatch feature). This
enable the "fast dispatch" mechanism for overloaded enables the "fast dispatch" mechanism for overloaded
methods provided by Salvador Fandi~no Garc'ia (#930586). methods provided by Salvador Fandi~no Garc'ia (#930586).
The resulting code is smaller and faster since less type The resulting code is smaller and faster since less type
checking are performed. However, the error messages you checking is performed. However, the error messages you
get when the overloading is not resolved could be get when the overloading is not resolved could be
different from what the traditional method returns. different from what the traditional method returns.
@ -1140,10 +1141,9 @@ Version 1.3.28 (unreleased).
See bug report #930586 for more details. See bug report #930586 for more details.
So, we let to the user the option to enable this So, this optimization must be explicitly enabled by users.
optimization.
You use this new mechanism as The new mechanism can be used as:
swig -fastdispatch swig -fastdispatch
@ -1163,14 +1163,10 @@ Version 1.3.28 (unreleased).
Memory footprint is also reduced in consideration of small Memory footprint is also reduced in consideration of small
pcs/architectures. pcs/architectures.
- add options "cpperraswarn/nocpperraswarn" to force the swig - add commandline options -cpperraswarn and -nocpperraswarn" to force
preprocessor to treat the #error directive as a #warning. the swig preprocessor to treat the #error directive as a #warning.
the default behavior is cpperraswarn, so, swig doesn't
stop while encountering an #error directive.
the pragmas the pragmas
#pragma SWIG cpperraswarn=1 #pragma SWIG cpperraswarn=1
@ -1180,7 +1176,7 @@ Version 1.3.28 (unreleased).
12/06/2005: mmatus 12/06/2005: mmatus
[Python] The generated code is now more portable, specially [Python] The generated code is now more portable, especially
for Windows. Following for Windows. Following
http://www.python.org/doc/faq/windows.html http://www.python.org/doc/faq/windows.html
@ -1241,7 +1237,7 @@ Version 1.3.28 (unreleased).
nothreadallow 13.6s (only 'block' code) nothreadallow 13.6s (only 'block' code)
full thread 15.5s ('allow' + 'block' code) full thread 15.5s ('allow' + 'block' code)
i.e., full thread code decreases the wrapping performance i.e., full thread code decreases the wrapping performance by
around 60%. If that is important to your application, you around 60%. If that is important to your application, you
can tune each method using the different 'nothread', can tune each method using the different 'nothread',
'nothreadblock' or 'nothreadallow' features as 'nothreadblock' or 'nothreadallow' features as
@ -1273,7 +1269,7 @@ Version 1.3.28 (unreleased).
11/21/2005: mmatus 11/21/2005: mmatus
[ruby + python] [ruby + python]
Fixes for directors + pointers, ugly problem with not easy Fixes for directors + pointers. This is an ugly problem without an easy
solution. Before we identified this case as problematic: solution. Before we identified this case as problematic:
virtual const MyClass& my_method(); virtual const MyClass& my_method();
@ -1286,15 +1282,15 @@ Version 1.3.28 (unreleased).
'directorfree', which is used to 'free' the resources 'directorfree', which is used to 'free' the resources
allocated during the 'directorout' phase. At the same allocated during the 'directorout' phase. At the same
time, a primitive garbage collector engine was added to time, a primitive garbage collector engine was added to
deal with orphans addresses, when needed. deal with orphaned addresses, when needed.
The situation now is much better, but still you can have The situation is much better now, but still it is possible to have
memory exaustation if recursion is used. memory exhaustation if recursion is used.
So, still you need to avoid returning pointers, arrays or So, still you need to avoid returning pointers, arrays or
references when using director methods. references when using director methods.
- Added stdint.i - Added stdint.i - typemaps for latest C99 integral types found in stdint.h.
11/14/2005: wsfulton 11/14/2005: wsfulton
More types added to windows.i, eg UINT8, WORD, BYTE etc. More types added to windows.i, eg UINT8, WORD, BYTE etc.
@ -1360,9 +1356,9 @@ Version 1.3.28 (unreleased).
will properly work, even with directors, and the will properly work, even with directors, and the
deallocation of Foo.this and Bar.this will follow deallocation of Foo.this and Bar.this will follow
correctly. Before, since a class can only have one 'this' correctly. Before, a class could only have one 'this'
instance (not as in C++), only the last base class was instance (unlike C++), only the last base class was
properly deletted, or detected with directors. properly deleted, or detected with directors.
Now 'self.this' can be a list, which will contain the C++ Now 'self.this' can be a list, which will contain the C++
instance pointers for all the base classes. instance pointers for all the base classes.
@ -1371,16 +1367,16 @@ Version 1.3.28 (unreleased).
instance(s), and the __del__ method is not emitted unless instance(s), and the __del__ method is not emitted unless
the user preppend/append some code to it. the user preppend/append some code to it.
- Swig now can detect memory leaks, ie, if you still - Swig can now detect memory leaks, ie, if you still
use the non-shadow module, and type something like don't use proxy/shadow classes, and type something like
import _example import _example
f = _example.new_Foo() f = _example.new_Foo()
and forgot to call _example.delete_Foo(f), then swig will and forget to call _example.delete_Foo(f), then swig will
tell you that there is a memory leak. tell you that there is a memory leak.
Otherwise, if you always use the shadow module, probably Otherwise, if you always use the proxy classes, you probably
you will never ever see this warning unless there is you will never ever see this warning unless there is
something wrong inside the swig wrapping code. something wrong inside the swig wrapping code.
@ -1499,14 +1495,14 @@ Version 1.3.28 (unreleased).
calling map.iterator(), as with map.begin(), map.end(), etc. calling map.iterator(), as with map.begin(), map.end(), etc.
The difference is that map.iterator() returns a safe The difference is that map.iterator() returns a safe
'close' iterator, while map.begin() and map.end() are 'closed' iterator, while map.begin() and map.end() are
'open' iterators. 'open' iterators.
A 'close' iterator knows the begin and the end of the A 'closed' iterator knows the begin and the end of the
sequence, and it never can seg. fault. A 'open' sequence, and it never can seg. fault. An 'open'
iterator, as in C++, can seg. fault at the C++ side. iterator, as in C++, can seg. fault at the C++ side.
# a close iterator is safe in the following example. # a closed iterator is safe in the following example.
# the next() method will throw a StopIteration # the next() method will throw a StopIteration
# exception as needed # exception as needed
@ -1593,12 +1589,12 @@ Version 1.3.28 (unreleased).
swig-1.3.26 0.80s swig-1.3.26 0.80s
swig-CVS 0.60s swig-CVS 0.60s
Hence, now for practical porpuses, the proxy overhead Hence, now for practical purposes, the proxy overhead
is insignificant. is insignificant.
Note that the performance numbers we are showing is for Note that the performance numbers we are showing is for
a simple module (two types) and a simple function (one a simple module (two types) and a simple function (one
argument). For real situations, with modules with many argument). For real situations, for modules with many
more types and/or functions with many more parameters, more types and/or functions with many more parameters,
you will see even better results. you will see even better results.
@ -1606,8 +1602,8 @@ Version 1.3.28 (unreleased).
10/31/2005: mmatus 10/31/2005: mmatus
[Python] [Python]
- Finally, no more ClassPtr shadow classes. You will see - Finally, no more ClassPtr proxy classes. You will see
only a clean Class shadow class in the .py file. only a clean Class proxy class in the .py file.
- No more 'real' thisown attribute either, the PySwigObject now - No more 'real' thisown attribute either, the PySwigObject now
carries the ownership info. carries the ownership info.
@ -1640,7 +1636,7 @@ Version 1.3.28 (unreleased).
print self.thisown print self.thisown
>>> True >>> True
is supported, and python dispatch the proper method is supported, and python dispatches the proper method
calls as needed. calls as needed.
@ -1700,11 +1696,11 @@ Version 1.3.28 (unreleased).
sum += i sum += i
Note 1: Iterators in C++ are very powerful, but Note 1: Iterators in C++ are very powerful, but
dangerous too. And in python you can shoot your foot dangerous too. And in python you can shoot yourself in the foot
as well as in C++, so, be careful. just like in C++, so, be careful.
Note 2: the iterators are 'light', ie, they do not Note 2: the iterators are 'light', ie, they do not
convert sequence elements until you request so, via convert sequence elements until you request to do so, via
next(), value() or previous(). If you just increment/decrement one next(), value() or previous(). If you just increment/decrement one
no conversion is performed, for example: no conversion is performed, for example:
@ -1750,18 +1746,18 @@ Version 1.3.28 (unreleased).
self.thisown = 1 ==> self.this.own(1) self.thisown = 1 ==> self.this.own(1)
self.thisown = 0 ==> self.this.own(0) self.thisown = 0 ==> self.this.own(0)
Still, maybe in some strange case the translation is not Still, maybe in some unusual cases the translation will not be
100% secure,so if you have a problem, please report it 100% correct, so if you have a problem, please report it
and/or use the new 'self.this.own()' accessor. and/or use the new 'self.this.own()' accessor.
*** POTENTIAL INCOMPATIBILITY *** *** POTENTIAL INCOMPATIBILITY ***
There is no more ClassPtr classes in the python code. Hence, There is no more ClassPtr classes in the python code. Hence,
if in the past you needed to resort in some kind of trick if in the past you needed to resort to some kind of trickery
to use them, or overcome their presence, it is no longer with them, or overcome their presence, it is no longer
required, but the extra code you added could now break required, but the extra code you added could now break
things arounds. things.
If needed, you can use the option -classptr, i.e., If needed, you can use the option -classptr, i.e.,
@ -1825,7 +1821,7 @@ Version 1.3.28 (unreleased).
- added the attribute.i file to the unified typemap - added the attribute.i file to the unified typemap
library (before was only usable from python). library (before was only usable from python).
- uniform the names for the setter and getter methods in - unify the names for the setter and getter methods in
perl,tcl,ruby and python, so, the attribute.i library perl,tcl,ruby and python, so, the attribute.i library
can work across them. can work across them.
@ -1840,7 +1836,7 @@ Version 1.3.28 (unreleased).
10/24/2005: mmatus 10/24/2005: mmatus
- Perl uses now the unified typemap library. - Perl now uses the unified typemap library.
- Changes in ruby to use the $track option in typemaps. - Changes in ruby to use the $track option in typemaps.
@ -1921,7 +1917,7 @@ Version 1.3.28 (unreleased).
- More valgrind fixes - More valgrind fixes
- Simplify the inline use, it seems a small interface of - Simplify the inline use, it seems a small interface of
20,000 lines (plus many many templates0 can break 20,000 lines (plus many many templates) can break
gcc -O3 easily. gcc -O3 easily.
- Finalize the typemaps library. All the old *.i files - Finalize the typemaps library. All the old *.i files
@ -1950,22 +1946,22 @@ Version 1.3.28 (unreleased).
10/18/2005: mmatus 10/18/2005: mmatus
Unifying the typemaps for Added the Unified Typemap Library (UTL). It unifies the typemaps for
python, ruby, tcl python, ruby, tcl
and in the process, fix several problems in three and in the process, fixes several problems in each of the three
languages to work in the "canonical" way now stablished in languages to work in a "canonical" way now established in
the typemap library the typemap library
SWIG/Lib/typempas SWIG/Lib/typempas
The current status of the unification is that everything The current status of the unification is that everything
compiles and runs inside the test-suite and examples compiles and runs inside the test-suite and examples
directories. And for the first type we have three directories. And for the first time we have three
languages than pass the primitive_types.i case. languages than pass the primitive_types.i case.
Also, we have uniform way to treat the errors, for example Also, we have a uniform way to treat the errors, for example
if you do something like if you do something like
>>> from primitive_types import * >>> from primitive_types import *
@ -1979,16 +1975,16 @@ Version 1.3.28 (unreleased).
you get the same exception in all the three languages. you get the same exception in all the three languages.
And well, many more good things will come from this And well, many more good things will come from this
unification, as proper support of the STL/STD classes unification, for example, proper support of the STL/STD classes
for all the languages, and hopefully, we can keep for all the languages, and hopefully, we can keep
adding other languages. adding other languages.
The hardest part, writting a common typemap library The hardest part, writing a common typemap library
that suites the three different languages, is done, that suites the three different languages, is done,
and adding another language it is easy now. and adding another language should now be easy.
Still the global unification is not complete, the STL/STD Still the global unification is not complete, the STL/STD
part is next, and probably adding one or two more part is next, and probably as well as adding one or two more
languages. languages.
If you are curious, look at the python, ruby and/or tcl If you are curious, look at the python, ruby and/or tcl
@ -2000,7 +1996,5 @@ Version 1.3.28 (unreleased).
*** POTENTIAL INCOMPATIBILITY in Ruby/Tcl *** *** POTENTIAL INCOMPATIBILITY in Ruby/Tcl ***
Some missing/wrong typemaps could start working properly, Some missing/wrong typemaps could start working properly,
and change the old expected behavior, specially in ruby and change the old behavior, specially in ruby and tcl.
and tcl.