From e058e1f42ff1395c5d357b5e4bea94804428dd78 Mon Sep 17 00:00:00 2001 From: Maciej Drwal Date: Sat, 28 Jun 2008 23:26:18 +0000 Subject: [PATCH] Merged revisions 10498-10499,10503-10504,10506,10508,10511,10515-10516,10518-10519,10527,10530-10531,10536-10537,10539-10552,10558-10568,10574-10580,10582,10584,10588-10589,10594 via svnmerge from https://swig.svn.sourceforge.net/svnroot/swig/trunk MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ........ r10498 | talby | 2008-05-26 22:09:56 +0200 (Pn, 26 maj 2008) | 2 lines run test cases in the Perl set by the --with-perl5 configure option. ........ r10499 | talby | 2008-05-26 23:04:06 +0200 (Pn, 26 maj 2008) | 3 lines The perl5 minherit runtime test will work better if the classes are actually built under SWIGPERL. ........ r10503 | wsfulton | 2008-05-28 11:44:37 +0200 (Śr, 28 maj 2008) | 1 line Fix variable wrappers when using -proxy. Patch from Jan Jezabek ........ r10504 | bhy | 2008-05-28 19:27:48 +0200 (Śr, 28 maj 2008) | 2 lines Fixed SF #1971977: typo in pycontainer.swg (related to -extranative option) ........ r10506 | wsfulton | 2008-05-29 02:45:28 +0200 (Cz, 29 maj 2008) | 1 line Fix variable wrappers when using -noproxy ........ r10508 | bhy | 2008-05-30 15:53:33 +0200 (Pt, 30 maj 2008) | 1 line Fixed SF #1976978, apply the macros for primitive types to std::wstring ........ r10511 | olly | 2008-05-30 18:11:27 +0200 (Pt, 30 maj 2008) | 4 lines Fix typo in handling of /*@SWIG[...]*/ comments in the scanner. This just meant we were only actually looking for /*@SWI at the start of the comment, so was pretty harmless in practice. ........ r10515 | wsfulton | 2008-06-02 22:10:40 +0200 (Pn, 02 cze 2008) | 1 line Fix samename testcase for c# and java ........ r10516 | wsfulton | 2008-06-02 22:15:39 +0200 (Pn, 02 cze 2008) | 1 line Fix enums when using -noproxy ........ r10518 | bhy | 2008-06-07 13:20:07 +0200 (So, 07 cze 2008) | 4 lines Added a test case for keyword renaming. Now it works for Python in SWIG's -c++ mode, but in C mode it doesn't work! (you can try with make keyword_rename.ctest) ........ r10519 | bhy | 2008-06-07 15:40:51 +0200 (So, 07 cze 2008) | 1 line fixed keyword_rename.ctest tese case, caused by a mistake in Swig/naming.c ........ r10527 | mgossage | 2008-06-17 04:57:15 +0200 (Wt, 17 cze 2008) | 1 line [lua] bugfix 1938142 (bool& and bool* support) ........ r10530 | wsfulton | 2008-06-19 22:02:13 +0200 (Cz, 19 cze 2008) | 1 line Add R keyword support. Rename keywords for successful compilation of Java and C# code. More consistent keyword warnings across the different languages. ........ r10531 | wsfulton | 2008-06-19 23:15:48 +0200 (Cz, 19 cze 2008) | 1 line add complete list of R reserved words ........ r10536 | wsfulton | 2008-06-21 13:35:33 +0200 (So, 21 cze 2008) | 1 line better terminology for static types ........ r10537 | wsfulton | 2008-06-21 13:42:48 +0200 (So, 21 cze 2008) | 1 line remove raise as keyword test- it conflicts with _raise in LIBCMT on windows ........ r10539 | wsfulton | 2008-06-21 17:21:29 +0200 (So, 21 cze 2008) | 1 line Lua example warning removal fixes for vc++ ........ r10540 | wsfulton | 2008-06-21 17:23:02 +0200 (So, 21 cze 2008) | 1 line Remove some vc++ /W4 warnings ........ r10541 | wsfulton | 2008-06-21 18:04:55 +0200 (So, 21 cze 2008) | 1 line minor vc++ /W4 warning fixes ........ r10542 | wsfulton | 2008-06-21 21:07:51 +0200 (So, 21 cze 2008) | 1 line 'byte' is already used in Ruby on windows, so use another keyword ........ r10543 | wsfulton | 2008-06-21 22:45:32 +0200 (So, 21 cze 2008) | 1 line Fix crashing in the Ruby reject method in the STL wrappers ........ r10544 | wsfulton | 2008-06-21 22:48:28 +0200 (So, 21 cze 2008) | 1 line Fix crashing in the Ruby reject method in the STL wrappers ........ r10545 | wsfulton | 2008-06-21 22:49:10 +0200 (So, 21 cze 2008) | 1 line remove unnecessary variable int the char **STRING_ARRAY out typemap ........ r10546 | wsfulton | 2008-06-21 23:07:49 +0200 (So, 21 cze 2008) | 1 line Fix Ruby C++ example dependencies in dsp files ........ r10547 | wsfulton | 2008-06-22 00:25:36 +0200 (N, 22 cze 2008) | 1 line Fix unused parameter warnings in python when using gcc's -W -Wall options ........ r10548 | wsfulton | 2008-06-22 00:26:35 +0200 (N, 22 cze 2008) | 1 line Fix virtual destructor ........ r10549 | wsfulton | 2008-06-22 01:25:20 +0200 (N, 22 cze 2008) | 1 line various warning fixes ........ r10550 | wsfulton | 2008-06-22 02:09:11 +0200 (N, 22 cze 2008) | 1 line Another fix for the JVM hanging on exit problem when using directors ........ r10551 | wsfulton | 2008-06-22 02:09:51 +0200 (N, 22 cze 2008) | 1 line documentation sections update ........ r10552 | wsfulton | 2008-06-22 02:18:10 +0200 (N, 22 cze 2008) | 1 line more docs on defining macros for the thread hanging problem ........ r10558 | wsfulton | 2008-06-22 23:30:20 +0200 (N, 22 cze 2008) | 1 line fix unused parms in last commit for C code ........ r10559 | wsfulton | 2008-06-23 00:12:43 +0200 (Pn, 23 cze 2008) | 1 line Suppress unused methods warning for VC++ ........ r10560 | wsfulton | 2008-06-23 22:26:07 +0200 (Pn, 23 cze 2008) | 1 line fix partialcheck-test-suite and parallel make for r, chicken, tcl and php ........ r10561 | wsfulton | 2008-06-23 22:39:41 +0200 (Pn, 23 cze 2008) | 1 line correct message display when running the partialcheck-test-suite make target ........ r10562 | wsfulton | 2008-06-23 23:14:53 +0200 (Pn, 23 cze 2008) | 1 line fix typo ........ r10563 | olly | 2008-06-23 23:23:54 +0200 (Pn, 23 cze 2008) | 3 lines Fix bad use of Python API (untested, since I can't even compile this code on x86-64!) ........ r10564 | olly | 2008-06-24 00:58:03 +0200 (Wt, 24 cze 2008) | 3 lines [PHP] Fix segfault when wrapping a non-class function marked with %newobject (testcase char_strings). ........ r10565 | olly | 2008-06-24 02:27:34 +0200 (Wt, 24 cze 2008) | 3 lines [PHP] Fix assertion failure when handling %typemap(in,numinputs=0) (testcase ignore_parameter). ........ r10566 | olly | 2008-06-24 02:33:08 +0200 (Wt, 24 cze 2008) | 2 lines [PHP] Fix typemap_namespace.i to not try to copy a non-existent typemap. ........ r10567 | olly | 2008-06-24 02:41:07 +0200 (Wt, 24 cze 2008) | 3 lines Clean up dead and unused code in SwigToPhpType(), and rename to GetShadowReturnType(). ........ r10568 | olly | 2008-06-24 02:42:29 +0200 (Wt, 24 cze 2008) | 2 lines Fix cosmetic typo in string constant. ........ r10574 | wsfulton | 2008-06-24 22:10:28 +0200 (Wt, 24 cze 2008) | 1 line zap last entry ........ r10575 | wsfulton | 2008-06-24 22:11:46 +0200 (Wt, 24 cze 2008) | 1 line variable name changes to remove php keywords ........ r10576 | wsfulton | 2008-06-24 22:12:08 +0200 (Wt, 24 cze 2008) | 1 line variable name hiding fix ........ r10577 | wsfulton | 2008-06-24 22:12:43 +0200 (Wt, 24 cze 2008) | 1 line More info about numobjects added ........ r10578 | wsfulton | 2008-06-24 22:13:41 +0200 (Wt, 24 cze 2008) | 1 line update for 1.3.36 release ........ r10579 | wsfulton | 2008-06-24 23:48:46 +0200 (Wt, 24 cze 2008) | 1 line remove deprecated -c commandline option (runtime library generation) ........ r10580 | wsfulton | 2008-06-24 23:53:12 +0200 (Wt, 24 cze 2008) | 1 line correct comment about deprecated option ........ r10582 | wsfulton | 2008-06-25 01:00:27 +0200 (Śr, 25 cze 2008) | 1 line use rsync and ssh to upload releases to SourceForge as ftp no longer works ........ r10584 | wsfulton | 2008-06-25 01:24:48 +0200 (Śr, 25 cze 2008) | 1 line correction for 1.3.36 ........ r10588 | wsfulton | 2008-06-25 02:16:04 +0200 (Śr, 25 cze 2008) | 1 line section update ........ r10589 | wsfulton | 2008-06-25 02:16:40 +0200 (Śr, 25 cze 2008) | 1 line bump version to 1.3.37 ........ r10594 | wsfulton | 2008-06-26 20:33:06 +0200 (Cz, 26 cze 2008) | 1 line correct typo in first entry about %fragment ........ git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2008-maciekd@10606 626c5289-ae23-0410-ae9c-e8d60b6d4f22 --- ANNOUNCE | 10 +- CHANGES | 159 +++++++++++++++++- CHANGES.current | 103 ------------ Doc/Manual/Contents.html | 3 +- Doc/Manual/Java.html | 21 +++ Doc/Manual/SWIGPlus.html | 5 +- Doc/Manual/Sections.html | 2 +- Doc/Manual/Typemaps.html | 15 +- Doc/Manual/Warnings.html | 2 +- Examples/Makefile.in | 17 +- Examples/guile/multimap/example.i | 4 +- Examples/guile/multivalue/example.i | 6 + Examples/lua/arrays/example.c | 2 +- Examples/lua/embed2/embed2.c | 13 +- Examples/lua/embed3/embed3.cpp | 14 +- Examples/lua/owner/example.cxx | 4 +- Examples/perl5/import/base.h | 2 +- Examples/perl5/multiple_inheritance/example.h | 23 ++- Examples/ruby/class/example.dsp | 4 +- Examples/ruby/free_function/example.cxx | 2 +- Examples/ruby/free_function/example.dsp | 4 +- Examples/ruby/import/bar.dsp | 4 +- Examples/ruby/import/base.dsp | 4 +- Examples/ruby/import/foo.dsp | 4 +- Examples/ruby/import/spam.dsp | 4 +- Examples/ruby/mark_function/example.dsp | 4 +- Examples/tcl/import/base.h | 2 +- Examples/test-suite/apply_signed_char.i | 2 + Examples/test-suite/bools.i | 2 + Examples/test-suite/char_strings.i | 2 +- Examples/test-suite/chicken/Makefile.in | 12 +- Examples/test-suite/common.mk | 2 + Examples/test-suite/constant_pointers.i | 6 + Examples/test-suite/cpp_basic.i | 2 + Examples/test-suite/csharp/Makefile.in | 4 +- .../test-suite/csharp/char_strings_runme.cs | 2 +- Examples/test-suite/enum_thorough.i | 2 + Examples/test-suite/fvirtual.i | 4 +- Examples/test-suite/guilescm/Makefile.in | 8 +- Examples/test-suite/java/Makefile.in | 4 +- .../test-suite/java/char_strings_runme.java | 2 +- Examples/test-suite/java_typemaps_proxy.i | 2 + Examples/test-suite/keyword_rename.i | 32 ++++ Examples/test-suite/li_std_string.i | 2 +- Examples/test-suite/lua/li_typemaps_runme.lua | 40 +++++ Examples/test-suite/minherit.i | 2 +- Examples/test-suite/octave/fvirtual_runme.m | 2 +- .../test-suite/octave/li_std_string_runme.m | 2 +- .../test-suite/perl5/li_std_string_runme.pl | 4 +- Examples/test-suite/perl5/run-perl-test.pl | 2 +- Examples/test-suite/php4/Makefile.in | 6 +- Examples/test-suite/python/fvirtual_runme.py | 2 +- .../test-suite/python/keyword_rename_runme.py | 4 + .../test-suite/python/li_std_string_runme.py | 2 +- Examples/test-suite/r/Makefile.in | 4 +- .../test-suite/ruby/li_std_string_runme.rb | 2 +- Examples/test-suite/samename.i | 13 +- Examples/test-suite/template_int_const.i | 8 +- Examples/test-suite/template_typedef_rec.i | 6 +- Examples/test-suite/typemap_namespace.i | 2 +- Lib/chicken/chickenkw.swg | 2 +- Lib/csharp/csharphead.swg | 4 +- Lib/csharp/csharpkw.swg | 2 +- Lib/java/director.swg | 10 +- Lib/java/javakw.swg | 2 +- Lib/java/various.i | 2 +- Lib/lua/luatypemaps.swg | 4 +- Lib/lua/typemaps.i | 21 +++ Lib/ocaml/ocamlkw.swg | 2 +- Lib/perl5/perlkw.swg | 4 +- Lib/php4/php4kw.swg | 10 +- Lib/pike/pikekw.swg | 2 +- Lib/python/pycontainer.swg | 4 +- Lib/python/pyiterators.swg | 6 +- Lib/python/pythonkw.swg | 4 +- Lib/r/r.swg | 2 + Lib/r/rkw.swg | 32 ++++ Lib/ruby/rubycontainer.swg | 6 +- Lib/ruby/rubykw.swg | 2 +- Lib/swiglabels.swg | 6 + Lib/typemaps/primtypes.swg | 1 + README | 9 +- Source/CParse/cscanner.c | 2 +- Source/CParse/parser.y | 29 ++-- Source/CParse/templ.c | 4 +- Source/DOH/hash.c | 31 ++-- Source/Modules/allegrocl.cxx | 32 ++-- Source/Modules/chicken.cxx | 13 +- Source/Modules/csharp.cxx | 41 +++-- Source/Modules/guile.cxx | 2 +- Source/Modules/java.cxx | 35 ++-- Source/Modules/lang.cxx | 61 +++---- Source/Modules/lua.cxx | 4 - Source/Modules/main.cxx | 10 +- Source/Modules/modula3.cxx | 4 +- Source/Modules/php4.cxx | 93 +++++----- Source/Modules/python.cxx | 1 - Source/Modules/r.cxx | 17 +- Source/Modules/ruby.cxx | 10 +- Source/Preprocessor/cpp.c | 5 +- Source/Swig/cwrap.c | 3 +- Source/Swig/include.c | 3 +- Source/Swig/misc.c | 23 ++- Source/Swig/naming.c | 6 +- Source/Swig/scanner.c | 4 +- Source/Swig/typeobj.c | 3 +- Source/Swig/typesys.c | 15 +- TODO | 2 +- Tools/WAD/Python/type.c | 2 +- Tools/mkrelease.py | 8 +- configure.in | 15 +- 111 files changed, 759 insertions(+), 484 deletions(-) create mode 100644 Examples/test-suite/keyword_rename.i create mode 100644 Examples/test-suite/lua/li_typemaps_runme.lua create mode 100644 Examples/test-suite/python/keyword_rename_runme.py create mode 100644 Lib/r/rkw.swg diff --git a/ANNOUNCE b/ANNOUNCE index 0fb688344..7c0e95e3f 100644 --- a/ANNOUNCE +++ b/ANNOUNCE @@ -1,10 +1,10 @@ -*** ANNOUNCE: SWIG 1.3.35 (7 April 2008) *** +*** ANNOUNCE: SWIG 1.3.36 (24 June 2008) *** http://www.swig.org -We're pleased to announce SWIG-1.3.35, the latest installment in the -SWIG development effort. SWIG-1.3.35 includes a number of bug fixes +We're pleased to announce SWIG-1.3.36, the latest installment in the +SWIG development effort. SWIG-1.3.36 includes a number of bug fixes and large number of enhancements throughout. What is SWIG? @@ -24,11 +24,11 @@ Availability: ------------- The release is available for download on Sourceforge at - http://prdownloads.sourceforge.net/swig/swig-1.3.35.tar.gz + http://prdownloads.sourceforge.net/swig/swig-1.3.36.tar.gz A Windows version is also available at - http://prdownloads.sourceforge.net/swig/swigwin-1.3.35.zip + http://prdownloads.sourceforge.net/swig/swigwin-1.3.36.zip Release numbers --------------- diff --git a/CHANGES b/CHANGES index fc3018a1d..782849c6f 100644 --- a/CHANGES +++ b/CHANGES @@ -2,6 +2,162 @@ SWIG (Simplified Wrapper and Interface Generator) See CHANGES.current for current version. +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) ============================= @@ -12123,7 +12279,8 @@ Version 1.3.14 (August 12, 2002) with helper functions even if they aren't used. To fix this, a new fragment directive is available. For example: - %fragment("type_helper","header") %{ + (corrected typo in line below - 06/26/2008) + %fragment("type_header","header") %{ void some_helper_function() { ... } diff --git a/CHANGES.current b/CHANGES.current index 27e9925d2..ef3fcca54 100644 --- a/CHANGES.current +++ b/CHANGES.current @@ -1,106 +1,3 @@ Version 1.3.36 (in progress) ============================= -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 - diff --git a/Doc/Manual/Contents.html b/Doc/Manual/Contents.html index 5c7a18eaf..c3197b9dc 100644 --- a/Doc/Manual/Contents.html +++ b/Doc/Manual/Contents.html @@ -380,7 +380,7 @@
  • Typemaps for multiple languages
  • Optimal code generation when returning by value -
  • Multi-argument typemaps +
  • Multi-argument typemaps
  • The run-time type checker
  • Accessing protected members
  • Common customization features diff --git a/Doc/Manual/Java.html b/Doc/Manual/Java.html index 88963caf5..164fc21e7 100644 --- a/Doc/Manual/Java.html +++ b/Doc/Manual/Java.html @@ -85,6 +85,7 @@
  • Director classes
  • Overhead and code bloat
  • Simple directors example +
  • Director threading issues
  • Accessing protected members
  • Common customization features @@ -3450,6 +3451,26 @@ DirectorDerived::upcall_method() invoked. +

    20.5.5 Director threading issues

    + + +

    +Depending on your operating system and version of Java and how you are using threads, you might find the JVM hangs on exit. +There are a couple of solutions to try out. The preferred solution requires jdk-1.4 and later and uses AttachCurrentThreadAsDaemon instead of AttachCurrentThread whenever a call into the JVM is required. This can be enabled by defining the SWIG_JAVA_ATTACH_CURRENT_THREAD_AS_DAEMON macro when compiling the C++ wrapper code. For older JVMs define SWIG_JAVA_NO_DETACH_CURRENT_THREAD instead, to avoid the DetachCurrentThread call but this will result in a memory leak instead. For further details inspect the source code in the java/director.swg library file. +

    + +

    +Macros can be defined on the commandline when compiling your C++ code, or alternatively added to the C++ wrapper file as shown below: +

    + +
    +
    +%insert("runtime") %{
    +#define SWIG_JAVA_NO_DETACH_CURRENT_THREAD
    +%}
    +
    +
    +

    20.6 Accessing protected members

    diff --git a/Doc/Manual/SWIGPlus.html b/Doc/Manual/SWIGPlus.html index faf0b254c..ef7487ff8 100644 --- a/Doc/Manual/SWIGPlus.html +++ b/Doc/Manual/SWIGPlus.html @@ -1153,8 +1153,9 @@ public:

    -This is great for reducing the size of the wrappers, but the caveat is it does not work for the strongly typed languages -which don't have optional arguments in the language, such as C# and Java. +This is great for reducing the size of the wrappers, but the caveat is it does not work for the statically typed languages, +such as C# and Java, +which don't have optional arguments in the language, Another restriction of this feature is that it cannot handle default arguments that are not public. The following example illustrates this:

    diff --git a/Doc/Manual/Sections.html b/Doc/Manual/Sections.html index b7b4798e7..5406f44ea 100644 --- a/Doc/Manual/Sections.html +++ b/Doc/Manual/Sections.html @@ -6,7 +6,7 @@

    SWIG-1.3 Development Documentation

    -Last update : SWIG-1.3.36 (in progress) +Last update : SWIG-1.3.37 (in progress)

    Sections

    diff --git a/Doc/Manual/Typemaps.html b/Doc/Manual/Typemaps.html index e07f9f87e..8f3035dc8 100644 --- a/Doc/Manual/Typemaps.html +++ b/Doc/Manual/Typemaps.html @@ -65,7 +65,7 @@
  • Typemaps for multiple languages
  • Optimal code generation when returning by value -
  • Multi-argument typemaps +
  • Multi-argument typemaps
  • The run-time type checker diff --git a/Examples/Makefile.in b/Examples/Makefile.in index 3edb75f8d..8b9928306 100644 --- a/Examples/Makefile.in +++ b/Examples/Makefile.in @@ -40,8 +40,9 @@ LIBCRYPT = @LIBCRYPT@ SYSLIBS = $(LIBM) $(LIBC) $(LIBCRYPT) LIBPREFIX = -# RUNTOOL is for use as with runtime tools, eg set it to valgrind +# RUNTOOL is for use with runtime tools, eg set it to valgrind RUNTOOL = +# COMPILETOOL is a way to run the compiler under another tool, or more commonly just to stop the compiler executing COMPILETOOL= # X11 options @@ -94,8 +95,6 @@ TK_OPTS = -ltk -ltcl @LIBS@ # Extra Tcl specific dynamic linking options TCL_DLNK = @TCLDYNAMICLINKING@ -TCL_LDSHARED = @TCL_LDSHARED@ -TCL_CXXSHARED = @TCL_CXXSHARED@ TCL_SO = @TCL_SO@ # ----------------------------------------------------------- @@ -135,7 +134,7 @@ wish_cpp: $(SRCS) tcl: $(SRCS) $(SWIG) -tcl8 $(SWIGOPT) $(TCL_SWIGOPTS) $(INTERFACE) $(CC) -c $(CCSHARED) $(CFLAGS) $(SRCS) $(ISRCS) $(INCLUDES) $(TCL_INCLUDE) - $(TCL_LDSHARED) $(CFLAGS) $(OBJS) $(IOBJS) $(TCL_DLNK) $(LIBS) -o $(LIBPREFIX)$(TARGET)$(TCL_SO) + $(LDSHARED) $(CFLAGS) $(OBJS) $(IOBJS) $(TCL_DLNK) $(LIBS) -o $(LIBPREFIX)$(TARGET)$(TCL_SO) # ----------------------------------------------------------- # Build a Tcl7.5 dynamic loadable module for C++ @@ -144,7 +143,7 @@ tcl: $(SRCS) tcl_cpp: $(SRCS) $(SWIG) -tcl8 -c++ $(SWIGOPT) $(TCL_SWIGOPTS) $(INTERFACE) $(CXX) -c $(CCSHARED) $(CFLAGS) $(SRCS) $(CXXSRCS) $(ICXXSRCS) $(INCLUDES) $(TCL_INCLUDE) - $(TCL_CXXSHARED) $(CFLAGS) $(OBJS) $(IOBJS) $(TCL_DLNK) $(LIBS) $(CPP_DLLIBS) -o $(LIBPREFIX)$(TARGET)$(TCL_SO) + $(CXXSHARED) $(CFLAGS) $(OBJS) $(IOBJS) $(TCL_DLNK) $(LIBS) $(CPP_DLLIBS) -o $(LIBPREFIX)$(TARGET)$(TCL_SO) # ----------------------------------------------------------------- # Cleaning the Tcl examples @@ -880,11 +879,11 @@ chicken_static_cpp: $(CXXSRCS) $(CHICKSRCS) chicken: $(SWIG) -chicken $(SWIGOPT) $(INCLUDE) $(INTERFACE) - $(CHICKEN_CSC) -s `echo $(INCLUDES) | sed 's/-I/-C -I/g'` $(CHICKEN_GENERATED_SCHEME) $(SRCS) $(ISRCS) -o $(TARGET)$(SO) + $(COMPILETOOL) $(CHICKEN_CSC) -s `echo $(INCLUDES) | sed 's/-I/-C -I/g'` $(CHICKEN_GENERATED_SCHEME) $(SRCS) $(ISRCS) -o $(TARGET)$(SO) chicken_cpp: $(SWIG) -c++ -chicken $(SWIGOPT) $(INCLUDE) $(INTERFACE) - $(CHICKEN_CSC) -s `echo $(INCLUDES) | sed 's/-I/-C -I/g'` $(CHICKEN_GENERATED_SCHEME) $(SRCS) $(ICXXSRCS) $(CXXSRCS) -o $(TARGET)$(SO) + $(COMPILETOOL) $(CHICKEN_CSC) -s `echo $(INCLUDES) | sed 's/-I/-C -I/g'` $(CHICKEN_GENERATED_SCHEME) $(SRCS) $(ICXXSRCS) $(CXXSRCS) -o $(TARGET)$(SO) chicken_externalhdr: $(SWIG) -chicken -external-runtime $(TARGET) @@ -1078,11 +1077,11 @@ RRSRC = $(INTERFACE:.i=.R) r: $(SRCS) $(SWIG) -r $(SWIGOPT) $(INTERFACE) - +( PKG_LIBS="$(SRCS)" PKG_CPPFLAGS="$(INCLUDES)" $(R) CMD SHLIB -o $(LIBPREFIX)$(TARGET)$(SO) $(ISRCS) ) + +( PKG_LIBS="$(SRCS)" PKG_CPPFLAGS="$(INCLUDES)" $(COMPILETOOL) $(R) CMD SHLIB -o $(LIBPREFIX)$(TARGET)$(SO) $(ISRCS) ) r_cpp: $(CXXSRCS) $(SWIG) -c++ -r $(SWIGOPT) -o $(RCXXSRCS) $(INTERFACE) - +( PKG_LIBS="$(CXXSRCS)" PKG_CPPFLAGS="$(INCLUDES)" $(R) CMD SHLIB -o $(LIBPREFIX)$(TARGET)$(SO) $(RCXXSRCS) ) + +( PKG_LIBS="$(CXXSRCS)" PKG_CPPFLAGS="$(INCLUDES)" $(COMPILETOOL) $(R) CMD SHLIB -o $(LIBPREFIX)$(TARGET)$(SO) $(RCXXSRCS) ) r_clean: rm -f *_wrap* *~ .~* diff --git a/Examples/guile/multimap/example.i b/Examples/guile/multimap/example.i index a1cc0bb67..7337d1e9e 100644 --- a/Examples/guile/multimap/example.i +++ b/Examples/guile/multimap/example.i @@ -20,7 +20,7 @@ extern int gcd(int x, int y); SCM *v; if (!(SCM_NIMP($input) && SCM_VECTORP($input))) { SWIG_exception(SWIG_ValueError, "Expecting a vector"); - return; + return 0; } $1 = SCM_LENGTH($input); if ($1 == 0) { @@ -32,7 +32,7 @@ extern int gcd(int x, int y); if (!(SCM_NIMP(v[i]) && SCM_STRINGP(v[i]))) { free($2); SWIG_exception(SWIG_ValueError, "Vector items must be strings"); - return; + return 0; } $2[i] = SCM_CHARS(v[i]); } diff --git a/Examples/guile/multivalue/example.i b/Examples/guile/multivalue/example.i index abc2a6fbc..135389487 100644 --- a/Examples/guile/multivalue/example.i +++ b/Examples/guile/multivalue/example.i @@ -2,6 +2,12 @@ %module example; +%{ +void divide_l(int a, int b, int *quotient_p, int *remainder_p); +void divide_v(int a, int b, int *quotient_p, int *remainder_p); +void divide_mv(int a, int b, int *quotient_p, int *remainder_p); +%} + /* Multiple values as lists. By default, if more than one value is to be returned, a list of the values is created and returned; to switch back to this behavior, use: */ diff --git a/Examples/lua/arrays/example.c b/Examples/lua/arrays/example.c index 40ed12c79..56c7b19d9 100644 --- a/Examples/lua/arrays/example.c +++ b/Examples/lua/arrays/example.c @@ -16,7 +16,7 @@ void sort_int(int* arr, int len) // ditto doubles int compare_double(const void * a, const void * b) { - return ( *(double*)a - *(double*)b ); + return (int)( *(double*)a - *(double*)b ); } void sort_double(double* arr, int len) diff --git a/Examples/lua/embed2/embed2.c b/Examples/lua/embed2/embed2.c index 07b7a44d2..dac527eb4 100644 --- a/Examples/lua/embed2/embed2.c +++ b/Examples/lua/embed2/embed2.c @@ -11,6 +11,17 @@ We will be using the luaL_dostring()/lua_dostring() function to call into lua */ +/* Deal with Microsoft's attempt at deprecating C standard runtime functions */ +#if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) +# define _CRT_SECURE_NO_DEPRECATE +#endif + +/* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */ +#if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE) +# define _SCL_SECURE_NO_DEPRECATE +#endif + + #include #include @@ -108,7 +119,7 @@ int call_va (lua_State *L,const char *func, const char *sig, ...) { endwhile: /* do the call */ - nres = strlen(sig); /* number of expected results */ + nres = (int)strlen(sig); /* number of expected results */ if (lua_pcall(L, narg, nres, 0) != 0) /* do the call */ { printf("error running function `%s': %s\n",func, lua_tostring(L, -1)); diff --git a/Examples/lua/embed3/embed3.cpp b/Examples/lua/embed3/embed3.cpp index e42401cda..c2424f9af 100644 --- a/Examples/lua/embed3/embed3.cpp +++ b/Examples/lua/embed3/embed3.cpp @@ -5,6 +5,17 @@ passing C++ objects to this function. */ +/* Deal with Microsoft's attempt at deprecating C standard runtime functions */ +#if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) +# define _CRT_SECURE_NO_DEPRECATE +#endif + +/* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */ +#if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE) +# define _SCL_SECURE_NO_DEPRECATE +#endif + + #include #include #include @@ -70,9 +81,6 @@ int call_onEvent(lua_State *L, Event e) { int main(int argc, char* argv[]) { - int ok; - int res; - char str[80]; printf("[C++] Welcome to the simple embedded Lua example v3\n"); printf("[C++] We are in C++\n"); printf("[C++] opening a Lua state & loading the libraries\n"); diff --git a/Examples/lua/owner/example.cxx b/Examples/lua/owner/example.cxx index 6e4091327..d6caeef15 100644 --- a/Examples/lua/owner/example.cxx +++ b/Examples/lua/owner/example.cxx @@ -54,14 +54,14 @@ void ShapeOwner::add(Shape* ptr) // this method takes ownership of the object Shape* ShapeOwner::get(int idx) // this pointer is still owned by the class (assessor) { - if (idx<0 || idx>=shapes.size()) + if (idx < 0 || idx >= static_cast(shapes.size())) return NULL; return shapes[idx]; } Shape* ShapeOwner::remove(int idx) // this method returns memory which must be deleted { - if (idx<0 || idx>=shapes.size()) + if (idx < 0 || idx >= static_cast(shapes.size())) return NULL; Shape* ptr=shapes[idx]; shapes.erase(shapes.begin()+idx); diff --git a/Examples/perl5/import/base.h b/Examples/perl5/import/base.h index be3cdef7d..5a266f68c 100644 --- a/Examples/perl5/import/base.h +++ b/Examples/perl5/import/base.h @@ -3,7 +3,7 @@ class Base { public: Base() { }; - ~Base() { }; + virtual ~Base() { }; virtual void A() { printf("I'm Base::A\n"); } diff --git a/Examples/perl5/multiple_inheritance/example.h b/Examples/perl5/multiple_inheritance/example.h index ce7dfe6a7..a8f544898 100644 --- a/Examples/perl5/multiple_inheritance/example.h +++ b/Examples/perl5/multiple_inheritance/example.h @@ -7,26 +7,25 @@ using namespace std; class Bar { public: - virtual void bar () - { - cout << "bar" << endl; - } + virtual void bar () { + cout << "bar" << endl; + } + virtual ~Bar() {} }; class Foo { public: - virtual void foo () - { - cout << "foo" << endl; - } + virtual void foo () { + cout << "foo" << endl; + } + virtual ~Foo() {} }; class Foo_Bar : public Foo, public Bar { public: - virtual void fooBar () - { - cout << "foobar" << endl; - } + virtual void fooBar () { + cout << "foobar" << endl; + } }; diff --git a/Examples/ruby/class/example.dsp b/Examples/ruby/class/example.dsp index 49c480575..9a26322ec 100644 --- a/Examples/ruby/class/example.dsp +++ b/Examples/ruby/class/example.dsp @@ -123,7 +123,7 @@ SOURCE=.\example.i InputPath=.\example.i InputName=example -"$(InputName)_wrap.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" +"$(InputName)_wrap.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" echo In order to function correctly, please ensure the following environment variables are correctly set: echo RUBY_INCLUDE: %RUBY_INCLUDE% echo RUBY_LIB: %RUBY_LIB% @@ -138,7 +138,7 @@ InputName=example InputPath=.\example.i InputName=example -"$(InputName)_wrap.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" +"$(InputName)_wrap.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" echo In order to function correctly, please ensure the following environment variables are correctly set: echo RUBY_INCLUDE: %RUBY_INCLUDE% echo RUBY_LIB: %RUBY_LIB% diff --git a/Examples/ruby/free_function/example.cxx b/Examples/ruby/free_function/example.cxx index 9e0d24b1a..402a947e9 100644 --- a/Examples/ruby/free_function/example.cxx +++ b/Examples/ruby/free_function/example.cxx @@ -23,7 +23,7 @@ Zoo::~Zoo() IterType iter = this->animals.begin(); IterType end = this->animals.end(); - for(iter; iter != end; ++iter) + for(; iter != end; ++iter) { Animal* animal = *iter; delete animal; diff --git a/Examples/ruby/free_function/example.dsp b/Examples/ruby/free_function/example.dsp index 49c480575..9a26322ec 100644 --- a/Examples/ruby/free_function/example.dsp +++ b/Examples/ruby/free_function/example.dsp @@ -123,7 +123,7 @@ SOURCE=.\example.i InputPath=.\example.i InputName=example -"$(InputName)_wrap.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" +"$(InputName)_wrap.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" echo In order to function correctly, please ensure the following environment variables are correctly set: echo RUBY_INCLUDE: %RUBY_INCLUDE% echo RUBY_LIB: %RUBY_LIB% @@ -138,7 +138,7 @@ InputName=example InputPath=.\example.i InputName=example -"$(InputName)_wrap.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" +"$(InputName)_wrap.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" echo In order to function correctly, please ensure the following environment variables are correctly set: echo RUBY_INCLUDE: %RUBY_INCLUDE% echo RUBY_LIB: %RUBY_LIB% diff --git a/Examples/ruby/import/bar.dsp b/Examples/ruby/import/bar.dsp index e897f8d5c..dd09ca021 100644 --- a/Examples/ruby/import/bar.dsp +++ b/Examples/ruby/import/bar.dsp @@ -115,7 +115,7 @@ SOURCE=.\bar.i InputPath=.\bar.i InputName=bar -"$(InputName)_wrap.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" +"$(InputName)_wrap.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" echo In order to function correctly, please ensure the following environment variables are correctly set: echo RUBY_INCLUDE: %RUBY_INCLUDE% echo RUBY_LIB: %RUBY_LIB% @@ -130,7 +130,7 @@ InputName=bar InputPath=.\bar.i InputName=bar -"$(InputName)_wrap.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" +"$(InputName)_wrap.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" echo In order to function correctly, please ensure the following environment variables are correctly set: echo RUBY_INCLUDE: %RUBY_INCLUDE% echo RUBY_LIB: %RUBY_LIB% diff --git a/Examples/ruby/import/base.dsp b/Examples/ruby/import/base.dsp index 45d2fe2ea..2bd4fa243 100644 --- a/Examples/ruby/import/base.dsp +++ b/Examples/ruby/import/base.dsp @@ -115,7 +115,7 @@ SOURCE=.\base.i InputPath=.\base.i InputName=base -"$(InputName)_wrap.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" +"$(InputName)_wrap.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" echo In order to function correctly, please ensure the following environment variables are correctly set: echo RUBY_INCLUDE: %RUBY_INCLUDE% echo RUBY_LIB: %RUBY_LIB% @@ -130,7 +130,7 @@ InputName=base InputPath=.\base.i InputName=base -"$(InputName)_wrap.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" +"$(InputName)_wrap.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" echo In order to function correctly, please ensure the following environment variables are correctly set: echo RUBY_INCLUDE: %RUBY_INCLUDE% echo RUBY_LIB: %RUBY_LIB% diff --git a/Examples/ruby/import/foo.dsp b/Examples/ruby/import/foo.dsp index 2dfba9d60..2a764bbd7 100644 --- a/Examples/ruby/import/foo.dsp +++ b/Examples/ruby/import/foo.dsp @@ -115,7 +115,7 @@ SOURCE=.\foo.i InputPath=.\foo.i InputName=foo -"$(InputName)_wrap.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" +"$(InputName)_wrap.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" echo In order to function correctly, please ensure the following environment variables are correctly set: echo RUBY_INCLUDE: %RUBY_INCLUDE% echo RUBY_LIB: %RUBY_LIB% @@ -130,7 +130,7 @@ InputName=foo InputPath=.\foo.i InputName=foo -"$(InputName)_wrap.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" +"$(InputName)_wrap.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" echo In order to function correctly, please ensure the following environment variables are correctly set: echo RUBY_INCLUDE: %RUBY_INCLUDE% echo RUBY_LIB: %RUBY_LIB% diff --git a/Examples/ruby/import/spam.dsp b/Examples/ruby/import/spam.dsp index 0530b7303..d2d7158bb 100644 --- a/Examples/ruby/import/spam.dsp +++ b/Examples/ruby/import/spam.dsp @@ -115,7 +115,7 @@ SOURCE=.\spam.i InputPath=.\spam.i InputName=spam -"$(InputName)_wrap.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" +"$(InputName)_wrap.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" echo In order to function correctly, please ensure the following environment variables are correctly set: echo RUBY_INCLUDE: %RUBY_INCLUDE% echo RUBY_LIB: %RUBY_LIB% @@ -130,7 +130,7 @@ InputName=spam InputPath=.\spam.i InputName=spam -"$(InputName)_wrap.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" +"$(InputName)_wrap.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" echo In order to function correctly, please ensure the following environment variables are correctly set: echo RUBY_INCLUDE: %RUBY_INCLUDE% echo RUBY_LIB: %RUBY_LIB% diff --git a/Examples/ruby/mark_function/example.dsp b/Examples/ruby/mark_function/example.dsp index 49c480575..9a26322ec 100644 --- a/Examples/ruby/mark_function/example.dsp +++ b/Examples/ruby/mark_function/example.dsp @@ -123,7 +123,7 @@ SOURCE=.\example.i InputPath=.\example.i InputName=example -"$(InputName)_wrap.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" +"$(InputName)_wrap.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" echo In order to function correctly, please ensure the following environment variables are correctly set: echo RUBY_INCLUDE: %RUBY_INCLUDE% echo RUBY_LIB: %RUBY_LIB% @@ -138,7 +138,7 @@ InputName=example InputPath=.\example.i InputName=example -"$(InputName)_wrap.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" +"$(InputName)_wrap.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" echo In order to function correctly, please ensure the following environment variables are correctly set: echo RUBY_INCLUDE: %RUBY_INCLUDE% echo RUBY_LIB: %RUBY_LIB% diff --git a/Examples/tcl/import/base.h b/Examples/tcl/import/base.h index be3cdef7d..5a266f68c 100644 --- a/Examples/tcl/import/base.h +++ b/Examples/tcl/import/base.h @@ -3,7 +3,7 @@ class Base { public: Base() { }; - ~Base() { }; + virtual ~Base() { }; virtual void A() { printf("I'm Base::A\n"); } diff --git a/Examples/test-suite/apply_signed_char.i b/Examples/test-suite/apply_signed_char.i index ff1f1d83f..c0fa00cfe 100644 --- a/Examples/test-suite/apply_signed_char.i +++ b/Examples/test-suite/apply_signed_char.i @@ -31,5 +31,7 @@ const char memberconstchar; virtual ~DirectorTest() {} + private: + DirectorTest& operator=(const DirectorTest &); }; %} diff --git a/Examples/test-suite/bools.i b/Examples/test-suite/bools.i index 40e8989bd..7b94fcf88 100644 --- a/Examples/test-suite/bools.i +++ b/Examples/test-suite/bools.i @@ -57,6 +57,8 @@ struct BoolStructure { m_rbool(m_bool2), m_const_pbool(m_pbool), m_const_rbool(m_rbool) {} +private: + BoolStructure& operator=(const BoolStructure &); }; %} diff --git a/Examples/test-suite/char_strings.i b/Examples/test-suite/char_strings.i index a91afaded..b06eba773 100644 --- a/Examples/test-suite/char_strings.i +++ b/Examples/test-suite/char_strings.i @@ -10,7 +10,7 @@ below. %warnfilter(SWIGWARN_TYPEMAP_CHARLEAK_MSG) global_const_char; // Setting a const char * variable may leak memory. %{ -#define OTHERLAND_MSG "Little message from the the safe world." +#define OTHERLAND_MSG "Little message from the safe world." #define CPLUSPLUS_MSG "A message from the deep dark world of C++, where anything is possible." static char *global_str = NULL; const int UINT_DIGITS = 10; // max unsigned int is 4294967295 diff --git a/Examples/test-suite/chicken/Makefile.in b/Examples/test-suite/chicken/Makefile.in index 0ac37d16a..ef6d7056c 100644 --- a/Examples/test-suite/chicken/Makefile.in +++ b/Examples/test-suite/chicken/Makefile.in @@ -40,7 +40,7 @@ SWIGOPT += -nounit $(setup) +$(swig_and_compile_c) $(run_testcase) - +if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(PROXYSUFFIX) ]; then ( \ + if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(PROXYSUFFIX) ]; then ( \ $(MAKE) $*.cproxy; ) \ fi; @@ -54,7 +54,7 @@ SWIGOPT += -nounit %.externaltest: $(setup) - $(swig_and_compile_external) + +$(swig_and_compile_external) $(run_testcase) # Runs the testcase. A testcase is only run if @@ -69,21 +69,21 @@ run_testcase = \ %.cppproxy: SWIGOPT += -proxy %.cppproxy: SCRIPTSUFFIX = $(PROXYSUFFIX) %.cppproxy: - echo "Checking testcase $* (with run test) under chicken with -proxy" - $(swig_and_compile_cpp) + echo "$(ACTION)ing testcase $* (with run test) under chicken with -proxy" + +$(swig_and_compile_cpp) $(run_testcase) %.cproxy: SWIGOPT += -proxy %.cproxy: SCRIPTSUFFIX = $(PROXYSUFFIX) %.cproxy: - echo "Checking testcase $* (with run test) under chicken with -proxy" + echo "$(ACTION)ing testcase $* (with run test) under chicken with -proxy" +$(swig_and_compile_c) $(run_testcase) %.multiproxy: SWIGOPT += -proxy -noclosuses %.multiproxy: SCRIPTSUFFIX = $(PROXYSUFFIX) %.multiproxy: - echo "Checking testcase $* (with run test) under chicken with -proxy" + echo "$(ACTION)ing testcase $* (with run test) under chicken with -proxy" +$(swig_and_compile_multi_cpp) $(run_testcase) diff --git a/Examples/test-suite/common.mk b/Examples/test-suite/common.mk index 3607a4253..0a3a0858a 100644 --- a/Examples/test-suite/common.mk +++ b/Examples/test-suite/common.mk @@ -202,6 +202,7 @@ CPP_TEST_CASES += \ inherit_target_language \ inherit_void_arg \ inline_initializer \ + keyword_rename \ kind \ langobj \ li_attribute \ @@ -422,6 +423,7 @@ C_TEST_CASES += \ immutable \ inctest \ integers \ + keyword_rename \ lextype \ li_carrays \ li_cdata \ diff --git a/Examples/test-suite/constant_pointers.i b/Examples/test-suite/constant_pointers.i index 367baf49c..5bd2fd533 100644 --- a/Examples/test-suite/constant_pointers.i +++ b/Examples/test-suite/constant_pointers.i @@ -46,6 +46,8 @@ public: int* array_member1[ARRAY_SIZE]; ParametersTest* array_member2[ARRAY_SIZE]; MemberVariablesTest() : member3(NULL), member4(NULL) {} +private: + MemberVariablesTest& operator=(const MemberVariablesTest&); }; void foo(const int *const i) {} @@ -69,6 +71,8 @@ public: void ret6(int*& a) {} int*& ret7() {return GlobalIntPtr;} ReturnValuesTest() : int3(NULL) {} +private: + ReturnValuesTest& operator=(const ReturnValuesTest&); }; const int* globalRet1() {return &GlobalInt;} @@ -100,6 +104,8 @@ int* const globalRet2() {return &GlobalInt;} A* ap; const A* cap; Acptr acptr; + private: + B& operator=(const B&); }; const B* bar(const B* b) { diff --git a/Examples/test-suite/cpp_basic.i b/Examples/test-suite/cpp_basic.i index becf84708..a247dd268 100644 --- a/Examples/test-suite/cpp_basic.i +++ b/Examples/test-suite/cpp_basic.i @@ -55,6 +55,8 @@ class Bar { Foo *testFoo(int a, Foo *f) { return new Foo(2 * a + (f ? f->num : 0) + fval.num); } +private: + Bar& operator=(const Bar&); }; %} diff --git a/Examples/test-suite/csharp/Makefile.in b/Examples/test-suite/csharp/Makefile.in index 44a1b3675..5fd576ed8 100644 --- a/Examples/test-suite/csharp/Makefile.in +++ b/Examples/test-suite/csharp/Makefile.in @@ -51,9 +51,9 @@ intermediary_classname.customtest: # Makes a directory for the testcase if it does not exist setup = \ if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \ - echo "Checking testcase $* (with run test) under $(LANGUAGE)" ; \ + echo "$(ACTION)ing testcase $* (with run test) under $(LANGUAGE)" ; \ else \ - echo "Checking testcase $* under $(LANGUAGE)" ; \ + echo "$(ACTION)ing testcase $* under $(LANGUAGE)" ; \ fi; \ if [ ! -d $* ]; then \ mkdir $*; \ diff --git a/Examples/test-suite/csharp/char_strings_runme.cs b/Examples/test-suite/csharp/char_strings_runme.cs index a1e878016..a8907fb16 100644 --- a/Examples/test-suite/csharp/char_strings_runme.cs +++ b/Examples/test-suite/csharp/char_strings_runme.cs @@ -5,7 +5,7 @@ using char_stringsNamespace; public class char_strings_runme { private static string CPLUSPLUS_MSG = "A message from the deep dark world of C++, where anything is possible."; - private static string OTHERLAND_MSG = "Little message from the the safe world."; + private static string OTHERLAND_MSG = "Little message from the safe world."; public static void Main() { diff --git a/Examples/test-suite/enum_thorough.i b/Examples/test-suite/enum_thorough.i index 4aa0613f2..31e3e2105 100644 --- a/Examples/test-suite/enum_thorough.i +++ b/Examples/test-suite/enum_thorough.i @@ -81,6 +81,8 @@ struct SpeedClass { const colour myColour2; speedtd1 mySpeedtd1; SpeedClass() : myColour2(red), mySpeedtd1(slow) { } +private: + SpeedClass& operator=(const SpeedClass&); }; int speedTest0(int s) { return s; } diff --git a/Examples/test-suite/fvirtual.i b/Examples/test-suite/fvirtual.i index 074202bee..af189ed1f 100644 --- a/Examples/test-suite/fvirtual.i +++ b/Examples/test-suite/fvirtual.i @@ -10,11 +10,11 @@ virtual ~Node() {} }; - class Switch : public Node { + class NodeSwitch : public Node { public : virtual int addChild( Node *child ) { return 2; } // This was hidden with -fvirtual virtual int addChild( Node *child, bool value ) { return 3; } - virtual ~Switch() {} + virtual ~NodeSwitch() {} }; %} diff --git a/Examples/test-suite/guilescm/Makefile.in b/Examples/test-suite/guilescm/Makefile.in index 285426ee8..04de236db 100644 --- a/Examples/test-suite/guilescm/Makefile.in +++ b/Examples/test-suite/guilescm/Makefile.in @@ -21,9 +21,9 @@ run_testcase = \ setup = \ if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \ - echo "Checking testcase $* (with run test) under $(LANGUAGE) (with SCM API)" ; \ + echo "$(ACTION)ing testcase $* (with run test) under $(LANGUAGE) (with SCM API)" ; \ else \ - echo "Checking testcase $* under $(LANGUAGE) (with SCM API)" ; \ + echo "$(ACTION)ing testcase $* under $(LANGUAGE) (with SCM API)" ; \ fi; swig_and_compile_multi_cpp = \ @@ -43,9 +43,9 @@ swig_and_compile_multi_cpp = \ # Same as setup and run_testcase, but without the SCRIPTPREFIX (so the runme comes from the guilescm directory) local_setup = \ if [ -f $(srcdir)/$*$(SCRIPTSUFFIX) ]; then \ - echo "Checking testcase $* (with run test) under $(LANGUAGE) (with SCM API)" ; \ + echo "$(ACTION)ing testcase $* (with run test) under $(LANGUAGE) (with SCM API)" ; \ else \ - echo "Checking testcase $* under $(LANGUAGE) (with SCM API)" ; \ + echo "$(ACTION)ing testcase $* under $(LANGUAGE) (with SCM API)" ; \ fi; local_run_testcase = \ diff --git a/Examples/test-suite/java/Makefile.in b/Examples/test-suite/java/Makefile.in index 53816f6d0..ace8dee86 100644 --- a/Examples/test-suite/java/Makefile.in +++ b/Examples/test-suite/java/Makefile.in @@ -57,9 +57,9 @@ SWIGOPT += -package $* # Makes a directory for the testcase if it does not exist setup = \ if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \ - echo "Checking testcase $* (with run test) under $(LANGUAGE)" ; \ + echo "$(ACTION)ing testcase $* (with run test) under $(LANGUAGE)" ; \ else \ - echo "Checking testcase $* under $(LANGUAGE)" ; \ + echo "$(ACTION)ing testcase $* under $(LANGUAGE)" ; \ fi; \ if [ ! -d $* ]; then \ mkdir $*; \ diff --git a/Examples/test-suite/java/char_strings_runme.java b/Examples/test-suite/java/char_strings_runme.java index 2e62080f5..2c71d3ea7 100644 --- a/Examples/test-suite/java/char_strings_runme.java +++ b/Examples/test-suite/java/char_strings_runme.java @@ -12,7 +12,7 @@ public class char_strings_runme { } private static String CPLUSPLUS_MSG = "A message from the deep dark world of C++, where anything is possible."; - private static String OTHERLAND_MSG = "Little message from the the safe world."; + private static String OTHERLAND_MSG = "Little message from the safe world."; public static void main(String argv[]) { diff --git a/Examples/test-suite/java_typemaps_proxy.i b/Examples/test-suite/java_typemaps_proxy.i index 5a1e61bb2..e315a36b5 100644 --- a/Examples/test-suite/java_typemaps_proxy.i +++ b/Examples/test-suite/java_typemaps_proxy.i @@ -119,6 +119,8 @@ public: void const_member_method(const ConstWithout *p) const {} const ConstWithout * const_var; const ConstWithout * const var_const; +private: + ConstWithout& operator=(const ConstWithout &); }; const ConstWithout * global_constwithout = 0; void global_method_constwithout(const ConstWithout *p) {} diff --git a/Examples/test-suite/keyword_rename.i b/Examples/test-suite/keyword_rename.i new file mode 100644 index 000000000..da9328868 --- /dev/null +++ b/Examples/test-suite/keyword_rename.i @@ -0,0 +1,32 @@ +/* + * Test reserved keyword renaming + */ + +%module keyword_rename + +#pragma SWIG nowarn=SWIGWARN_PARSE_KEYWORD + +%inline %{ + +#define KW(x, y) int x (int y) { return y; } + +/* Python keywords */ +KW(in, except) +KW(except, in) +KW(pass, in) + +/* Perl keywords */ +KW(tie, die) +KW(use, next) + +/* Java keywords */ +KW(implements, native) +KW(synchronized, final) + +/* C# Keywords */ +KW(string, out) +struct sealed {int i;}; + +%} + + diff --git a/Examples/test-suite/li_std_string.i b/Examples/test-suite/li_std_string.i index 8c2f1b857..2d0b7503d 100644 --- a/Examples/test-suite/li_std_string.i +++ b/Examples/test-suite/li_std_string.i @@ -129,7 +129,7 @@ public: %} %inline %{ - std::string empty() { + std::string stdstring_empty() { return std::string(); } diff --git a/Examples/test-suite/lua/li_typemaps_runme.lua b/Examples/test-suite/lua/li_typemaps_runme.lua new file mode 100644 index 000000000..77aeb54e4 --- /dev/null +++ b/Examples/test-suite/lua/li_typemaps_runme.lua @@ -0,0 +1,40 @@ +require("import") -- the import fn +import("li_typemaps") -- import code + +-- catch "undefined" global variables +setmetatable(getfenv(),{__index=function (t,i) error("undefined global variable `"..i.."'",2) end}) + +-- Check double INPUT typemaps +assert(li_typemaps.in_double(22.22) == 22.22) +assert(li_typemaps.inr_double(22.22) == 22.22) + +-- Check double OUTPUT typemaps +assert(li_typemaps.out_double(22.22) == 22.22) +assert(li_typemaps.outr_double(22.22) == 22.22) + +-- Check double INOUT typemaps +assert(li_typemaps.inout_double(22.22) == 22.22) +assert(li_typemaps.inoutr_double(22.22) == 22.22) + +-- check long long +assert(li_typemaps.in_ulonglong(20)==20) +assert(li_typemaps.inr_ulonglong(20)==20) +assert(li_typemaps.out_ulonglong(20)==20) +assert(li_typemaps.outr_ulonglong(20)==20) +assert(li_typemaps.inout_ulonglong(20)==20) +assert(li_typemaps.inoutr_ulonglong(20)==20) + +-- check bools +assert(li_typemaps.in_bool(true)==true) +assert(li_typemaps.inr_bool(false)==false) +assert(li_typemaps.out_bool(true)==true) +assert(li_typemaps.outr_bool(false)==false) +assert(li_typemaps.inout_bool(true)==true) +assert(li_typemaps.inoutr_bool(false)==false) + +-- the others +a,b=li_typemaps.inoutr_int2(1,2) +assert(a==1 and b==2) + +f,i=li_typemaps.out_foo(10) +assert(f.a==10 and i==20) diff --git a/Examples/test-suite/minherit.i b/Examples/test-suite/minherit.i index aba299387..24092b6c6 100644 --- a/Examples/test-suite/minherit.i +++ b/Examples/test-suite/minherit.i @@ -6,7 +6,7 @@ %module(ruby_minherit="1") minherit -#if defined(SWIGPYTHON) || defined(SWIGRUBY) || defined(SWIGOCAML) || defined(SWIGOCTAVE) +#if defined(SWIGPYTHON) || defined(SWIGRUBY) || defined(SWIGOCAML) || defined(SWIGOCTAVE) || defined(SWIGPERL) %inline %{ diff --git a/Examples/test-suite/octave/fvirtual_runme.m b/Examples/test-suite/octave/fvirtual_runme.m index 06c6e7ccb..e755a559a 100644 --- a/Examples/test-suite/octave/fvirtual_runme.m +++ b/Examples/test-suite/octave/fvirtual_runme.m @@ -1,6 +1,6 @@ fvirtual -sw = Switch(); +sw = NodeSwitch(); n = Node(); i = sw.addChild(n); diff --git a/Examples/test-suite/octave/li_std_string_runme.m b/Examples/test-suite/octave/li_std_string_runme.m index 1c24ac344..fa0e260e0 100644 --- a/Examples/test-suite/octave/li_std_string_runme.m +++ b/Examples/test-suite/octave/li_std_string_runme.m @@ -148,7 +148,7 @@ if (s != "hellohello") endif -if (li_std_string.empty() != "") +if (li_std_string.stdstring_empty() != "") error endif diff --git a/Examples/test-suite/perl5/li_std_string_runme.pl b/Examples/test-suite/perl5/li_std_string_runme.pl index 0ee11bdc7..9ec7dd08c 100644 --- a/Examples/test-suite/perl5/li_std_string_runme.pl +++ b/Examples/test-suite/perl5/li_std_string_runme.pl @@ -98,7 +98,7 @@ SKIP: { is($gen1->testl("9234567890121111113"), "9234567890121111114", "ulonglong big number"); -is(li_std_string::empty(), "", "empty"); +is(li_std_string::stdstring_empty(), "", "stdstring_empty"); is(li_std_string::c_empty(), "", "c_empty"); @@ -110,4 +110,4 @@ is(li_std_string::get_null(li_std_string::c_null()), undef, "c_empty"); is(li_std_string::get_null(li_std_string::c_empty()), "non-null", "c_empty"); -is(li_std_string::get_null(li_std_string::empty()), "non-null", "c_empty"); +is(li_std_string::get_null(li_std_string::stdstring_empty()), "non-null", "stdstring_empty"); diff --git a/Examples/test-suite/perl5/run-perl-test.pl b/Examples/test-suite/perl5/run-perl-test.pl index f0e1b0288..106bf002b 100755 --- a/Examples/test-suite/perl5/run-perl-test.pl +++ b/Examples/test-suite/perl5/run-perl-test.pl @@ -7,7 +7,7 @@ use strict; my $command = shift @ARGV; -my $output = `perl $command 2>&1`; +my $output = `$^X $command 2>&1`; die "SWIG Perl test failed: \n\n$output\n" if $?; diff --git a/Examples/test-suite/php4/Makefile.in b/Examples/test-suite/php4/Makefile.in index dbd239964..2e14ef9a2 100644 --- a/Examples/test-suite/php4/Makefile.in +++ b/Examples/test-suite/php4/Makefile.in @@ -42,17 +42,17 @@ missingtests: missingcpptests missingctests %.cpptest: $(setup) +$(swig_and_compile_cpp) - $(run_testcase) + +$(run_testcase) %.ctest: $(setup) +$(swig_and_compile_c) - $(run_testcase) + +$(run_testcase) %.multicpptest: $(setup) +$(swig_and_compile_multi_cpp) - $(run_testcase) + +$(run_testcase) # Runs the testcase. A testcase is only run if # a file is found which has _runme.php4 appended after the testcase name. diff --git a/Examples/test-suite/python/fvirtual_runme.py b/Examples/test-suite/python/fvirtual_runme.py index e06ab5b4f..ada3313de 100644 --- a/Examples/test-suite/python/fvirtual_runme.py +++ b/Examples/test-suite/python/fvirtual_runme.py @@ -1,6 +1,6 @@ from fvirtual import * -sw = Switch() +sw = NodeSwitch() n = Node() i = sw.addChild(n); diff --git a/Examples/test-suite/python/keyword_rename_runme.py b/Examples/test-suite/python/keyword_rename_runme.py new file mode 100644 index 000000000..5646ce7d6 --- /dev/null +++ b/Examples/test-suite/python/keyword_rename_runme.py @@ -0,0 +1,4 @@ +#!/usr/bin/env python +import keyword_rename +keyword_rename._in(1) +keyword_rename._except(1) diff --git a/Examples/test-suite/python/li_std_string_runme.py b/Examples/test-suite/python/li_std_string_runme.py index ed79718d2..c0dae1e25 100644 --- a/Examples/test-suite/python/li_std_string_runme.py +++ b/Examples/test-suite/python/li_std_string_runme.py @@ -121,7 +121,7 @@ if s != "hellohello": raise RuntimeError -if li_std_string.empty() != "": +if li_std_string.stdstring_empty() != "": raise RuntimeError diff --git a/Examples/test-suite/r/Makefile.in b/Examples/test-suite/r/Makefile.in index 0a1b3567e..70dd62ec5 100644 --- a/Examples/test-suite/r/Makefile.in +++ b/Examples/test-suite/r/Makefile.in @@ -42,7 +42,7 @@ run_testcase = \ env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH PATH=.:"$$PATH" \ $(RUNTOOL) $(RUNR) $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ;) \ else \ - ($(RUNR) $(srcdir)/$(SCRIPTPREFIX)$*$(WRAPSUFFIX);) \ + ($(RUNTOOL) $(RUNR) $(srcdir)/$(SCRIPTPREFIX)$*$(WRAPSUFFIX);) \ fi; run_multitestcase = \ @@ -51,7 +51,7 @@ run_multitestcase = \ env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH PATH=.:"$$PATH" \ $(RUNTOOL) $(RUNR) $(srcdir)/$(SCRIPTPREFIX)$${f}$(SCRIPTSUFFIX) ;) \ else \ - ($(RUNR) $(srcdir)/$(SCRIPTPREFIX)$${f}$(WRAPSUFFIX);) \ + ($(RUNTOOL) $(RUNR) $(srcdir)/$(SCRIPTPREFIX)$${f}$(WRAPSUFFIX);) \ fi; \ done # Clean diff --git a/Examples/test-suite/ruby/li_std_string_runme.rb b/Examples/test-suite/ruby/li_std_string_runme.rb index f572573bc..dc85b5dab 100644 --- a/Examples/test-suite/ruby/li_std_string_runme.rb +++ b/Examples/test-suite/ruby/li_std_string_runme.rb @@ -124,7 +124,7 @@ if (s != "hellohello") end -if (empty() != "") +if (stdstring_empty() != "") raise RuntimeError end diff --git a/Examples/test-suite/samename.i b/Examples/test-suite/samename.i index 1e9645e70..819cb4abd 100644 --- a/Examples/test-suite/samename.i +++ b/Examples/test-suite/samename.i @@ -1,6 +1,15 @@ %module samename -%inline { +#if !(defined(SWIGCSHARP) || defined(SWIGJAVA)) +class samename { + public: + void do_something() { + // ... + } +}; +#endif + +%{ class samename { public: @@ -9,5 +18,5 @@ class samename { } }; -} +%} diff --git a/Examples/test-suite/template_int_const.i b/Examples/test-suite/template_int_const.i index 37b1cf998..e69a53c4f 100644 --- a/Examples/test-suite/template_int_const.i +++ b/Examples/test-suite/template_int_const.i @@ -10,7 +10,7 @@ static const Polarization polarization = UnaryPolarization; }; template - struct Interface + struct Interface_ { }; @@ -26,16 +26,16 @@ }; %} -%template(Interface_UP) Interface; +%template(Interface_UP) Interface_; %template(Module_1) Module<1>; %inline %{ struct ExtInterface1 : - Interface // works + Interface_ // works { }; struct ExtInterface2 : - Interface // doesn't work + Interface_ // doesn't work { }; struct ExtModule1 : diff --git a/Examples/test-suite/template_typedef_rec.i b/Examples/test-suite/template_typedef_rec.i index 83fe2104a..abdf11382 100644 --- a/Examples/test-suite/template_typedef_rec.i +++ b/Examples/test-suite/template_typedef_rec.i @@ -16,7 +16,7 @@ public: template -class ArrayIterator +class ArrayIterator_ { public: typedef test_Array::intT intT; @@ -38,8 +38,8 @@ class ArrayPrimitiveT public: typedef T ValueT; typedef T valueT; - typedef ArrayIterator Iterator; - typedef ArrayIterator ConstIterator; + typedef ArrayIterator_ Iterator; + typedef ArrayIterator_ ConstIterator; typedef ArrayReverseIterator ReverseIterator; typedef ArrayReverseIterator ConstReverseIterator; }; diff --git a/Examples/test-suite/typemap_namespace.i b/Examples/test-suite/typemap_namespace.i index d30a4ddb1..5375c43b6 100644 --- a/Examples/test-suite/typemap_namespace.i +++ b/Examples/test-suite/typemap_namespace.i @@ -27,7 +27,7 @@ namespace Foo { %typemap(javaout) Str1 * = char *; #endif %typemap(in) Str1 * = char *; -#if !(defined(SWIGCSHARP) || defined(SWIGLUA)) +#if !(defined(SWIGCSHARP) || defined(SWIGLUA) || defined(SWIGPHP)) %typemap(freearg) Str1 * = char *; #endif %typemap(typecheck) Str1 * = char *; diff --git a/Lib/chicken/chickenkw.swg b/Lib/chicken/chickenkw.swg index f01faf14f..d2c26c74c 100644 --- a/Lib/chicken/chickenkw.swg +++ b/Lib/chicken/chickenkw.swg @@ -3,7 +3,7 @@ /* Warnings for certain CHICKEN keywords. From Section 7.1.1 of Revised^5 Report on the Algorithmic Language Scheme */ -#define CHICKENKW(x) %namewarn("314:" #x " is a R^5RS syntatic keyword") #x +#define CHICKENKW(x) %namewarn("314: '" #x "' is a R^5RS syntatic keyword") #x CHICKENKW(else); CHICKENKW(=>); diff --git a/Lib/csharp/csharphead.swg b/Lib/csharp/csharphead.swg index 7938dee04..ffff70372 100644 --- a/Lib/csharp/csharphead.swg +++ b/Lib/csharp/csharphead.swg @@ -73,7 +73,7 @@ static SWIG_CSharpExceptionArgument_t SWIG_csharp_exceptions_argument[] = { static void SWIGUNUSED SWIG_CSharpSetPendingException(SWIG_CSharpExceptionCodes code, const char *msg) { SWIG_CSharpExceptionCallback_t callback = SWIG_csharp_exceptions[SWIG_CSharpApplicationException].callback; - if (code >=0 && (size_t)code < sizeof(SWIG_csharp_exceptions)/sizeof(SWIG_CSharpException_t)) { + if ((size_t)code < sizeof(SWIG_csharp_exceptions)/sizeof(SWIG_CSharpException_t)) { callback = SWIG_csharp_exceptions[code].callback; } callback(msg); @@ -81,7 +81,7 @@ static void SWIGUNUSED SWIG_CSharpSetPendingException(SWIG_CSharpExceptionCodes static void SWIGUNUSED SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpExceptionArgumentCodes code, const char *msg, const char *param_name) { SWIG_CSharpExceptionArgumentCallback_t callback = SWIG_csharp_exceptions_argument[SWIG_CSharpArgumentException].callback; - if (code >=0 && (size_t)code < sizeof(SWIG_csharp_exceptions_argument)/sizeof(SWIG_CSharpExceptionArgument_t)) { + if ((size_t)code < sizeof(SWIG_csharp_exceptions_argument)/sizeof(SWIG_CSharpExceptionArgument_t)) { callback = SWIG_csharp_exceptions_argument[code].callback; } callback(msg, param_name); diff --git a/Lib/csharp/csharpkw.swg b/Lib/csharp/csharpkw.swg index c96042d2d..9a6d979f1 100644 --- a/Lib/csharp/csharpkw.swg +++ b/Lib/csharp/csharpkw.swg @@ -2,7 +2,7 @@ #define CSHARP_CSHARPKW_SWG_ /* Warnings for C# keywords */ -#define CSHARPKW(x) %namewarn("314:" #x " is a csharp keyword") #x +#define CSHARPKW(x) %keywordwarn("'" `x` "' is a C# keyword, renaming to '_" `x` "'",rename="_%s") `x` /* from diff --git a/Lib/java/director.swg b/Lib/java/director.swg index bade80c9d..fa588671d 100644 --- a/Lib/java/director.swg +++ b/Lib/java/director.swg @@ -117,12 +117,18 @@ namespace Swig { JNIEnv *jenv_; public: JNIEnvWrapper(const Director *director) : director_(director), jenv_(0) { +#if defined(SWIG_JAVA_ATTACH_CURRENT_THREAD_AS_DAEMON) + // Attach a daemon thread to the JVM. Useful when the JVM should not wait for + // the thread to exit upon shutdown. Only for jdk-1.4 and later. + director_->swig_jvm_->AttachCurrentThreadAsDaemon((void **) &jenv_, NULL); +#else director_->swig_jvm_->AttachCurrentThread((void **) &jenv_, NULL); +#endif } ~JNIEnvWrapper() { -// Some JVMs, eg JDK 1.4.2 and lower on Solaris have a bug and crash with the DetachCurrentThread call. -// However, without this call, the JVM hangs on exit when the thread was not created by the JVM and creates a memory leak. #if !defined(SWIG_JAVA_NO_DETACH_CURRENT_THREAD) + // Some JVMs, eg jdk-1.4.2 and lower on Solaris have a bug and crash with the DetachCurrentThread call. + // However, without this call, the JVM hangs on exit when the thread was not created by the JVM and creates a memory leak. director_->swig_jvm_->DetachCurrentThread(); #endif } diff --git a/Lib/java/javakw.swg b/Lib/java/javakw.swg index 9dcd97062..99cd54770 100644 --- a/Lib/java/javakw.swg +++ b/Lib/java/javakw.swg @@ -2,7 +2,7 @@ #define JAVA_JAVAKW_SWG_ /* Warnings for Java keywords */ -#define JAVAKW(x) %namewarn("314:" #x " is a java keyword") #x +#define JAVAKW(x) %keywordwarn("'" `x` "' is a java keyword, renaming to '_"`x`"'",rename="_%s") `x` /* from diff --git a/Lib/java/various.i b/Lib/java/various.i index c53f08aa2..733b8fa79 100644 --- a/Lib/java/various.i +++ b/Lib/java/various.i @@ -60,7 +60,7 @@ #endif } -%typemap(out) char **STRING_ARRAY (char *s) { +%typemap(out) char **STRING_ARRAY { int i; int len=0; jstring temp_string; diff --git a/Lib/lua/luatypemaps.swg b/Lib/lua/luatypemaps.swg index 462d6a055..0941c9da1 100644 --- a/Lib/lua/luatypemaps.swg +++ b/Lib/lua/luatypemaps.swg @@ -73,7 +73,7 @@ %{$1 = (lua_toboolean(L, $input)!=0);%} %typemap(out) bool -%{ lua_pushboolean(L,(int)($1==true)); SWIG_arg++;%} +%{ lua_pushboolean(L,(int)($1!=0)); SWIG_arg++;%} // for const bool&, SWIG treats this as a const bool* so we must dereference it %typemap(in,checkfn="lua_isboolean") const bool& (bool temp) @@ -81,7 +81,7 @@ $1=&temp;%} %typemap(out) const bool& -%{ lua_pushboolean(L,(int)(*$1==true)); SWIG_arg++;%} +%{ lua_pushboolean(L,(int)((*$1)!=0)); SWIG_arg++;%} // strings (char* and char[]) %typemap(in,checkfn="lua_isstring") const char*, char* diff --git a/Lib/lua/typemaps.i b/Lib/lua/typemaps.i index e0adcf192..fa0c0d0e5 100644 --- a/Lib/lua/typemaps.i +++ b/Lib/lua/typemaps.i @@ -80,6 +80,22 @@ SWIG_NUMBER_TYPEMAP(long long); SWIG_NUMBER_TYPEMAP(unsigned long long); SWIG_NU // note we dont do char, as a char* is probably a string not a ptr to a single char +// similar for booleans +%typemap(in,checkfn="lua_isboolean") bool *INPUT(bool temp), bool &INPUT(bool temp) +%{ temp = (lua_toboolean(L,$input)!=0); + $1 = &temp; %} + +%typemap(in, numinputs=0) bool *OUTPUT (bool temp),bool &OUTPUT (bool temp) +%{ $1 = &temp; %} + +%typemap(argout) bool *OUTPUT,bool &OUTPUT +%{ lua_pushboolean(L, (int)((*$1)!=0)); SWIG_arg++;%} + +%typemap(in) bool *INOUT = bool *INPUT; +%typemap(argout) bool *INOUT = bool *OUTPUT; +%typemap(in) bool &INOUT = bool &INPUT; +%typemap(argout) bool &INOUT = bool &OUTPUT; + /* ----------------------------------------------------------------------------- * Basic Array typemaps * ----------------------------------------------------------------------------- */ @@ -320,6 +336,11 @@ for array handling %typemap(freearg) (TYPE *INOUT,int)=(TYPE *INPUT,int); // TODO out variable arrays (is there a standard form for such things?) + +// referencing so that (int *INPUT,int) and (int INPUT[],int) are the same +%typemap(in) (TYPE INPUT[],int)=(TYPE *INPUT,int); +%typemap(freearg) (TYPE INPUT[],int)=(TYPE *INPUT,int); + %enddef // the following line of code diff --git a/Lib/ocaml/ocamlkw.swg b/Lib/ocaml/ocamlkw.swg index ba06f238e..9b9096e2b 100644 --- a/Lib/ocaml/ocamlkw.swg +++ b/Lib/ocaml/ocamlkw.swg @@ -2,7 +2,7 @@ #define OCAML_OCAMLKW_SWG_ /* Warnings for Ocaml keywords */ -#define OCAMLKW(x) %namewarn("314:" #x " is a ocaml keyword and it will properly renamed") #x +#define OCAMLKW(x) %namewarn("314: '" #x "' is a ocaml keyword and it will properly renamed") #x /* from diff --git a/Lib/perl5/perlkw.swg b/Lib/perl5/perlkw.swg index 71a229c66..00648e0bf 100644 --- a/Lib/perl5/perlkw.swg +++ b/Lib/perl5/perlkw.swg @@ -1,6 +1,6 @@ /* Warnings for Perl keywords */ -#define PERLKW(x) %keywordwarn(`x` " is a perl keyword") `x` -#define PERLBN(x) %builtinwarn(`x` " conflicts with a built-in name in perl") "::" `x` +#define PERLKW(x) %keywordwarn("'" `x` "' is a perl keyword") `x` +#define PERLBN(x) %builtinwarn("'" `x` "' conflicts with a built-in name in perl") "::" `x` /* diff --git a/Lib/php4/php4kw.swg b/Lib/php4/php4kw.swg index 0d28994c5..a6b519445 100644 --- a/Lib/php4/php4kw.swg +++ b/Lib/php4/php4kw.swg @@ -8,15 +8,15 @@ * when used as class methods. * ----------------------------------------------------------------------------- */ -#define PHPKW(x) %keywordwarn(`x` " is a php keyword, renamed as c_"`x`,sourcefmt="%(lower)s", rename="c_%s",fullname=1) `x` +#define PHPKW(x) %keywordwarn("'" `x` "' is a php keyword, renamed as 'c_" `x` "'",sourcefmt="%(lower)s", rename="c_%s",fullname=1) `x` %define PHPCN(x) -%keywordwarn(`x` " is a php reserved class name, class renamed as c_"`x`,%$isclass,rename="c_%s") `x`; -%keywordwarn(`x` " is a php reserved class name, constructor renamed as c_"`x`,%$isconstructor,rename="c_%s") `x`; +%keywordwarn("'" `x` "' is a php reserved class name, class renamed as 'c_" `x` "'",%$isclass,rename="c_%s") `x`; +%keywordwarn("'" `x` "' is a php reserved class name, constructor renamed as 'c_" `x` "'",%$isconstructor,rename="c_%s") `x`; %enddef -#define PHPBN1(x) %builtinwarn(`x` " conflicts with a built-in name in php",sourcefmt="%(lower)s",fullname=1) `x` -#define PHPBN2(x) %builtinwarn(`x` " conflicts with a built-in name in php") "::" `x` +#define PHPBN1(x) %builtinwarn("'" `x` "' conflicts with a built-in name in php",sourcefmt="%(lower)s",fullname=1) `x` +#define PHPBN2(x) %builtinwarn("'" `x` "' conflicts with a built-in name in php") "::" `x` /* diff --git a/Lib/pike/pikekw.swg b/Lib/pike/pikekw.swg index 85fd091a8..844b1f189 100644 --- a/Lib/pike/pikekw.swg +++ b/Lib/pike/pikekw.swg @@ -2,7 +2,7 @@ #define PIKE_PIKEKW_SWG_ /* Warnings for Pike keywords */ -#define PIKEKW(x) %namewarn("314:" #x " is a pike keyword") #x +#define PIKEKW(x) %namewarn("314: '" #x "' is a pike keyword") #x /* from diff --git a/Lib/python/pycontainer.swg b/Lib/python/pycontainer.swg index 8f1db7ce1..ed0eb7f0b 100644 --- a/Lib/python/pycontainer.swg +++ b/Lib/python/pycontainer.swg @@ -738,12 +738,12 @@ namespace swig { typedef typename sequence::const_iterator const_iterator; static PyObject *from(const sequence& seq) { -#ifdef SWIG_PYTHON_EXTRA_NATIVE_CONTAINERS +%#ifdef SWIG_PYTHON_EXTRA_NATIVE_CONTAINERS swig_type_info *desc = swig::type_info(); if (desc && desc->clientdata) { return SWIG_NewPointerObj(new sequence(seq), desc, SWIG_POINTER_OWN); } -#endif +%#endif size_type size = seq.size(); if (size <= (size_type)INT_MAX) { PyObject *obj = PyTuple_New((int)size); diff --git a/Lib/python/pyiterators.swg b/Lib/python/pyiterators.swg index e2dfbc3f5..38f1791a9 100644 --- a/Lib/python/pyiterators.swg +++ b/Lib/python/pyiterators.swg @@ -38,18 +38,18 @@ namespace swig { virtual PySwigIterator *incr(size_t n = 1) = 0; // Backward iterator method, very common in C++, but not required in Python - virtual PySwigIterator *decr(size_t n = 1) + virtual PySwigIterator *decr(size_t /*n*/ = 1) { throw stop_iteration(); } // Random access iterator methods, but not required in Python - virtual ptrdiff_t distance(const PySwigIterator &x) const + virtual ptrdiff_t distance(const PySwigIterator &/*x*/) const { throw std::invalid_argument("operation not supported"); } - virtual bool equal (const PySwigIterator &x) const + virtual bool equal (const PySwigIterator &/*x*/) const { throw std::invalid_argument("operation not supported"); } diff --git a/Lib/python/pythonkw.swg b/Lib/python/pythonkw.swg index f57d34ce4..2ee233516 100644 --- a/Lib/python/pythonkw.swg +++ b/Lib/python/pythonkw.swg @@ -2,8 +2,8 @@ Warnings for Python keywords, built-in names and bad names. */ -#define PYTHONKW(x) %keywordwarn(`x` " is a python keyword, symbol will be renamed as '_" `x`"'", rename="_%s") `x` -#define PYTHONBN(x) %builtinwarn(`x` " conflicts with a built-in name in python") "::"`x` +#define PYTHONKW(x) %keywordwarn("'" `x` "' is a python keyword, renaming to '_" `x` "'", rename="_%s") `x` +#define PYTHONBN(x) %builtinwarn("'" `x` "' conflicts with a built-in name in python") "::"`x` /* diff --git a/Lib/r/r.swg b/Lib/r/r.swg index 3095529a0..0ab7e11a0 100644 --- a/Lib/r/r.swg +++ b/Lib/r/r.swg @@ -12,6 +12,8 @@ SWIGEXPORT void SWIG_init(void) { %} +%include + #define %Rruntime %insert("s") #define SWIG_Object SEXP diff --git a/Lib/r/rkw.swg b/Lib/r/rkw.swg new file mode 100644 index 000000000..2c181faa0 --- /dev/null +++ b/Lib/r/rkw.swg @@ -0,0 +1,32 @@ +/* + Warnings for R keywords, built-in names and bad names. +*/ + +#define RKW(x) %keywordwarn("'" `x` "' is a R keyword, renaming to '_" `x`"'", rename="_%s") `x` + +/* + Warnings for R reserved words taken from + http://cran.r-project.org/doc/manuals/R-lang.html#Reserved-words +*/ + +RKW(if); +RKW(else); +RKW(repeat); +RKW(while); +RKW(function); +RKW(for); +RKW(in); +RKW(next); +RKW(break); +RKW(TRUE); +RKW(FALSE); +RKW(NULL); +RKW(Inf); +RKW(NaN); +RKW(NA); +RKW(NA_integer_); +RKW(NA_real_); +RKW(NA_complex_); +RKW(NA_character_); + +#undef RKW diff --git a/Lib/ruby/rubycontainer.swg b/Lib/ruby/rubycontainer.swg index e3cae5778..919695ec2 100644 --- a/Lib/ruby/rubycontainer.swg +++ b/Lib/ruby/rubycontainer.swg @@ -691,10 +691,12 @@ namespace swig for ( ; i != e; ) { VALUE r = swig::from< Sequence::value_type >(*i); - if ( RTEST( rb_yield(r) ) ) + if ( RTEST( rb_yield(r) ) ) { $self->erase(i++); - else + e = self->end(); + } else { ++i; + } } return self; diff --git a/Lib/ruby/rubykw.swg b/Lib/ruby/rubykw.swg index fec47baff..194687b95 100644 --- a/Lib/ruby/rubykw.swg +++ b/Lib/ruby/rubykw.swg @@ -2,7 +2,7 @@ #define RUBY_RUBYKW_SWG_ /* Warnings for Ruby keywords */ -#define RUBYKW(x) %keywordwarn("'" `x` "' is a ruby keyword, and it will renamed as 'C_"`x`"'",rename="C_%s",fullname=1) `x` +#define RUBYKW(x) %keywordwarn("'" `x` "' is a ruby keyword, renaming to 'C_" `x` "'",rename="C_%s",fullname=1) `x` /* diff --git a/Lib/swiglabels.swg b/Lib/swiglabels.swg index 09de6c969..b943afb47 100644 --- a/Lib/swiglabels.swg +++ b/Lib/swiglabels.swg @@ -40,6 +40,12 @@ # endif #endif +#ifndef SWIG_MSC_UNSUPPRESS_4505 +# if defined(_MSC_VER) +# pragma warning(disable : 4505) /* unreferenced local function has been removed */ +# endif +#endif + #ifndef SWIGUNUSEDPARM # ifdef __cplusplus # define SWIGUNUSEDPARM(p) diff --git a/Lib/typemaps/primtypes.swg b/Lib/typemaps/primtypes.swg index c59aa1d1e..42728e5fe 100644 --- a/Lib/typemaps/primtypes.swg +++ b/Lib/typemaps/primtypes.swg @@ -283,6 +283,7 @@ _apply_macro(Macro, ptrdiff_t , Arg2); _apply_macro(Macro, std::size_t, Arg2); _apply_macro(Macro, std::ptrdiff_t, Arg2); _apply_macro(Macro, std::string, Arg2); +_apply_macro(Macro, std::wstring, Arg2); _apply_macro(Macro, std::complex, Arg2); _apply_macro(Macro, std::complex, Arg2); %enddef diff --git a/README b/README index 61550e558..2898130b0 100644 --- a/README +++ b/README @@ -1,6 +1,6 @@ SWIG (Simplified Wrapper and Interface Generator) -Version: 1.3.35 (7 April 2008) +Version: 1.3.36 (24 June 2008) Tagline: SWIG is a compiler that integrates C and C++ with languages including Perl, Python, Tcl, Ruby, PHP, Java, Ocaml, Lua, @@ -91,6 +91,13 @@ A SWIG FAQ and other hints can be found on the SWIG Wiki: What's New? =========== +SWIG-1.3.36 summary: +- Enhancement to directors to wrap all protected members +- Optimisation feature for objects returned by value +- A few bugs fixes in the PHP, Java, Ruby, R, C#, Python, Lua and + Perl modules +- Other minor generic bug fixes + SWIG-1.3.35 summary: - Octave language module added - Bug fixes in Python, Lua, Java, C#, Perl modules diff --git a/Source/CParse/cscanner.c b/Source/CParse/cscanner.c index 2a0d341b5..032c71f7e 100644 --- a/Source/CParse/cscanner.c +++ b/Source/CParse/cscanner.c @@ -423,7 +423,7 @@ int yylook(void) { { String *cmt = Scanner_text(scan); char *loc = Char(cmt); - if ((strncmp(loc,"/*@SWIG@",6) == 0) && (loc[Len(cmt)-3] == '@')) { + if ((strncmp(loc,"/*@SWIG",7) == 0) && (loc[Len(cmt)-3] == '@')) { scanner_locator(cmt); } } diff --git a/Source/CParse/parser.y b/Source/CParse/parser.y index 4fe8b47ed..58e0c0c41 100644 --- a/Source/CParse/parser.y +++ b/Source/CParse/parser.y @@ -331,7 +331,9 @@ static void add_symbols(Node *n) { Delete(prefix); } - if (0 && !Getattr(n,"parentNode") && class_level) set_parentNode(n,class_decl[class_level - 1]); + /* + if (!Getattr(n,"parentNode") && class_level) set_parentNode(n,class_decl[class_level - 1]); + */ Setattr(n,"ismember","1"); } } @@ -4109,10 +4111,11 @@ cpp_destructor_decl : NOT idtemplate LPAREN parms RPAREN cpp_end { /* Check for template names. If the class is a template and the constructor is missing the template part, we add it */ - if (Classprefix && (c = strchr(Char(Classprefix),'<'))) { - if (!Strchr($3,'<')) { - $3 = NewStringf("%s%s",$3,c); - } + if (Classprefix) { + c = strchr(Char(Classprefix),'<'); + if (c && !Strchr($3,'<')) { + $3 = NewStringf("%s%s",$3,c); + } } Setattr($$,"storage","virtual"); name = NewStringf("%s",$3); @@ -4428,12 +4431,8 @@ parms : rawparms { ; rawparms : parm ptail { - if (1) { - set_nextSibling($1,$2); - $$ = $1; - } else { - $$ = $2; - } + set_nextSibling($1,$2); + $$ = $1; } | empty { $$ = 0; } ; @@ -4486,12 +4485,8 @@ valparms : rawvalparms { ; rawvalparms : valparm valptail { - if (1) { - set_nextSibling($1,$2); - $$ = $1; - } else { - $$ = $2; - } + set_nextSibling($1,$2); + $$ = $1; } | empty { $$ = 0; } ; diff --git a/Source/CParse/templ.c b/Source/CParse/templ.c index a1f0c8e08..8142125a7 100644 --- a/Source/CParse/templ.c +++ b/Source/CParse/templ.c @@ -281,13 +281,13 @@ int Swig_cparse_template_expand(Node *n, String *rname, ParmList *tparms, Symtab Delete(ptargs); } - if (0) { + /* Parm *p = tparms; while (p) { Printf(stdout, "tparm: '%s' '%s' '%s'\n", Getattr(p, "name"), Getattr(p, "type"), Getattr(p, "value")); p = nextSibling(p); } - } + */ /* Printf(stdout,"targs = '%s'\n", templateargs); Printf(stdout,"rname = '%s'\n", rname); diff --git a/Source/DOH/hash.c b/Source/DOH/hash.c index ccb94314a..62aef10f2 100644 --- a/Source/DOH/hash.c +++ b/Source/DOH/hash.c @@ -112,12 +112,11 @@ static void DelHash(DOH *ho) { int i; for (i = 0; i < h->hashsize; i++) { - if ((n = h->hashtable[i])) { - while (n) { - next = n->next; - DelNode(n); - n = next; - } + n = h->hashtable[i]; + while (n) { + next = n->next; + DelNode(n); + n = next; } } DohFree(h->hashtable); @@ -138,12 +137,11 @@ static void Hash_clear(DOH *ho) { int i; for (i = 0; i < h->hashsize; i++) { - if ((n = h->hashtable[i])) { - while (n) { - next = n->next; - DelNode(n); - n = next; - } + n = h->hashtable[i]; + while (n) { + next = n->next; + DelNode(n); + n = next; } h->hashtable[i] = 0; } @@ -454,11 +452,10 @@ static DOH *CopyHash(DOH *ho) { nho = DohObjMalloc(&DohHashType, nh); for (i = 0; i < h->hashsize; i++) { - if ((n = h->hashtable[i])) { - while (n) { - Hash_setattr(nho, n->key, n->object); - n = n->next; - } + n = h->hashtable[i]; + while (n) { + Hash_setattr(nho, n->key, n->object); + n = n->next; } } return nho; diff --git a/Source/Modules/allegrocl.cxx b/Source/Modules/allegrocl.cxx index 561997276..a968e506c 100644 --- a/Source/Modules/allegrocl.cxx +++ b/Source/Modules/allegrocl.cxx @@ -2271,7 +2271,7 @@ int ALLEGROCL::emit_dispatch_defun(Node *n) { return SWIG_OK; } -int ALLEGROCL::emit_defun(Node *n, File *f_cl) { +int ALLEGROCL::emit_defun(Node *n, File *fcl) { #ifdef ALLEGROCL_WRAP_DEBUG Printf(stderr, "emit_defun: ENTER... "); #endif @@ -2307,27 +2307,27 @@ int ALLEGROCL::emit_defun(Node *n, File *f_cl) { if (Generate_Wrapper) { String *extra_parms = id_converter_arguments(n)->noname_str(); if (Getattr(n, "sym:overloaded")) - Printf(f_cl, "(swig-defmethod (\"%s\" \"%s\"%s)\n", funcname, mangled_name, extra_parms); + Printf(fcl, "(swig-defmethod (\"%s\" \"%s\"%s)\n", funcname, mangled_name, extra_parms); else - Printf(f_cl, "(swig-defun (\"%s\" \"%s\"%s)\n", funcname, mangled_name, extra_parms); + Printf(fcl, "(swig-defun (\"%s\" \"%s\"%s)\n", funcname, mangled_name, extra_parms); Delete(extra_parms); } // Just C else { - Printf(f_cl, "(swig-defun (\"%s\" \"%s\")\n", funcname, Generate_Wrapper ? mangled_name : funcname); + Printf(fcl, "(swig-defun (\"%s\" \"%s\")\n", funcname, Generate_Wrapper ? mangled_name : funcname); } ////////////////////////////////////// // Lisp foreign call parameter list // ////////////////////////////////////// - Printf(f_cl, " ("); + Printf(fcl, " ("); /* Special cases */ if (ParmList_len(pl) == 0) { - Printf(f_cl, ":void"); + Printf(fcl, ":void"); /* } else if (any_varargs(pl)) { - Printf(f_cl, "#| varargs |#"); + Printf(fcl, "#| varargs |#"); varargs=1; */ } else { String *largs = NewString(""); @@ -2337,7 +2337,7 @@ int ALLEGROCL::emit_defun(Node *n, File *f_cl) { SwigType *argtype = Swig_cparse_type(Getattr(p, "tmap:ctype")); if (!first) { - Printf(f_cl, "\n "); + Printf(fcl, "\n "); } if (SwigType_isvarargs(argtype)) { @@ -2393,7 +2393,7 @@ int ALLEGROCL::emit_defun(Node *n, File *f_cl) { // if this parameter has been removed from the C/++ wrapper // it shouldn't be in the lisp wrapper either. if (!checkAttribute(p, "tmap:in:numinputs", "0")) { - Printf(f_cl, "(%s %s %s %s %s)", + Printf(fcl, "(%s %s %s %s %s)", // parms in the ff wrapper, but not in the lisp wrapper. (checkAttribute(p, "tmap:lin:numinputs", "0") ? ":p-" : ":p+"), argname, dispatchtype, ffitype, lisptype); @@ -2479,12 +2479,12 @@ int ALLEGROCL::emit_defun(Node *n, File *f_cl) { Replaceall(wrap->code, "$ldestructor", ldestructor); Delete(ldestructor); - Printf(f_cl, ")\n"); /* finish arg list */ + Printf(fcl, ")\n"); /* finish arg list */ ///////////////////////////////////////////////////// // Lisp foreign call return type and optimizations // ///////////////////////////////////////////////////// - Printf(f_cl, " (:returning (%s %s)", compose_foreign_type(result_type), get_lisp_type(Getattr(n, "type"), "result")); + Printf(fcl, " (:returning (%s %s)", compose_foreign_type(result_type), get_lisp_type(Getattr(n, "type"), "result")); for (Iterator option = First(n); option.item; option = Next(option)) { if (Strncmp("feature:ffargs:", option.key, 15)) @@ -2494,12 +2494,12 @@ int ALLEGROCL::emit_defun(Node *n, File *f_cl) { Replaceall(option_name, "_", "-"); // TODO: varargs vs call-direct ? - Printf(f_cl, "\n %s %s", option_name, option_val); + Printf(fcl, "\n %s %s", option_name, option_val); Delete(option_name); } - Printf(f_cl, ")\n %s)\n\n", wrap->code); + Printf(fcl, ")\n %s)\n\n", wrap->code); // Wrapper_print(wrap, stderr); Delete(result_type); @@ -2935,11 +2935,9 @@ int ALLEGROCL::classHandler(Node *n) { #endif if (Generate_Wrapper) - return cppClassHandler(n); + return cppClassHandler(n); else - return cClassHandler(n); - - return SWIG_OK; + return cClassHandler(n); } int ALLEGROCL::cClassHandler(Node *n) { diff --git a/Source/Modules/chicken.cxx b/Source/Modules/chicken.cxx index a76e09945..2298d2939 100644 --- a/Source/Modules/chicken.cxx +++ b/Source/Modules/chicken.cxx @@ -329,7 +329,6 @@ int CHICKEN::functionWrapper(Node *n) { Parm *p; int i; String *wname; - String *source; Wrapper *f; String *mangle = NewString(""); String *get_pointers; @@ -398,8 +397,6 @@ int CHICKEN::functionWrapper(Node *n) { SwigType *pt = Getattr(p, "type"); String *ln = Getattr(p, "lname"); - source = NewStringf("scm%d", i + 1); - Printf(f->def, ", C_word scm%d", i + 1); Printf(declfunc, ",C_word"); @@ -407,6 +404,7 @@ int CHICKEN::functionWrapper(Node *n) { if ((tm = Getattr(p, "tmap:in"))) { String *parse = Getattr(p, "tmap:in:parse"); if (!parse) { + String *source = NewStringf("scm%d", i + 1); Replaceall(tm, "$source", source); Replaceall(tm, "$target", ln); Replaceall(tm, "$input", source); @@ -445,20 +443,15 @@ int CHICKEN::functionWrapper(Node *n) { } } } - - } else { + Delete(source); } - p = Getattr(p, "tmap:in:next"); continue; } else { Swig_warning(WARN_TYPEMAP_IN_UNDEF, input_file, line_number, "Unable to use type %s as a function argument.\n", SwigType_str(pt, 0)); break; } - - Delete(source); - p = nextSibling(p); } /* finish argument marshalling */ @@ -1510,7 +1503,7 @@ int CHICKEN::validIdentifier(String *s) { /* ------------------------------------------------------------ * closNameMapping() * Maps the identifier from C++ to the CLOS based on command - * line paramaters and such. + * line parameters and such. * If class_name = "" that means the mapping is for a function or * variable not attached to any class. * ------------------------------------------------------------ */ diff --git a/Source/Modules/csharp.cxx b/Source/Modules/csharp.cxx index df4677e26..7ea10170a 100644 --- a/Source/Modules/csharp.cxx +++ b/Source/Modules/csharp.cxx @@ -1073,7 +1073,9 @@ public: global_variable_flag = false; generate_property_declaration_flag = false; - Printf(module_class_code, "\n }\n\n"); + if (proxy_flag) { + Printf(module_class_code, "\n }\n\n"); + } return ret; } @@ -1924,7 +1926,7 @@ public: Swig_warning(WARN_CSHARP_TYPEMAP_CSWTYPE_UNDEF, input_file, line_number, "No cstype typemap defined for %s\n", SwigType_str(t, 0)); } - if (proxy_flag && wrapping_member_flag && !enum_constant_flag) { + if (wrapping_member_flag && !enum_constant_flag) { // Properties setter_flag = (Cmp(Getattr(n, "sym:name"), Swig_name_set(Swig_name_member(proxy_class_name, variable_name))) == 0); if (setter_flag) @@ -2107,7 +2109,7 @@ public: Swig_warning(WARN_CSHARP_TYPEMAP_CSOUT_UNDEF, input_file, line_number, "No csout typemap defined for %s\n", SwigType_str(t, 0)); } - if (proxy_flag && wrapping_member_flag && !enum_constant_flag) { + if (wrapping_member_flag && !enum_constant_flag) { // Properties if (generate_property_declaration_flag) { // Ensure the declaration is generated just once should the property contain both a set and get // Get the C# variable type - obtained differently depending on whether a setter is required. @@ -2541,6 +2543,7 @@ public: num_arguments = emit_num_arguments(l); num_required = emit_num_required(l); + bool global_or_member_variable = global_variable_flag || (wrapping_member_flag && !enum_constant_flag); int gencomma = 0; /* Output each parameter */ @@ -2567,7 +2570,7 @@ public: if (gencomma) Printf(imcall, ", "); - String *arg = makeParameterName(n, p, i, setter_flag); + String *arg = makeParameterName(n, p, i, global_or_member_variable); // Use typemaps to transform type used in C# wrapper function (in proxy class) to type used in PInvoke function (in intermediary class) if ((tm = Getattr(p, "tmap:csin"))) { @@ -2755,7 +2758,7 @@ public: value = Getattr(n, "enumvalue") ? Copy(Getattr(n, "enumvalue")) : Copy(Getattr(n, "enumvalueex")); } else { // Get the enumvalue from a PINVOKE call - if (!getCurrentClass() || !cparse_cplusplus) { + if (!getCurrentClass() || !cparse_cplusplus || !proxy_flag) { // Strange hack to change the name Setattr(n, "name", Getattr(n, "value")); /* for wrapping of enums in a namespace when emit_action is used */ constantWrapper(n); @@ -2877,7 +2880,7 @@ public: * n - Node * p - parameter node * arg_num - parameter argument number - * setter - set this flag when wrapping member variables + * setter - set this flag when wrapping variables * Return: * arg - a unique parameter name * ----------------------------------------------------------------------------- */ @@ -2886,20 +2889,22 @@ public: String *arg = 0; String *pn = Getattr(p, "name"); - if (setter) { + + // Use C parameter name unless it is a duplicate or an empty parameter name + int count = 0; + ParmList *plist = Getattr(n, "parms"); + while (plist) { + if ((Cmp(pn, Getattr(plist, "name")) == 0)) + count++; + plist = nextSibling(plist); + } + String *wrn = pn ? Swig_name_warning(p, 0, pn, 0) : 0; + arg = (!pn || (count > 1) || wrn) ? NewStringf("arg%d", arg_num) : Copy(pn); + + if (setter && Cmp(arg, "self") != 0) { // Note that in C# properties, the input variable name is always called 'value' + Delete(arg); arg = NewString("value"); - } else { - // Use C parameter name unless it is a duplicate or an empty parameter name - int count = 0; - ParmList *plist = Getattr(n, "parms"); - while (plist) { - if ((Cmp(pn, Getattr(plist, "name")) == 0)) - count++; - plist = nextSibling(plist); - } - String *wrn = pn ? Swig_name_warning(p, 0, pn, 0) : 0; - arg = (!pn || (count > 1) || wrn) ? NewStringf("arg%d", arg_num) : Copy(pn); } return arg; diff --git a/Source/Modules/guile.cxx b/Source/Modules/guile.cxx index 2390e8ad6..f5f080034 100644 --- a/Source/Modules/guile.cxx +++ b/Source/Modules/guile.cxx @@ -1649,7 +1649,7 @@ public: /* ------------------------------------------------------------ * goopsNameMapping() * Maps the identifier from C++ to the GOOPS based * on command - * line paramaters and such. + * line parameters and such. * If class_name = "" that means the mapping is for a function or * variable not attached to any class. * ------------------------------------------------------------ */ diff --git a/Source/Modules/java.cxx b/Source/Modules/java.cxx index 5660b4885..b92fccdfb 100644 --- a/Source/Modules/java.cxx +++ b/Source/Modules/java.cxx @@ -1932,7 +1932,7 @@ public: Swig_warning(WARN_JAVA_TYPEMAP_JSTYPE_UNDEF, input_file, line_number, "No jstype typemap defined for %s\n", SwigType_str(t, 0)); } - if (proxy_flag && wrapping_member_flag && !enum_constant_flag) { + if (wrapping_member_flag && !enum_constant_flag) { // For wrapping member variables (Javabean setter) setter_flag = (Cmp(Getattr(n, "sym:name"), Swig_name_set(Swig_name_member(proxy_class_name, variable_name))) == 0); } @@ -2463,6 +2463,7 @@ public: num_arguments = emit_num_arguments(l); num_required = emit_num_required(l); + bool global_or_member_variable = global_variable_flag || (wrapping_member_flag && !enum_constant_flag); int gencomma = 0; /* Output each parameter */ @@ -2487,7 +2488,7 @@ public: if (gencomma) Printf(imcall, ", "); - String *arg = makeParameterName(n, p, i, setter_flag); + String *arg = makeParameterName(n, p, i, global_or_member_variable); // Use typemaps to transform type used in Java wrapper function (in proxy class) to type used in JNI function (in intermediary class) if ((tm = Getattr(p, "tmap:javain"))) { @@ -2632,7 +2633,7 @@ public: value = Getattr(n, "enumvalue") ? Copy(Getattr(n, "enumvalue")) : Copy(Getattr(n, "enumvalueex")); } else { // Get the enumvalue from a JNI call - if (!getCurrentClass() || !cparse_cplusplus) { + if (!getCurrentClass() || !cparse_cplusplus || !proxy_flag) { // Strange hack to change the name Setattr(n, "name", Getattr(n, "value")); /* for wrapping of enums in a namespace when emit_action is used */ constantWrapper(n); @@ -2759,7 +2760,7 @@ public: * n - Node * p - parameter node * arg_num - parameter argument number - * setter - set this flag when wrapping member variables + * setter - set this flag when wrapping variables * Return: * arg - a unique parameter name * ----------------------------------------------------------------------------- */ @@ -2768,21 +2769,23 @@ public: String *arg = 0; String *pn = Getattr(p, "name"); - if (setter) { + + // Use C parameter name unless it is a duplicate or an empty parameter name + int count = 0; + ParmList *plist = Getattr(n, "parms"); + while (plist) { + if ((Cmp(pn, Getattr(plist, "name")) == 0)) + count++; + plist = nextSibling(plist); + } + String *wrn = pn ? Swig_name_warning(p, 0, pn, 0) : 0; + arg = (!pn || (count > 1) || wrn) ? NewStringf("arg%d", arg_num) : Copy(pn); + + if (setter && Cmp(arg, "self") != 0) { // Note that for setters the parameter name is always set but sometimes includes C++ // scope resolution, so we need to strip off the scope resolution to make a valid name. + Delete(arg); arg = NewString("value"); //Swig_scopename_last(pn); - } else { - // Use C parameter name unless it is a duplicate or an empty parameter name - int count = 0; - ParmList *plist = Getattr(n, "parms"); - while (plist) { - if ((Cmp(pn, Getattr(plist, "name")) == 0)) - count++; - plist = nextSibling(plist); - } - String *wrn = pn ? Swig_name_warning(p, 0, pn, 0) : 0; - arg = (!pn || (count > 1) || wrn) ? NewStringf("arg%d", arg_num) : Copy(pn); } return arg; diff --git a/Source/Modules/lang.cxx b/Source/Modules/lang.cxx index 4a7bf8813..6718903d0 100644 --- a/Source/Modules/lang.cxx +++ b/Source/Modules/lang.cxx @@ -1097,38 +1097,33 @@ int Language::globalfunctionHandler(Node *n) { String *name = Getattr(n, "name"); String *symname = Getattr(n, "sym:name"); SwigType *type = Getattr(n, "type"); - String *storage = Getattr(n, "storage"); ParmList *parms = Getattr(n, "parms"); - if (0 && (Cmp(storage, "static") == 0)) { - Swig_restore(n); - return SWIG_NOWRAP; /* Can't wrap static functions */ - } else { - /* Check for callback mode */ - String *cb = GetFlagAttr(n, "feature:callback"); - if (cb) { - String *cbname = Getattr(n, "feature:callback:name"); - if (!cbname) { - cbname = NewStringf(cb, symname); - Setattr(n, "feature:callback:name", cbname); - } - - callbackfunctionHandler(n); - if (Cmp(cbname, symname) == 0) { - Delete(cbname); - Swig_restore(n); - return SWIG_NOWRAP; - } - Delete(cbname); + /* Check for callback mode */ + String *cb = GetFlagAttr(n, "feature:callback"); + if (cb) { + String *cbname = Getattr(n, "feature:callback:name"); + if (!cbname) { + cbname = NewStringf(cb, symname); + Setattr(n, "feature:callback:name", cbname); } - Setattr(n, "parms", nonvoid_parms(parms)); - String *call = Swig_cfunction_call(name, parms); - String *cres = Swig_cresult(type, "result", call); - Setattr(n, "wrap:action", cres); - Delete(cres); - Delete(call); - functionWrapper(n); + + callbackfunctionHandler(n); + if (Cmp(cbname, symname) == 0) { + Delete(cbname); + Swig_restore(n); + return SWIG_NOWRAP; + } + Delete(cbname); } + Setattr(n, "parms", nonvoid_parms(parms)); + String *call = Swig_cfunction_call(name, parms); + String *cres = Swig_cresult(type, "result", call); + Setattr(n, "wrap:action", cres); + Delete(cres); + Delete(call); + functionWrapper(n); + Swig_restore(n); return SWIG_OK; } @@ -1376,9 +1371,6 @@ int Language::variableHandler(Node *n) { * ---------------------------------------------------------------------- */ int Language::globalvariableHandler(Node *n) { - String *storage = Getattr(n, "storage"); - if (0 && (Cmp(storage, "static") == 0)) - return SWIG_NOWRAP; variableWrapper(n); return SWIG_OK; } @@ -2108,8 +2100,8 @@ int Language::classDirector(Node *n) { String *using_protected_members_code = NewString(""); for (ni = Getattr(n, "firstChild"); ni; ni = nextSibling(ni)) { Node *nodeType = Getattr(ni, "nodeType"); - bool cdecl = (Cmp(nodeType, "cdecl") == 0); - if (cdecl && !GetFlag(ni, "feature:ignore")) { + bool cdeclaration = (Cmp(nodeType, "cdecl") == 0); + if (cdeclaration && !GetFlag(ni, "feature:ignore")) { if (is_non_virtual_protected_access(ni)) { Node *overloaded = Getattr(ni, "sym:overloaded"); // emit the using base::member statement (but only once if the method is overloaded) @@ -3391,7 +3383,8 @@ int Language::is_assignable(Node *n) { SwigType *ftd = SwigType_typedef_resolve_all(type); SwigType *td = SwigType_strip_qualifiers(ftd); if (SwigType_type(td) == T_USER) { - if ((cn = Swig_symbol_clookup(td, 0))) { + cn = Swig_symbol_clookup(td, 0); + if (cn) { if ((Strcmp(nodeType(cn), "class") == 0)) { if (Getattr(cn, "allocate:noassign")) { SetFlag(n, "feature:immutable"); diff --git a/Source/Modules/lua.cxx b/Source/Modules/lua.cxx index f46c9e809..6113da960 100644 --- a/Source/Modules/lua.cxx +++ b/Source/Modules/lua.cxx @@ -490,8 +490,6 @@ public: Swig_warning(WARN_TYPEMAP_IN_UNDEF, input_file, line_number, "Unable to use type %s as a function argument.\n", SwigType_str(pt, 0)); break; } - - p = nextSibling(p); } // add all argcheck code @@ -1101,7 +1099,6 @@ public: virtual int staticmemberfunctionHandler(Node *n) { current = STATIC_FUNC; return Language::staticmemberfunctionHandler(n); - current = NO_CPP; } /* ------------------------------------------------------------ @@ -1123,7 +1120,6 @@ public: // REPORT("staticmembervariableHandler",n); current = STATIC_VAR; return Language::staticmembervariableHandler(n); - current = NO_CPP; } /* --------------------------------------------------------------------- diff --git a/Source/Modules/main.cxx b/Source/Modules/main.cxx index 3453f5de2..901ee812e 100644 --- a/Source/Modules/main.cxx +++ b/Source/Modules/main.cxx @@ -33,7 +33,7 @@ int GenerateDefault = 1; // Generate default constructors int Verbose = 0; int AddExtern = 0; int NoExcept = 0; -int SwigRuntime = 0; // 0 = no option, 1 = -c or -runtime, 2 = -noruntime +int SwigRuntime = 0; // 0 = no option, 1 = -runtime, 2 = -noruntime /* Suppress warning messages for private inheritance, preprocessor evaluation etc... WARN_PP_EVALUATION 202 @@ -491,13 +491,13 @@ void SWIG_getoptions(int argc, char *argv[]) { Wrapper_compact_print_mode_set(1); Wrapper_virtual_elimination_mode_set(1); Swig_mark_arg(i); - } else if (strcmp(argv[i], "-runtime") == 0) { + } else if (strcmp(argv[i], "-runtime") == 0) { // Used to also accept -c. removed in swig-1.3.36 Swig_mark_arg(i); - Swig_warning(WARN_DEPRECATED_OPTC, "SWIG", 1, "-c, -runtime, -noruntime command line options are deprecated.\n"); + Swig_warning(WARN_DEPRECATED_OPTC, "SWIG", 1, "-runtime, -noruntime command line options are deprecated.\n"); SwigRuntime = 1; - } else if ((strcmp(argv[i], "-c") == 0) || (strcmp(argv[i], "-noruntime") == 0)) { + } else if (strcmp(argv[i], "-noruntime") == 0) { Swig_mark_arg(i); - Swig_warning(WARN_DEPRECATED_OPTC, "SWIG", 1, "-c, -runtime, -noruntime command line options are deprecated.\n"); + Swig_warning(WARN_DEPRECATED_OPTC, "SWIG", 1, "-runtime, -noruntime command line options are deprecated.\n"); SwigRuntime = 2; } else if (strcmp(argv[i], "-external-runtime") == 0) { external_runtime = 1; diff --git a/Source/Modules/modula3.cxx b/Source/Modules/modula3.cxx index 99d28e167..6cb24d39a 100644 --- a/Source/Modules/modula3.cxx +++ b/Source/Modules/modula3.cxx @@ -472,9 +472,9 @@ MODULA3(): cap = true; } else { if (cap) { - m3sym[i] = toupper(c); + m3sym[i] = (char)toupper(c); } else { - m3sym[i] = tolower(c); + m3sym[i] = (char)tolower(c); } cap = false; } diff --git a/Source/Modules/php4.cxx b/Source/Modules/php4.cxx index cfe948e3f..42d71e79a 100644 --- a/Source/Modules/php4.cxx +++ b/Source/Modules/php4.cxx @@ -150,45 +150,44 @@ void SwigPHP_emit_resource_registrations() { ki = First(zend_types); if (ki.key) Printf(s_oinit, "\n/* Register resource destructors for pointer types */\n"); - while (ki.key) - if (1 /* is pointer type */ ) { - DOH *key = ki.key; - Node *class_node = ki.item; - String *human_name = key; + while (ki.key) { + DOH *key = ki.key; + Node *class_node = ki.item; + String *human_name = key; - // Write out destructor function header - Printf(s_wrappers, "/* NEW Destructor style */\nstatic ZEND_RSRC_DTOR_FUNC(_wrap_destroy%s) {\n", key); + // Write out destructor function header + Printf(s_wrappers, "/* NEW Destructor style */\nstatic ZEND_RSRC_DTOR_FUNC(_wrap_destroy%s) {\n", key); - // write out body - if ((class_node != NOTCLASS)) { - String *destructor = Getattr(class_node, "destructor"); - human_name = Getattr(class_node, "sym:name"); - if (!human_name) - human_name = Getattr(class_node, "name"); - // Do we have a known destructor for this type? - if (destructor) { - Printf(s_wrappers, " %s(rsrc, SWIGTYPE%s->name TSRMLS_CC);\n", destructor, key); - } else { - Printf(s_wrappers, " /* No destructor for class %s */\n", human_name); - } + // write out body + if ((class_node != NOTCLASS)) { + String *destructor = Getattr(class_node, "destructor"); + human_name = Getattr(class_node, "sym:name"); + if (!human_name) + human_name = Getattr(class_node, "name"); + // Do we have a known destructor for this type? + if (destructor) { + Printf(s_wrappers, " %s(rsrc, SWIGTYPE%s->name TSRMLS_CC);\n", destructor, key); } else { - Printf(s_wrappers, " /* No destructor for simple type %s */\n", key); + Printf(s_wrappers, " /* No destructor for class %s */\n", human_name); } - - // close function - Printf(s_wrappers, "}\n"); - - // declare le_swig_ to store php registration - Printf(s_vdecl, "static int le_swig_%s=0; /* handle for %s */\n", key, human_name); - - // register with php - Printf(s_oinit, "le_swig_%s=zend_register_list_destructors_ex" "(_wrap_destroy%s,NULL,(char *)(SWIGTYPE%s->name),module_number);\n", key, key, key); - - // store php type in class struct - Printf(s_oinit, "SWIG_TypeClientData(SWIGTYPE%s,&le_swig_%s);\n", key, key); - - ki = Next(ki); + } else { + Printf(s_wrappers, " /* No destructor for simple type %s */\n", key); } + + // close function + Printf(s_wrappers, "}\n"); + + // declare le_swig_ to store php registration + Printf(s_vdecl, "static int le_swig_%s=0; /* handle for %s */\n", key, human_name); + + // register with php + Printf(s_oinit, "le_swig_%s=zend_register_list_destructors_ex" "(_wrap_destroy%s,NULL,(char *)(SWIGTYPE%s->name),module_number);\n", key, key, key); + + // store php type in class struct + Printf(s_oinit, "SWIG_TypeClientData(SWIGTYPE%s,&le_swig_%s);\n", key, key); + + ki = Next(ki); + } } class PHP:public Language { @@ -1195,7 +1194,7 @@ public: if (native_constructor == NATIVE_CONSTRUCTOR) { Printf(f->code, "add_property_zval(this_ptr,\"" SWIG_PTR "\",_cPtr);\n"); } else { - String *shadowrettype = SwigToPhpType(n, true); + String *shadowrettype = GetShadowReturnType(n); Printf(f->code, "object_init_ex(return_value,ptr_ce_swig_%s);\n", shadowrettype); Delete(shadowrettype); Printf(f->code, "add_property_zval(return_value,\"" SWIG_PTR "\",_cPtr);\n"); @@ -1440,6 +1439,10 @@ public: if (wrapperType == memberfn) p = nextSibling(p); while (p) { + if (GetInt(p, "tmap:in:numinputs") == 0) { + p = nextSibling(p); + continue; + } assert(0 <= argno && argno < max_num_of_arguments); String *&pname = arg_names[argno]; const char *pname_cstr = GetChar(p, "name"); @@ -1750,7 +1753,8 @@ public: } Printf(output, "\n"); - if (wrapperType == memberfn || newobject) { + // If it's a member function or a class constructor... + if (wrapperType == memberfn || (newobject && current_class)) { Printf(output, "\tfunction %s(%s) {\n", methodname, args); // We don't need this code if the wrapped class has a copy ctor // since the flat function new_CLASSNAME will handle it for us. @@ -2555,20 +2559,9 @@ public: return SWIG_OK; } - - String * SwigToPhpType(Node *n, int shadow_flag) { - String *ptype = 0; + String * GetShadowReturnType(Node *n) { SwigType *t = Getattr(n, "type"); - if (shadow_flag) { - ptype = PhpTypeFromTypemap((char *) "pstype", n, (char *) ""); - } - if (!ptype) { - ptype = PhpTypeFromTypemap((char *) "ptype", n, (char *) ""); - } - - if (ptype) return ptype; - /* Map type here */ switch (SwigType_type(t)) { case T_CHAR: @@ -2589,7 +2582,7 @@ public: case T_POINTER: case T_REFERENCE: case T_USER: - if (shadow_flag && is_shadow(t)) { + if (is_shadow(t)) { return NewString(Char(is_shadow(t))); } break; @@ -2597,7 +2590,7 @@ public: /* TODO */ break; default: - Printf(stderr, "SwigToPhpType: unhandled data type: %s\n", SwigType_str(t, 0)); + Printf(stderr, "GetShadowReturnType: unhandled data type: %s\n", SwigType_str(t, 0)); break; } diff --git a/Source/Modules/python.cxx b/Source/Modules/python.cxx index bfdec0d76..f0e335c37 100644 --- a/Source/Modules/python.cxx +++ b/Source/Modules/python.cxx @@ -1773,7 +1773,6 @@ public: Swig_warning(WARN_TYPEMAP_IN_UNDEF, input_file, line_number, "Unable to use type %s as a function argument.\n", SwigType_str(pt, 0)); break; } - p = nextSibling(p); } /* finish argument marshalling */ diff --git a/Source/Modules/r.cxx b/Source/Modules/r.cxx index 989136a9d..49d3ecc89 100644 --- a/Source/Modules/r.cxx +++ b/Source/Modules/r.cxx @@ -57,11 +57,13 @@ static String * getRTypeName(SwigType *t, int *outCount = NULL) { Insert(tmp, 0, retName); return tmp; + /* if(count) return(b); Delete(b); return(NewString("")); + */ } #if 0 @@ -104,7 +106,7 @@ static String * getRType(Node *n) { Now handles arrays, i.e. struct A[2] ****************/ -static String *getRClassName(String *retType, int addRef = 1, int upRef=0) { +static String *getRClassName(String *retType, int /*addRef*/ = 1, int upRef=0) { String *tmp = NewString(""); SwigType *resolved = SwigType_typedef_resolve_all(retType); char *retName = Char(SwigType_manglestr(resolved)); @@ -115,6 +117,7 @@ static String *getRClassName(String *retType, int addRef = 1, int upRef=0) { } return tmp; +/* #if 1 List *l = SwigType_split(retType); int n = Len(l); @@ -160,6 +163,7 @@ static String *getRClassName(String *retType, int addRef = 1, int upRef=0) { #endif return tmp; +*/ } /********************* @@ -1841,6 +1845,9 @@ int R::functionWrapper(Node *n) { String *name = Getattr(p,"name"); String *lname = Getattr(p,"lname"); + // R keyword renaming + if (name && Swig_name_warning(p, 0, name, 0)) + name = 0; /* If we have a :: in the parameter name because we are accessing a static member of a class, say, then we need to remove that prefix. */ @@ -2027,14 +2034,18 @@ int R::functionWrapper(Node *n) { Replaceall(tm,"$owner", "R_SWIG_EXTERNAL"); } - if(0 && addCopyParam) { +#if 0 + if(addCopyParam) { Printf(f->code, "if(LOGICAL(s_swig_copy)[0]) {\n"); Printf(f->code, "/* Deal with returning a reference. */\nr_ans = R_NilValue;\n"); Printf(f->code, "}\n else {\n"); } +#endif Printf(f->code, "%s\n", tm); - if(0 && addCopyParam) +#if 0 + if(addCopyParam) Printf(f->code, "}\n"); /* end of if(s_swig_copy) ... else { ... } */ +#endif } else { Swig_warning(WARN_TYPEMAP_OUT_UNDEF, input_file, line_number, diff --git a/Source/Modules/ruby.cxx b/Source/Modules/ruby.cxx index a57571bb8..ad448d34e 100644 --- a/Source/Modules/ruby.cxx +++ b/Source/Modules/ruby.cxx @@ -448,7 +448,7 @@ private: parent_name = Copy( Getattr(mod, "name") ); if ( parent_name ) { - (Char(parent_name))[0] = toupper((Char(parent_name))[0]); + (Char(parent_name))[0] = (char)toupper((Char(parent_name))[0]); } } if ( parent_name ) @@ -1194,7 +1194,7 @@ public: while (m.item) { if (Len(m.item) > 0) { String *cap = NewString(m.item); - (Char(cap))[0] = toupper((Char(cap))[0]); + (Char(cap))[0] = (char)toupper((Char(cap))[0]); if (last != 0) { Append(module, "::"); } @@ -1206,7 +1206,7 @@ public: if (feature == 0) { feature = Copy(last); } - (Char(last))[0] = toupper((Char(last))[0]); + (Char(last))[0] = (char)toupper((Char(last))[0]); modvar = NewStringf("m%s", last); Delete(modules); } @@ -2219,7 +2219,7 @@ public: return name; if (islower(name[0])) { - name[0] = toupper(name[0]); + name[0] = (char)toupper(name[0]); Swig_warning(WARN_RUBY_WRONG_NAME, input_file, line_number, "Wrong %s name (corrected to `%s')\n", reason, name); return name; } @@ -2545,7 +2545,7 @@ public: String *name = Copy(symname); char *cname = Char(name); if (cname) - cname[0] = toupper(cname[0]); + cname[0] = (char)toupper(cname[0]); Printv(director_prot_ctor_code, "if ( $comparison ) { /* subclassed */\n", " $director_new \n", diff --git a/Source/Preprocessor/cpp.c b/Source/Preprocessor/cpp.c index 560d12998..c04f95f00 100644 --- a/Source/Preprocessor/cpp.c +++ b/Source/Preprocessor/cpp.c @@ -36,6 +36,7 @@ static int error_as_warning = 0; /* Understand the cpp #error directive as a spe /* Test a character to see if it valid in an identifier (after the first letter) */ #define isidchar(c) ((isalnum(c)) || (c == '_') || (c == '$')) +DOH *Preprocessor_replace(DOH *); /* Skip whitespace */ static void skip_whitespace(String *s, String *out) { @@ -698,7 +699,6 @@ static String *get_options(String *str) { static String *expand_macro(String *name, List *args) { String *ns; DOH *symbols, *macro, *margs, *mvalue, *temp, *tempa, *e; - DOH *Preprocessor_replace(DOH *); int i, l; int isvarargs = 0; @@ -935,7 +935,6 @@ static String *expand_macro(String *name, List *args) { List *evaluate_args(List *x) { Iterator i; - String *Preprocessor_replace(String *); List *nl = NewList(); for (i = First(x); i.item; i = Next(i)) { @@ -1795,7 +1794,7 @@ String *Preprocessor_parse(String *s) { for (i = 0; i < 6;) { c = Getc(s); Putc(c, value); - statement[i++] = c; + statement[i++] = (char)c; if (strncmp(statement, ed, i) && strncmp(statement, df, i)) break; } diff --git a/Source/Swig/cwrap.c b/Source/Swig/cwrap.c index 2fc444290..18920ecc2 100644 --- a/Source/Swig/cwrap.c +++ b/Source/Swig/cwrap.c @@ -513,7 +513,8 @@ String *Swig_cppconstructor_base_call(String_or_char *name, ParmList *parms, int pname = Swig_cparm_name(p, i); i++; } else { - if ((pname = Getattr(p, "value"))) + pname = Getattr(p, "value"); + if (pname) pname = Copy(pname); else pname = Copy(Getattr(p, "name")); diff --git a/Source/Swig/include.c b/Source/Swig/include.c index 25ea0683f..3f47be15b 100644 --- a/Source/Swig/include.c +++ b/Source/Swig/include.c @@ -352,7 +352,8 @@ char *Swig_file_filename(const String_or_char *filename) { char *c; strcpy(tmp, Char(filename)); - if ((c = strrchr(tmp, *delim))) + c = strrchr(tmp, *delim); + if (c) return c + 1; else return tmp; diff --git a/Source/Swig/misc.c b/Source/Swig/misc.c index 04691b595..d29250517 100644 --- a/Source/Swig/misc.c +++ b/Source/Swig/misc.c @@ -614,7 +614,8 @@ void Swig_scopename_split(String *s, String **rprefix, String **rlast) { *rlast = Copy(s); } - if ((co = strstr(cc, "operator "))) { + co = strstr(cc, "operator "); + if (co) { if (co == cc) { *rprefix = 0; *rlast = Copy(s); @@ -664,7 +665,9 @@ String *Swig_scopename_prefix(String *s) { char *co = 0; if (!strstr(c, "::")) return 0; - if ((co = strstr(cc, "operator "))) { + co = strstr(cc, "operator "); + + if (co) { if (co == cc) { return 0; } else { @@ -715,7 +718,8 @@ String *Swig_scopename_last(String *s) { if (!strstr(c, "::")) return NewString(s); - if ((co = strstr(cc, "operator "))) { + co = strstr(cc, "operator "); + if (co) { return NewString(co); } @@ -756,7 +760,9 @@ String *Swig_scopename_first(String *s) { char *co = 0; if (!strstr(c, "::")) return 0; - if ((co = strstr(c, "operator "))) { + + co = strstr(c, "operator "); + if (co) { if (co == c) { return 0; } @@ -804,7 +810,9 @@ String *Swig_scopename_suffix(String *s) { char *co = 0; if (!strstr(c, "::")) return 0; - if ((co = strstr(c, "operator "))) { + + co = strstr(c, "operator "); + if (co) { if (co == c) return 0; } @@ -842,8 +850,9 @@ String *Swig_scopename_suffix(String *s) { int Swig_scopename_check(String *s) { char *c = Char(s); - char *co = 0; - if ((co = strstr(c, "operator "))) { + char *co = strstr(c, "operator "); + + if (co) { if (co == c) return 0; } diff --git a/Source/Swig/naming.c b/Source/Swig/naming.c index 519e5b59e..f34a24612 100644 --- a/Source/Swig/naming.c +++ b/Source/Swig/naming.c @@ -482,7 +482,8 @@ DOH *Swig_name_object_get(Hash *namehash, String *prefix, String *name, SwigType Delete(t_name); } /* A template-based class lookup */ - if (0 && !rn && SwigType_istemplate(prefix)) { + /* + if (!rn && SwigType_istemplate(prefix)) { String *t_prefix = SwigType_templateprefix(prefix); if (Strcmp(t_prefix, prefix) != 0) { String *t_name = SwigType_templateprefix(name); @@ -491,6 +492,7 @@ DOH *Swig_name_object_get(Hash *namehash, String *prefix, String *name, SwigType } Delete(t_prefix); } + */ } /* A wildcard-based class lookup */ if (!rn) { @@ -1477,7 +1479,7 @@ String *Swig_name_make(Node *n, String *prefix, String_or_char *cname, SwigType } - if (rename_hash || rename_list) { + if (rename_hash || rename_list || namewarn_hash || namewarn_list) { Hash *rn = Swig_name_object_get(Swig_name_rename_hash(), prefix, name, decl); if (!rn || !Swig_name_match_nameobj(rn, n)) { rn = Swig_name_nameobj_lget(Swig_name_rename_list(), n, prefix, name, decl); diff --git a/Source/Swig/scanner.c b/Source/Swig/scanner.c index e8b1b5f46..06e78db37 100644 --- a/Source/Swig/scanner.c +++ b/Source/Swig/scanner.c @@ -200,7 +200,7 @@ static char nextchar(Scanner * s) { if ((nc == '\n') && (!s->freeze_line)) s->line++; Putc(nc,s->text); - return nc; + return (char)nc; } /* ----------------------------------------------------------------------------- @@ -349,7 +349,7 @@ static void get_escape(Scanner *s) { } else { char tmp[3]; tmp[0] = '\\'; - tmp[1] = c; + tmp[1] = (char)c; tmp[2] = 0; Delitem(s->text, DOH_END); Append(s->text, tmp); diff --git a/Source/Swig/typeobj.c b/Source/Swig/typeobj.c index f234839fe..18d1b2304 100644 --- a/Source/Swig/typeobj.c +++ b/Source/Swig/typeobj.c @@ -937,7 +937,8 @@ String *SwigType_templateargs(const SwigType *t) { int SwigType_istemplate(const SwigType *t) { char *ct = Char(t); - if ((ct = strstr(ct, "<(")) && (strstr(ct + 2, ")>"))) + ct = strstr(ct, "<("); + if (ct && (strstr(ct + 2, ")>"))) return 1; return 0; } diff --git a/Source/Swig/typesys.c b/Source/Swig/typesys.c index fdf37ece1..ae6ab3dc8 100644 --- a/Source/Swig/typesys.c +++ b/Source/Swig/typesys.c @@ -108,6 +108,8 @@ static Hash *typedef_resolve_cache = 0; static Hash *typedef_all_cache = 0; static Hash *typedef_qualified_cache = 0; +static Typetab *SwigType_find_scope(Typetab *s, String *nameprefix); + /* common attribute keys, to avoid calling find_key all the times */ /* @@ -162,7 +164,6 @@ void SwigType_typesystem_init() { * ----------------------------------------------------------------------------- */ int SwigType_typedef(SwigType *type, String_or_char *name) { - Typetab *SwigType_find_scope(Typetab *, String *s); if (Getattr(current_typetab, name)) return -1; /* Already defined */ if (Strcmp(type, name) == 0) { /* Can't typedef a name to itself */ @@ -409,7 +410,7 @@ void SwigType_print_scope(Typetab *t) { } } -Typetab *SwigType_find_scope(Typetab *s, String *nameprefix) { +static Typetab *SwigType_find_scope(Typetab *s, String *nameprefix) { Typetab *ss; String *nnameprefix = 0; static int check_parent = 1; @@ -1311,7 +1312,8 @@ SwigType *SwigType_alttype(SwigType *t, int local_tmap) { SwigType *ftd = SwigType_typedef_resolve_all(t); td = SwigType_strip_qualifiers(ftd); Delete(ftd); - if ((n = Swig_symbol_clookup(td, 0))) { + n = Swig_symbol_clookup(td, 0); + if (n) { if (GetFlag(n, "feature:valuewrapper")) { use_wrapper = 1; } else { @@ -1334,7 +1336,8 @@ SwigType *SwigType_alttype(SwigType *t, int local_tmap) { Delete(ftd); if (SwigType_type(td) == T_USER) { use_wrapper = 1; - if ((n = Swig_symbol_clookup(td, 0))) { + n = Swig_symbol_clookup(td, 0); + if (n) { if ((Checkattr(n, "nodeType", "class") && !Getattr(n, "allocate:noassign") && (Getattr(n, "allocate:default_constructor"))) @@ -1795,13 +1798,15 @@ void SwigType_inherit_equiv(File *out) { String *lprefix = SwigType_lstr(prefix, 0); Hash *subhash = Getattr(sub, bk.key); String *convcode = Getattr(subhash, "convcode"); - Printf(out, "static void *%s(void *x, int *newmemory) {", convname); if (convcode) { + char *newmemoryused = Strstr(convcode, "newmemory"); /* see if newmemory parameter is used in order to avoid unused parameter warnings */ String *fn = Copy(convcode); Replaceall(fn, "$from", "x"); + Printf(out, "static void *%s(void *x, int *%s) {", convname, newmemoryused ? "newmemory" : "SWIGUNUSEDPARM(newmemory)"); Printf(out, "%s", fn); } else { String *cast = Getattr(subhash, "cast"); + Printf(out, "static void *%s(void *x, int *SWIGUNUSEDPARM(newmemory)) {", convname); Printf(out, "\n return (void *)((%s) ", lkey); if (cast) Printf(out, "%s", cast); diff --git a/TODO b/TODO index d764d1d20..103185d23 100644 --- a/TODO +++ b/TODO @@ -1,6 +1,6 @@ SWIG TO-DO -Release: SWIG-1.3.35 +Release: SWIG-1.3.36 ----------------------------------------------------------------------------- diff --git a/Tools/WAD/Python/type.c b/Tools/WAD/Python/type.c index 5236c1c64..7d8248e0b 100644 --- a/Tools/WAD/Python/type.c +++ b/Tools/WAD/Python/type.c @@ -62,7 +62,7 @@ new_wadobject(WadFrame *f, int count) { /* release a wad object */ static void wadobject_dealloc(wadobject *self) { - PyMem_DEL(self); + PyObject_Del(self); } static char message[65536]; diff --git a/Tools/mkrelease.py b/Tools/mkrelease.py index 574720dab..d7927f8e6 100755 --- a/Tools/mkrelease.py +++ b/Tools/mkrelease.py @@ -21,8 +21,8 @@ except: print "where version should be 1.3.x and username is your SF username" sys.exit(1) -print "Looking for wput" -os.system("which wput") and failed("wput not installed/found. Please install.") +print "Looking for rsync" +os.system("which rsync") and failed("rsync not installed/found. Please install.") print "Making source tarball" os.system("python ./mkdist.py " + version) and failed("") @@ -31,8 +31,8 @@ print "Build Windows package" os.system("./mkwindows.sh " + version) and failed("") print "Uploading to Sourceforge" -os.system("wput --verbose --binary swig-" + version + ".tar.gz ftp://anonymous:" + username + "@users.sourceforge.net@upload.sourceforge.net/incoming/") and failed("") -os.system("wput --verbose --binary swigwin-" + version + ".zip ftp://anonymous:" + username + "@users.sourceforge.net@upload.sourceforge.net/incoming/") and failed("") +os.system("rsync --archive --verbose -P --times -e ssh swig-" + version + ".tar.gz " + username + "@frs.sourceforge.net:uploads/") and failed("") +os.system("rsync --archive --verbose -P --times -e ssh swigwin-" + version + ".zip " + username + "@frs.sourceforge.net:uploads/") and failed("") os.system("svn copy -m \"rel-" + version + "\" https://swig.svn.sourceforge.net/svnroot/swig/trunk https://swig.svn.sourceforge.net/svnroot/swig/tags/rel-" + version + "/") diff --git a/configure.in b/configure.in index 82d83a4f0..13c3c6bc9 100644 --- a/configure.in +++ b/configure.in @@ -2,7 +2,7 @@ dnl Process this file with autoconf to produce a configure script. dnl The macros which aren't shipped with the autotools are stored in the dnl Tools/config directory in .m4 files. -AC_INIT([swig],[1.3.36],[http://www.swig.org]) +AC_INIT([swig],[1.3.37],[http://www.swig.org]) AC_PREREQ(2.58) AC_CONFIG_SRCDIR([Source/Swig/swig.h]) AC_CONFIG_AUX_DIR([Tools/config]) @@ -254,18 +254,6 @@ case $host in *) MZSCHEME_SO=.so;; esac -AC_SUBST(TCL_LDSHARED) -case $host in - *-*-darwin*) TCL_LDSHARED="gcc -dynamiclib -flat_namespace -undefined suppress";; - *) TCL_LDSHARED=$LDSHARED;; -esac - -AC_SUBST(TCL_CXXSHARED) -case $host in - *-*-darwin*) TCL_CXXSHARED="g++ -dynamiclib -flat_namespace -undefined suppress";; - *) TCL_CXXSHARED=$TRYLINKINGWITHCXX;; -esac - AC_SUBST(LUA_SO) case $host in *-*-darwin*) LUA_SO=.so;; @@ -545,6 +533,7 @@ fi # Cygwin (Windows) needs the library for dynamic linking case $host in *-*-cygwin* | *-*-mingw*) TCLDYNAMICLINKING="$TCLLIB";; +*-*-darwin*) TCLDYNAMICLINKING="-dynamiclib -flat_namespace -undefined suppress";; *)TCLDYNAMICLINKING="";; esac fi