/tags/rel-1-3-25/SWIG/CHANGES.current
Unknown | 595 lines | 450 code | 145 blank | 0 comment | 0 complexity | 2263865ce65a81e5eba208c5883bc0ab MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
1Version 1.3.25 (June 11, 2005) 2============================== 3 406/11/2006: mkoeppe 5 [Guile] Fix handling of anonymous-enum variables. 6 706/10/2005: mkoeppe 8 [Guile] Fix for function arguments that are passed by 9 copy-of-value. Fix for global "const char *" variables. 10 Fix testcases arrays_dimensionless, arrays_global. 11 1206/08/2005: wsfulton 13 Fix for when a base class defines a symbol as a member variable and a derived class defines 14 the same symbol as a member method. 15 1606/08/2005: wsfulton 17 [C#] More fixes for virtual/new/override modifiers - when a method has protected access 18 in base and public access in derived class. 19 2006/02/2005: wsfulton 21 Fix #1066363 - Follow convention of release tarball name matching directory name. 22 2306/02/2005: wsfulton 24 [C#, Java] Fix #1211353 - typesafe enums (and Java proper enums) wrappers when enum value 25 is negative. 26 2705/27/2005: wsfulton 28 Modernised and tidied up Windows macros --> SWIGEXPORT, SWIGSTDCALL. They can be overridden 29 by users via -D compiler directives if need be. 30 3105/26/2005: wsfulton 32 %csmethodmodifiers can be applied to variables as well as methods now. 33 34 In addition to the default 'public' modifier that SWIG generates, %csmethodmodifiers will also 35 replace the virtual/new/override modifiers that SWIG thinks is appropriate. This feature is 36 useful for some obscure cases where SWIG might get the modifiers incorrect, for example 37 with multiple inheritance and overriding a method in the base class. 38 39 *** POTENTIAL INCOMPATIBILITY FOR C# MODULE *** 40 4105/25/2005: wsfulton 42 Added missing constructors to std::pair wrappers (std_pair.i) for all languages. 43 4405/25/2005: wsfulton 45 [C#] Added std::pair wrappers in std_pair.i 46 4705/25/2005: wsfulton 48 [C#] The C# 'new' and 'override' modifiers will be generated when a C++ class inherits methods 49 via a C++ 'using' declaration. 50 5105/25/2005: wsfulton 52 Fix for exception specifications previously being ignored in classes that inherited methods 53 from 'using' declarations, eg calls to Derived::bar below will convert C++ exceptions into 54 a target language exception/error, like it always has done for Base::Bar. 55 56 class Base { 57 virtual bar() throw (std::string); 58 }; 59 class Derived : public Base { 60 using Base::bar; 61 }; 62 6305/23/2005: wsfulton 64 Fixes for detecting virtual methods in %extend for the -fvirtual option and C# override and new 65 method modifiers. 66 6705/23/2005: wsfulton 68 [C#] The 'new' modifier is now generated on the proxy method when a method in a derived 69 class is not polymorphic and the same method exists in the derived class (ie it hides 70 the base class' non-virtual method). 71 7205/23/2005: wsfulton 73 [Java, C#] Fixes to detection of covariant return types - when the class hierarchy is more 74 than 2 classes deep. 75 7605/21/2005: wsfulton 77 [Java] std::wstring typemaps moved from std_string.i to std_wstring.i 78 7905/21/2005: wsfulton 80 Fix for crash in DohStrstr, bug #1190921 81 8205/21/2005: wsfulton 83 [TCL] Fix for methods with similar names when showing list of names on error - bug #1191828. 84 Patch from Jeroen Dobbelaere. 85 8605/21/2005: wsfulton 87 [TCL] long long overloading fix - bug #1191835, patch from Jeroen Dobbelaere. 88 8905/21/2005: wsfulton 90 Fix bug #1196755 to remove debug from swigtcl8.swg. 91 9205/19/2005: wsfulton 93 [C# and -fvirtual option] Fix for the override key not being generated in the derived class when a 94 virtual method's return type was a typedef in either the base or derived class. Also ensures the 95 method is eliminated when using the -fvirtual option. For example, Derived.method now has the C# 96 override keyword generated: 97 98 typedef int* IntegerPtr; 99 100 struct Base { 101 virtual IntegerPtr method(); 102 }; 103 104 struct Derived : Base { 105 int * method() const; 106 }; 107 108 [C#] Fix for the override key being incorrectly generated for virtual methods when a base class 109 is ignored with %ignore. 110 11105/13/2005: wsfulton 112 [Java] Fixes to remove "dereferencing type-punned pointer will break strict-aliasing rules" 113 warnings in C wrappers when compiling C code with 'gcc -Wall -fstrict-aliasing'. Patch from 114 Michael Cahill. This modifies many of the casts slightly, for example 115 arg1 = *(DB_ENV **)&jarg1; 116 to 117 arg1 = *(DB_ENV **)(void *)&jarg1; 118 11905/12/2005: wsfulton 120 [C#] Support for C# attributes. C# attributes can be generated: 121 1) On a C/C++ type basis by specifying an inattributes and/or outattributes typemap attribute 122 in the imtype or cstype typemaps (for C# return type or C# parameter type attributes). 123 2) On a wrapped method or variable by specifying a csattributes feature (%feature). 124 3) On a wrapped proxy class or enum by specifying a csattributes typemap. 125 126 Examples are in the C# documentation (CSharp.html). 127 12804/29/2005: wsfulton 129 New configure option to turn off the default maximum compiler warning as 130 they couldn't be removed even when overriding CFLAGS and CXXFLAGS with configure 131 (./configure CFLAGS= CXXFLAGS=). To turn the maximum warnings off, run: 132 133 ./configure --without-maximum-compile-warnings 134 13504/28/2005: wsfulton 136 Patch from Scott Michel which reworks the Java constructor and finalize/destructor typemaps, 137 for directors to reduce the number of overall Java typemaps. Added the director_take and 138 director_release typemaps to emulate other modules' __disown__ functionality. 139 140 *** POTENTIAL INCOMPATIBILITY FOR JAVA DIRECTORS *** 141 14204/28/2005: wsfulton 143 [C#] Fixed problems due to the over eager garbage collector. Occasionally the 144 garbage collector would collect a C# proxy class instance while it was being used 145 in unmanaged code if the object was passed as a parameter to a wrapped function. 146 Needless to say this caused havoc as the C# proxy class calls the C++ destructor 147 when it is collected. Proxy classes and type wrapper classes now use a HandleRef, 148 which holds an IntPtr, instead of a plain IntPtr to marshal the C++ pointer to unmanaged 149 code. There doesn't appear to be any performance degradation as a result of this 150 modification. 151 152 The changes are in the proxy and type wrapper classes. The swigCPtr is now of type HandleRef 153 instead of IntPtr and consequently the getCPtr method return type has also changed. The net 154 effect is that any custom written typemaps might have to be modified to suite. Affected users 155 should note that the implementation uses the new 'out' attribute in the imtype typemap as the 156 input type is now a HandleRef and the output type is still an IntPtr. 157 158 *** POTENTIAL INCOMPATIBILITY FOR C# MODULE *** 159 16004/28/2005: wsfulton 161 [C#] Support for asymmetric type marshalling added. Sometimes the output type needs to be 162 different to the input type. Support for this comes in the form of a new optional 'out' 163 attribute for the ctype, imtype and cstype typemaps. If this typemap attribute is not 164 specified, then the type used for both input and output is the type specified in the 165 typemap, as has always previously been the case. If this typemap attribute is specified, 166 then the type specified in the attribute is used for output types and the type specified 167 in the typemap itself is used for the input type. An output type is a return value from 168 a wrapped method or wrapped constant and an input type is a parameter in a wrapped method. 169 170 An example shows that char * could be marshalled in different ways, 171 172 %typemap(imtype, out="IntPtr") char * "string" 173 char * function(char *); 174 175 The output type is thus IntPtr and the input type is string. The resulting intermediary C# code is: 176 177 public static extern IntPtr function(string jarg1); 178 17904/22/2005: mkoeppe (Matthias Koeppe) 180 [Guile] Fix generation of "define-method" for methods of 181 classes with a constructor. Reported by Luigi Ballabio. 182 18304/15/2005: wuzzeb (John Lenz) 184 [Chicken] 185 For wrapped functions that return multiple values (using argout), 186 SWIG CHICKEN now returns them as multiple values instead of as 187 a list. They can then be accessed using (call-with-values). 188 18904/14/2005: wuzzeb (John Lenz) 190 [Chicken] 191 + Added a whole bunch of new _runme scripts into the chicken test 192 suite. Also fix some bugs these new scripts turned up. 193 194 + Added optimization when returning a wrapped proxy class. Before, 195 a minor garbage collection was invoked every time a function returned. 196 197 + All the chicken Examples should now run correctly 198 19904/14/2005: wsfulton 200 [C#] More fixes for typemap matching when wrapping variables, in particular 201 std::string, so that std::string variables can be easily marshalled with 202 a C# string property using: 203 204 %include "std_string.i" 205 %apply const std::string & { std::string *variable_name }; 206 std::string variable_name; 207 208 (Recall that all class variables are wrapped using pointers) 209 21004/05/2005: wuzzeb (John Lenz) 211 [Chicken] 212 + Added Examples/chicken/egg, an example on how to build a chicken 213 extension library in the form of an egg. Also updated the 214 documentation on the different linking options. 215 216 + chicken test-suite now has support to check SWIG with the -proxy 217 argument if there exists a _proxy_runme.ss file. 218 219 + More fixes for overloaded functions and -proxy 220 22103/31/2005: wsfulton 222 Turned on extra template features for all languages which were 223 previously only available to Python. 224 225 This enables typemaps defined within a templated class to be used as 226 expected. Requires %template on the templated class, %template() will 227 also pick up the typemaps. Example: 228 229 template <typename T> struct Foo { 230 ... 231 %typemap(in) Foo "in typemap for Foo<T> " 232 or 233 %typemap(in) Foo<T> "in typemap for Foo<T> " 234 }; 235 236 %template(Foo_i) Foo<int>; 237 %template() Foo<double>; 238 239 will generate the proper 'in' typemaps wherever Foo<int> and Foo<double> 240 are used. 241 24203/30/2005: mkoeppe (Matthias Koeppe) 243 [MzScheme] Patch from Hans Oesterholt for supporting MzScheme 30x. 244 24503/29/2005: wuzzeb (John Lenz) 246 [Chicken] 247 + Reallow older versions of chicken (1.40 to 1.89) by passing -nocollection 248 argument to SWIG 249 + %import now works correctly with tinyclos. (declare (uses ...)) will be 250 exported correctly. 251 + TinyCLOS proxy classes now work correctly with overloaded functions 252 and constructors. 253 25403/29/2005: wsfulton 255 [Java] Patch from Scott Michel for directorout typemaps. Java directors 256 require the directorout typemaps like the other languages now. The new 257 typemaps provide fixes for methods where the return type is returned 258 by reference (this cannot automatically be made thread safe though). 259 26003/22/2005: wsfulton 261 Enum casting fixes. Visual C++ didn't like the C type casting SWIG produced 262 when wrapping C++ enum references, as reported by Admire Kandawasvika. 263 26403/21/2005: wsfulton 265 [Perl] SF #1124490. Fix Perl macro clashes when using Visual Studio's STL string, 266 so now projects can #include <string>. 267 26803/21/2005: wsfulton 269 Fixed %varargs which got broken with the recent default argument changes. 270 Also works for Java and C# for the first time now. 271 27203/17/2005: wuzzeb (John Lenz) 273 [Chicken] 274 + Fix a whole bunch of bugs in the chicken module. The entire 275 test suite now compiles, with the exception of the tests that require 276 std_vector.i, std_deque.i, and so on, which chicken does not have yet. 277 278 + Add support for %exception and %typemap(exceptions). Exceptions are 279 thrown with a call to (abort) and can be handled by (handle-exceptions) 280 28103/15/2005: wsfulton 282 [Java] Patch from Scott Michel for directors. Modifications to the typemaps 283 giving users fine control over memory ownership and lifetime of director classes. 284 Director classes no longer live forever by default as they are now collectable 285 by the GC. 286 28703/15/2005: wuzzeb (John Lenz) 288 [Chicken] Add support for adding finalizers garbage collected objects. 289 Functions that return new objects should be marked with %newobject and 290 input arguments which consume (or take ownership) of a pointer should 291 be marked with the DISOWN typemap. 292 293 Also add support for correctly checking the number of arguments passed 294 to a function, and raising an error if the wrong number are passed. 295 29603/14/2005: wuzzeb (John Lenz) 297 Add --without-alllang option to configure.in, which is the same as 298 passing all the --without-python --without-perl5 etc... that Matthias added. 299 30003/09/2005: wsfulton 301 [Php] Memory leak fix for functions returning classes/structs by value. 302 30303/08/2005: wsfulton 304 [Perl] Fix for Perl incorrectly taking memory ownership for return types that 305 are typedefs to a struct/class pointer. Reported by Josh Cherry. 306 30703/07/2005: wsfulton 308 [C#] Various exception changes for the std::vector wrappers. These now more 309 accurately mirror the same exceptions that System.Collections.ArrayList throw. 310 31103/07/2005: wsfulton 312 [C#] Fix undefined behaviour after any of the std::vector methods 313 throw an exception. 314 31503/07/2005: wsfulton 316 [C#] When null is passed for a C++ reference or value parameter, the 317 exception thrown has been corrected to an ArgumentNullException instead 318 of NullReferenceException as recommended in the .NET Framework documentation. 319 320 The default throws typemaps turn a C++ exception into an ApplicationException, 321 not a SystemException now. 322 32303/07/2005: wsfulton 324 [C#] Numerous changes in C# exception handling have been made over the past 325 few weeks. A summary follows: 326 327 The way in which C++ exceptions are mapped to C# exceptions is quite different. 328 The change is to fix C# exceptions so that the C++ exception stack is correctly 329 unwound as previously C++ exceptions were being thrown across the C PInvoke layer 330 into the managed world. 331 332 New typemap attributes (canthrow and excode) have been introduced to control the 333 mapping of C++ to C# exceptions. Essentially a callback into the unmanaged world 334 is made to set a pending exception. The exception to throw is stored in thread local 335 storage (so the approach is thread-safe). The typemaps are expected to return 336 from unmanaged code as soon as the pending exception is set. Any pending exceptions 337 are checked for and thrown once managed code starts executing. There should 338 be minimal impact on execution speed during normal behaviour. Full details will be 339 documented in CSharp.html. 340 341 The SWIG_CSharpThrowException() function has been removed and replaced with the 342 SWIG_CSharpSetPendingExceptionArgument() and SWIG_CSharpSetPendingException() 343 functions. The original name has been deliberately changed to break old code as 344 the old approach was somewhat flawed. Any user defined exceptions that follow the 345 same pattern as the old approach should also be fixed. 346 347 Numerous new .NET framework exceptions are now available for easy throwing from 348 unmanaged code. The complete list is: 349 350 ApplicationException, ArithmeticException, DivideByZeroException, 351 IndexOutOfRangeException, InvalidOperationException, IOException, 352 NullReferenceException, OutOfMemoryException, OverflowException, 353 SystemException, ArgumentException, ArgumentNullException and 354 ArgumentOutOfRangeException. 355 356 *** POTENTIAL INCOMPATIBILITY FOR C# MODULE *** 357 35805/05/2005: mmatus 359 360 Fix several memory leaks around. Even when we survive knowning 361 swig is a memory leak factory, it was a little out of 362 control. To run std_containers.i in the python test-suite, 363 swig was using ~260MB, now it uses 'only' ~40MB, which is 364 the same ammount that g++ uses, so, is not that bad. 365 In the process, I found a couple of extra Deletes, which 366 in some cases could trigger seg. faults and/or 367 DOH/asserts. 368 369 [python] Better support for directors + exception. More 370 verbose errors and added an unexpected exception handler. 371 372 [python] Fix memory leak for the 373 374 std::vector<std::vector<int> > 375 376 case,reported by Bo Peng. 377 378 [python] Fix SwigPyObject compare problem reporte by 379 Cameron Patrick. 380 381 [python] Fix several warnings in the generated code 382 for gnu-gcc, Intel and VC7.1 compilers. 383 384 38502/25/2005: wuzzeb (John Lenz) 386 Update documentation to use CSS and <div> instead of <blockquote> 387 I used a script to convert the docs, and it set all the box classes 388 to be "code". There are actually 4 different classes, 389 "shell", "code", "targetlang", and "diagram". We need to go through 390 and convert the divs depending on what they contain. 391 39202/23/2005: mmatus 393 394 [Python] Added option -nortti to disable the use of native 395 C++ RTTI with directors (dynamic_cast<> is not used). 396 397 Add more code for directors to detect and report errors in 398 the python side. 399 400 Extend the use of SWIGINTERN whenever is possible. 401 402 Remove template warnings reported by VC7.1. 403 404 Remove warnings reported by gcc/g++. Finally you can 405 compile using 406 407 g++ -W -Wall -c mymodule_wrap.cxx 408 409 and no spurious errors will be generated in the wrapper 410 code. 411 41202/23/2005: wuzzeb (John Lenz) 413 Added -external-runtime argument. This argument is used to dump 414 out all the code needed for external access to the runtime system, 415 and it replaces including the files directly. This change adds 416 two new virtual functions to the Language class, which are used 417 to find the language specific runtime code. I also updated 418 all languages that use the runtime to implement these two functions. 419 42002/22/2005: mmatus 421 Fix %template + private error SF#1099976. 422 42302/21/2005: mmatus 424 425 Fix swigrun.swg warnings reported when using "gcc -W -Wall" 426 (static/inline not used in front of a function 427 declaration), and add SWIGUNUSED attribute to avoid 428 unused warnings elsewhere. 429 430 Fix unused variable warnings. 431 432 [Python] Use new SWIGUNUSED attribute to avoid warnings in 433 SWIGINTERN methods. 434 435 [Python] Fix PyOS_snprintf for python versions < 2.2 (SF #1104919). 436 437 [Python] Fix map/multimap to allow empty maps (reported by 438 Philippe Hetroy). 439 440 [Docs] Add some documentation to Python.html and 441 SWIGPlus.html, including for example the fact that 442 'friends' are now supported. 443 44402/21/2005: wsfulton 445 [PHP] Patch from Olly Betts, so that wrappers compile with Zend thread safety enabled. 446 44702/17/2005: wsfulton 448 Memory leak fix in some of the scripting language modules when using default 449 arguments in constructors. The scripting language was not taking ownership of the 450 C++ object memory when any of the constructors that use default arguments was called. 451 45202/16/2005: wsfulton 453 SF #1115055: Failed make install. Patch from Rob Stone. 454 45502/16/2005: wsfulton 456 [Java] SF #1123416 from Paul Moore. Correct memory allocation for STRINGARRAY 457 typemaps in various.i. 458 45902/15/2005: wsfulton 460 Disabled typemap search changes for now (see entry 19/12/2004). It breaks 461 old typemaps, lengthens the execution time by about 25% and introduces 462 inconsistencies. 463 46402/15/2005: wsfulton 465 swig -help follows other software by printing to stdout instead of stderr now. 466 swig -version also displays to stdout instead of stderr now. 467 Behaviour reported by Torsten Landschoff. 468 46902/15/2005: wsfulton 470 [Ruby] Fix for the less commonly used ordering of %include and #include, so 471 that the generated code compiles. Bug reported by reported by Max Bowsher. 472 %include foo.h 473 %{ 474 #include foo.h 475 %} 476 47702/15/2005: wsfulton 478 [C#, Java] SWIG_exception macro will now return from unmanaged code / native code 479 as soon as it is called. Fixes possible JVM crashes and other code unexpectedly 480 being executed. Note SWIG_exception is only occasionally used by SWIG library 481 writers, and is best avoided by SWIG users. 482 48302/15/2005: wsfulton 484 [C#, Java] Typemaps can now be targeted at global variable names 485 and static member variable names. Previously the typemaps for 486 the setters were ignored, for example: 487 488 %typemap(in) int globalint "..." 489 int globalint; 490 49102/13/2005: mkoeppe (Matthias Koeppe) 492 [Guile] Add %typecheck for SWIGTYPE, add %typecheck for ptrdiff_t, fix 493 typemaps for size_t. 494 495 [Pike] Merge patch from Torsten Landschoff for improved Pike configuration. 496 49702/12/2005: mkoeppe (Matthias Koeppe) 498 New configure switches --without-tcl, --without-python etc. allow to 499 disable the search for installed languages. 500 50101/31/2005: wuzzeb (John Lenz) 502 - Add DohSortList to DOH 503 504 - Improve the runtime type system: 505 + Speed. Type loading is now O(n log n) instead of O(N^2), which 506 for large modules is a huge improvement. 507 + A whole bunch of functions in swigrun.swg no longer need the 508 swig_type_list_handle passed to them. The only one left is 509 TypeQuery. This also makes runtime.swg a lot smaller. 510 + Split up swig_type_info structure into two structures 511 (swig_type_info and swig_cast_info) 512 + Store a pointer to a swig_type_info rather than just the type 513 name string in the linked list of casts. First off, this makes 514 the guile module a little faster, and second, the 515 SWIG_TypeClientData() function is faster too. 516 + Add the idea of a module into the type system. Before, all the 517 types were stored in one huge linked list. Now, another level is 518 added, and the type system stores a linked list of modules, each 519 of which stores an array of types associated with it. 520 + For more information of how the runtime type system now works, 521 please see Doc/Manual/typemaps.html and Doc/Devel/runtime.txt 522 523 - Update all language modules to use the new type system. The changes 524 to each language module are minor. All languages are now able to 525 use runtime.swg for external access to the type system. Before 526 only python and perl did. 527 528 - [guile, mzscheme, ocaml, and php4] These languages opened up the 529 init function inside the .cxx code, and any code in the .swg files 530 in the init section was inside this function. This was a problem 531 for swiginit.swg, which needs to be inserted before the SWIG_init 532 function is opened. Thus I changed these languages to be like 533 python or perl, where the init function is declared in the .swg 534 file. 535 536 - [Ruby] Instead of moving the init function to the .swg file, I 537 added a new section initbeforefunc, and then added 538 %insert(initbeforefunc) "swiginit.swg" 539 540 - [MzScheme] Fix enums and fix Examples/Makefile.in so that if 541 multiple -I arguments are specified in the INCLUDES variable, each 542 gets a ++ccf. 543 544 - [Guile GH] Update Guile GH to use the new type system. See 545 Doc/Manual/Guile.html for how smobs are now used. 546 54701/11/2005: wsfulton 548 [C#] New typemap called 'csconstruct'. The code in this typemaps was previously hard 549 coded and could not be customised by a user. This typemap contains the code that is 550 generated into a proxy class's constructor. 551 552 [Java] New typemap called 'javaconstruct'. The code in this typemaps was previously hard 553 coded and could not be customised by a user. This typemap contains the code that is 554 generated into a proxy class's constructor. Another typemap named 'javaconstruct_director' 555 is used instead when the proxy class is a director class. 556 557 [C#, Java] If a C++ class did not have a default constructor, a protected default constructor 558 was automatically generated by SWIG. This seems is unnecessary and has been removed 559 and thereby giving the user almost complete control over the generated code along with the 560 new typemaps above. 561 56219/12/2004: mmatus 563 [Disabled, see entry 02/15/2004] 564 - Fix typemap search, now the "out" typemap search is done as follows 565 566 int *Foo::foo(int bar) -> int *Foo::foo(int bar) 567 -> int *Foo::foo 568 -> int *foo(int bar) 569 -> int *foo 570 -> int * 571 572 then, now you can be more specific, and define 573 574 /* apply only for 'Foo::foo' method */ 575 %typemap(out) int * Foo::foo(int *bar) ...; 576 577 /* apply for all 'foo' functions/methods */ 578 %typemap(out) int * foo(int *bar) ...; 579 580 %inline { 581 struct Foo { 582 int *foo(int *bar); 583 }; 584 } 585 586 58715/12/2004: mmatus 588 - More fixes for templates and template default args. 589 See template_default.i for scary cases that now are 590 supported, besides the already ugly STL/std cases. 591 592 - Cosmetics and more use of 'const' where it was implicit. 593 - Other fixes for OSS, which is now working again with 1.3.25. 594 595