swig/SWIG/CHANGES.current

156 lines
5.2 KiB
Text

Version 1.3.27 (October 15, 2005)
=================================
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
Unifying the typemaps for
python, ruby, tcl
and in the process, fix several problems in three
languages to work in the "canonical" way now stablished 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 type we have three
languages than pass the primitive_types.i case.
Also, we have 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, as proper support of the STL/STD classes
for all the languages, and hopefully, we can keep
adding other languages.
The hardest part, writting a common typemap library
that suites the three different languages, is done,
and adding another language it is easy now.
Still the global unification is not complete, the STL/STD
part is next, and probably 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 ***
Some missing typemaps could start working, and change
the old expected behavior, specially in ruby and tcl.
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.