From: <wsf...@us...> - 2012-05-11 21:23:43
|
Revision: 13071 http://swig.svn.sourceforge.net/swig/?rev=13071&view=rev Author: wsfulton Date: 2012-05-11 21:23:37 +0000 (Fri, 11 May 2012) Log Message: ----------- Fix typemap method hiding regression introduced in swig-2.0.5 - rev 12764 Revision Links: -------------- http://swig.svn.sourceforge.net/swig/?rev=12764&view=rev Modified Paths: -------------- trunk/CHANGES trunk/CHANGES.current trunk/Examples/test-suite/common.mk trunk/Source/Swig/typemap.c Added Paths: ----------- trunk/Examples/test-suite/typemap_template_parm_typedef.i Modified: trunk/CHANGES =================================================================== --- trunk/CHANGES 2012-05-11 19:20:07 UTC (rev 13070) +++ trunk/CHANGES 2012-05-11 21:23:37 UTC (rev 13071) @@ -362,7 +362,7 @@ namespace std { template<class Key, class T> struct map { class iterator; - } + }; } iterator was scoped as std::iterator, but now it is correctly std::map<Key, T>::iterator; @@ -374,10 +374,10 @@ template<class Key, class T, class C = int> struct Map { typedef Key key_type; typedef T mapped_type; - } + }; } - tyepdef double DOUBLE; - %typemap(MM) Std::Map<int, DOUBLE>; + typedef double DOUBLE; + %template(MM) Std::Map<int, DOUBLE>; All symbols within Map will be resolved correctly, eg key_type and mapped_type no matter if the wrapped code uses Std::Map<int, double> or std::Map<int, DOUBLE> or Std::Map<int, double, int> Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-05-11 19:20:07 UTC (rev 13070) +++ trunk/CHANGES.current 2012-05-11 21:23:37 UTC (rev 13071) @@ -5,6 +5,12 @@ Version 2.0.7 (in progress) =========================== +2012-05-11: wsfulton + SF bug #3525050 - Fix regression introduced in swig-2.0.5 whereby defining one typemap + method such as an 'out' typemap may hide another typemap method such as an 'in' typemap - + only occurs when the type is a template type where the template parameters are the same + via a typedef. + 2012-05-10: olly [PHP] Fix the constant typemaps for SWIGTYPE, etc - previously these used the wrong name for renamed constants. Add Modified: trunk/Examples/test-suite/common.mk =================================================================== --- trunk/Examples/test-suite/common.mk 2012-05-11 19:20:07 UTC (rev 13070) +++ trunk/Examples/test-suite/common.mk 2012-05-11 21:23:37 UTC (rev 13071) @@ -430,6 +430,7 @@ typemap_ns_using \ typemap_numinputs \ typemap_template \ + typemap_template_parm_typedef \ typemap_out_optimal \ typemap_qualifier_strip \ typemap_variables \ Added: trunk/Examples/test-suite/typemap_template_parm_typedef.i =================================================================== --- trunk/Examples/test-suite/typemap_template_parm_typedef.i (rev 0) +++ trunk/Examples/test-suite/typemap_template_parm_typedef.i 2012-05-11 21:23:37 UTC (rev 13071) @@ -0,0 +1,48 @@ +%module typemap_template_parm_typedef + +%typemap(in) SWIGTYPE " _in_will_not_compile_ " +%typemap(in) SWIGTYPE * " _in_will_not_compile_ " + +%typemap(out) SWIGTYPE " _out_will_not_compile_ " +%typemap(out) SWIGTYPE * " _out_will_not_compile_ " + +%{ +#include <vector> +#include <list> +#include <deque> + + namespace jada { + typedef unsigned int uint; + void test_no_typedef(std::list<unsigned int> bada) {} + void test_typedef(std::vector<uint> bada) {} + std::deque<unsigned int> no_typedef_out() {} + } +%} + +%typemap(in) std::list<unsigned int> (std::list<unsigned int> tmp) { + $1 = tmp; +} + +%typemap(in) std::vector<unsigned int> (std::vector<unsigned int> tmp) { + $1 = tmp; +} + +%typemap(out) std::list<unsigned int> { +} + +// The presennce of this 'out' typemap was hiding the std::vector<unsigned int> 'in' typemap in swig-2.0.5 and swig-2.0.6 +%typemap(out) std::vector<jada::uint> { +} + +// This typemap was not used for no_typedef_out in 2.0.4 and earlier +%typemap(out) std::deque<jada::uint> { + $result = 0; +} + +namespace jada { + typedef unsigned int uint; + void test_no_typedef(std::list<uint> bada); + void test_typedef(std::vector<uint> bada); + std::deque<unsigned int> no_typedef_out(); +} + Modified: trunk/Source/Swig/typemap.c =================================================================== --- trunk/Source/Swig/typemap.c 2012-05-11 19:20:07 UTC (rev 13070) +++ trunk/Source/Swig/typemap.c 2012-05-11 21:23:37 UTC (rev 13071) @@ -89,13 +89,16 @@ return tm; } -static void set_typemap(int tm_scope, const SwigType *type, Hash *tm) { +static void set_typemap(int tm_scope, const SwigType *type, Hash **tmhash) { SwigType *hashtype = 0; + Hash *new_tm = 0; + assert(*tmhash == 0); if (SwigType_istemplate(type)) { SwigType *rty = SwigType_typedef_resolve_all(type); String *ty = Swig_symbol_template_deftype(rty, 0); String *tyq = Swig_symbol_type_qualify(ty, 0); hashtype = SwigType_remove_global_scope_prefix(tyq); + *tmhash = Getattr(typemaps[tm_scope], hashtype); Delete(rty); Delete(tyq); Delete(ty); @@ -103,10 +106,17 @@ hashtype = SwigType_remove_global_scope_prefix(type); } + if (!*tmhash) { + /* this type has not been seen before even after resolving template parameter types */ + new_tm = NewHash(); + *tmhash = new_tm; + } + /* note that the unary scope operator (::) prefix indicating global scope has been removed from the type */ - Setattr(typemaps[tm_scope], hashtype, tm); + Setattr(typemaps[tm_scope], hashtype, *tmhash); Delete(hashtype); + Delete(new_tm); } @@ -210,9 +220,7 @@ /* See if this type has been seen before */ tm = get_typemap(tm_scope, type); if (!tm) { - tm = NewHash(); - set_typemap(tm_scope, type, tm); - Delete(tm); + set_typemap(tm_scope, type, &tm); } if (pname) { /* See if parameter has been seen before */ @@ -476,9 +484,7 @@ type = Getattr(lastdp, "type"); tm = get_typemap(tm_scope, type); if (!tm) { - tm = NewHash(); - set_typemap(tm_scope, type, tm); - Delete(tm); + set_typemap(tm_scope, type, &tm); } name = Getattr(lastdp, "name"); if (name) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-05-11 23:13:42
|
Revision: 13072 http://swig.svn.sourceforge.net/swig/?rev=13072&view=rev Author: wsfulton Date: 2012-05-11 23:13:35 +0000 (Fri, 11 May 2012) Log Message: ----------- Fix uninitialised size variable in char **STRING_ARRAY regression Modified Paths: -------------- trunk/CHANGES.current trunk/Lib/java/various.i Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-05-11 21:23:37 UTC (rev 13071) +++ trunk/CHANGES.current 2012-05-11 23:13:35 UTC (rev 13072) @@ -6,6 +6,10 @@ =========================== 2012-05-11: wsfulton + [Java] SF patch #3522611 Fix uninitialised size regression in char **STRING_ARRAY + introduced in swig-2.0.6. + +2012-05-11: wsfulton SF bug #3525050 - Fix regression introduced in swig-2.0.5 whereby defining one typemap method such as an 'out' typemap may hide another typemap method such as an 'in' typemap - only occurs when the type is a template type where the template parameters are the same Modified: trunk/Lib/java/various.i =================================================================== --- trunk/Lib/java/various.i 2012-05-11 21:23:37 UTC (rev 13071) +++ trunk/Lib/java/various.i 2012-05-11 23:13:35 UTC (rev 13072) @@ -46,6 +46,7 @@ $1[i] = 0; } else { $1 = 0; + size = 0; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-05-11 23:14:01
|
Revision: 13073 http://swig.svn.sourceforge.net/swig/?rev=13073&view=rev Author: wsfulton Date: 2012-05-11 23:13:55 +0000 (Fri, 11 May 2012) Log Message: ----------- Fix possible uninitialised memory access in char **STRING_OUT typemap Modified Paths: -------------- trunk/CHANGES.current trunk/Lib/java/various.i Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-05-11 23:13:35 UTC (rev 13072) +++ trunk/CHANGES.current 2012-05-11 23:13:55 UTC (rev 13073) @@ -6,6 +6,10 @@ =========================== 2012-05-11: wsfulton + [Java] SF patch #3522674 Fix possible uninitialised memory access in char **STRING_OUT + typemap. + +2012-05-11: wsfulton [Java] SF patch #3522611 Fix uninitialised size regression in char **STRING_ARRAY introduced in swig-2.0.6. Modified: trunk/Lib/java/various.i =================================================================== --- trunk/Lib/java/various.i 2012-05-11 23:13:35 UTC (rev 13072) +++ trunk/Lib/java/various.i 2012-05-11 23:13:55 UTC (rev 13073) @@ -114,6 +114,7 @@ return $null; } $1 = &temp; + *$1 = 0; } %typemap(argout) char **STRING_OUT { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-05-11 23:56:00
|
Revision: 13074 http://swig.svn.sourceforge.net/swig/?rev=13074&view=rev Author: wsfulton Date: 2012-05-11 23:55:54 +0000 (Fri, 11 May 2012) Log Message: ----------- Fix unintended uninitialised memory access in OUTPUT typemaps Modified Paths: -------------- trunk/CHANGES.current trunk/Lib/java/typemaps.i Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-05-11 23:13:55 UTC (rev 13073) +++ trunk/CHANGES.current 2012-05-11 23:55:54 UTC (rev 13074) @@ -6,6 +6,9 @@ =========================== 2012-05-11: wsfulton + [Java] SF patch #3522855 Fix unintended uninitialised memory access in OUTPUT typemaps. + +2012-05-11: wsfulton [Java] SF patch #3522674 Fix possible uninitialised memory access in char **STRING_OUT typemap. Modified: trunk/Lib/java/typemaps.i =================================================================== --- trunk/Lib/java/typemaps.i 2012-05-11 23:13:55 UTC (rev 13073) +++ trunk/Lib/java/typemaps.i 2012-05-11 23:55:54 UTC (rev 13074) @@ -195,6 +195,7 @@ SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, "Array must contain at least 1 element"); return $null; } + temp = ($*1_ltype)0; $1 = &temp; } @@ -226,6 +227,20 @@ #undef OUTPUT_TYPEMAP +%typemap(in) bool *OUTPUT($*1_ltype temp), bool &OUTPUT($*1_ltype temp) +{ + if (!$input) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "array null"); + return $null; + } + if (JCALL1(GetArrayLength, jenv, $input) == 0) { + SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, "Array must contain at least 1 element"); + return $null; + } + temp = false; + $1 = &temp; +} + /* Convert to BigInteger - byte array holds number in 2's complement big endian format */ /* Use first element in BigInteger array for output */ /* Overrides the typemap in the OUTPUT_TYPEMAP macro */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ol...@us...> - 2012-05-12 13:26:22
|
Revision: 13077 http://swig.svn.sourceforge.net/swig/?rev=13077&view=rev Author: olly Date: 2012-05-12 13:26:16 +0000 (Sat, 12 May 2012) Log Message: ----------- [PHP] Avoid using zend_error_noreturn() as it doesn't work with all builds of PHP (SF bug #3166423). Instead we now wrap it in a SWIG_FAIL() function which we annotate as "noreturn" for GCC to avoids warnings. This also reduces the size of the compiled wrapper (e.g. the stripped size is 6% for Xapian's PHP bindings). Modified Paths: -------------- trunk/CHANGES.current trunk/Lib/php/phprun.swg trunk/Source/Modules/php.cxx Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-05-12 13:21:55 UTC (rev 13076) +++ trunk/CHANGES.current 2012-05-12 13:26:16 UTC (rev 13077) @@ -5,6 +5,13 @@ Version 2.0.7 (in progress) =========================== +2012-05-12: olly + [PHP] Avoid using zend_error_noreturn() as it doesn't work with all + builds of PHP (SF bug #3166423). Instead we now wrap it in a + SWIG_FAIL() function which we annotate as "noreturn" for GCC to + avoids warnings. This also reduces the size of the compiled + wrapper (e.g. the stripped size is 6% for Xapian's PHP bindings). + 2012-05-11: wsfulton [Java] SF patch #3522855 Fix unintended uninitialised memory access in OUTPUT typemaps. Modified: trunk/Lib/php/phprun.swg =================================================================== --- trunk/Lib/php/phprun.swg 2012-05-12 13:21:55 UTC (rev 13076) +++ trunk/Lib/php/phprun.swg 2012-05-12 13:26:16 UTC (rev 13077) @@ -12,6 +12,7 @@ #include "zend_exceptions.h" #include "php.h" #include "ext/standard/php_string.h" +#include <stdlib.h> /* for abort(), used in generated code. */ #ifdef ZEND_RAW_FENTRY /* ZEND_RAW_FENTRY was added somewhere between 5.2.0 and 5.2.3 */ Modified: trunk/Source/Modules/php.cxx =================================================================== --- trunk/Source/Modules/php.cxx 2012-05-12 13:21:55 UTC (rev 13076) +++ trunk/Source/Modules/php.cxx 2012-05-12 13:26:16 UTC (rev 13077) @@ -409,11 +409,19 @@ Printf(s_header, "#define SWIG_ErrorCode() (%s_globals.error_code)\n", module); Printf(s_header, "#endif\n\n"); - Printf(s_header, "// Allow the user to workaround a PHP bug on some platforms/architectures by\n"); - Printf(s_header, "// compiling with -DSWIG_ZEND_ERROR_NORETURN=zend_error\n"); - Printf(s_header, "#ifndef SWIG_ZEND_ERROR_NORETURN\n"); - Printf(s_header, "# define SWIG_ZEND_ERROR_NORETURN zend_error_noreturn\n"); - Printf(s_header, "#endif\n\n"); + /* The following can't go in Lib/php/phprun.swg as it uses SWIG_ErrorMsg(), etc + * which has to be dynamically generated as it depends on the module name. + */ + Append(s_header, "#ifdef __GNUC__\n"); + Append(s_header, "static void SWIG_FAIL() __attribute__ ((__noreturn__));\n"); + Append(s_header, "#endif\n\n"); + Append(s_header, "static void SWIG_FAIL() {\n"); + Append(s_header, " zend_error(SWIG_ErrorCode(), \"%s\", SWIG_ErrorMsg());\n"); + // zend_error() should never return with the parameters we pass, but if it + // does, we really don't want to let SWIG_FAIL() return. This also avoids + // a warning about returning from a function marked as "__noreturn__". + Append(s_header, " abort();\n"); + Append(s_header, "}\n\n"); Printf(s_header, "static void %s_init_globals(zend_%s_globals *globals ) {\n", module, module); Printf(s_header, " globals->error_msg = default_error_msg;\n"); @@ -716,7 +724,7 @@ Printf(f->code, "SWIG_ErrorCode() = E_ERROR;\n"); Printf(f->code, "SWIG_ErrorMsg() = \"No matching function for overloaded '%s'\";\n", symname); - Printv(f->code, "zend_error(SWIG_ErrorCode(),\"%s\",SWIG_ErrorMsg());\n", NIL); + Printv(f->code, "SWIG_FAIL();\n", NIL); Printv(f->code, "}\n", NIL); Wrapper_print(f, s_wrappers); @@ -1000,11 +1008,7 @@ /* Error handling code */ Printf(f->code, "fail:\n"); Printv(f->code, cleanup, NIL); - /* This could be zend_error_noreturn(), but that's buggy in PHP ~5.3 and - * using zend_error() here shouldn't generate a warning, so just use that. - * At worst this may result in slightly less good code. - */ - Printv(f->code, "zend_error(SWIG_ErrorCode(),\"%s\",SWIG_ErrorMsg());", NIL); + Append(f->code, "SWIG_FAIL();\n"); Printf(f->code, "}\n"); @@ -2320,11 +2324,7 @@ Append(f->code, "return;\n"); Append(f->code, "fail:\n"); - /* This could be zend_error_noreturn(), but that's buggy in PHP ~5.3 and - * using zend_error() here shouldn't generate a warning, so just use that. - * At worst this may result in slightly less good code. - */ - Append(f->code, "zend_error(SWIG_ErrorCode(),\"%s\",SWIG_ErrorMsg());\n"); + Append(f->code, "SWIG_FAIL();\n"); Printf(f->code, "}\n"); Wrapper_print(f, s_wrappers); @@ -2715,15 +2715,7 @@ } Append(w->code, "fail:\n"); - if (!is_void) { - Append(w->code, "SWIG_ZEND_ERROR_NORETURN(SWIG_ErrorCode(),\"%s\",SWIG_ErrorMsg());\n"); - } else { - /* This could be zend_error_noreturn(), but that's buggy in PHP ~5.3 and - * using zend_error() here shouldn't generate a warning, so just use that. - * At worst this may result in slightly less good code. - */ - Append(w->code, "zend_error(SWIG_ErrorCode(),\"%s\",SWIG_ErrorMsg());\n"); - } + Append(w->code, "SWIG_FAIL();\n"); Append(w->code, "}\n"); // We expose protected methods via an extra public inline method which makes a straight call to the wrapped class' method This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ol...@us...> - 2012-05-12 13:52:06
|
Revision: 13079 http://swig.svn.sourceforge.net/swig/?rev=13079&view=rev Author: olly Date: 2012-05-12 13:52:00 +0000 (Sat, 12 May 2012) Log Message: ----------- [PHP] Fix memory leak in code generated for a callback. Patch from SF bug #3510806. Modified Paths: -------------- trunk/CHANGES.current trunk/Source/Modules/php.cxx Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-05-12 13:31:49 UTC (rev 13078) +++ trunk/CHANGES.current 2012-05-12 13:52:00 UTC (rev 13079) @@ -6,6 +6,10 @@ =========================== 2012-05-12: olly + [PHP] Fix memory leak in code generated for a callback. Patch from + SF bug #3510806. + +2012-05-12: olly [PHP] Avoid using zend_error_noreturn() as it doesn't work with all builds of PHP (SF bug #3166423). Instead we now wrap it in a SWIG_FAIL() function which we annotate as "noreturn" for GCC to Modified: trunk/Source/Modules/php.cxx =================================================================== --- trunk/Source/Modules/php.cxx 2012-05-12 13:31:49 UTC (rev 13078) +++ trunk/Source/Modules/php.cxx 2012-05-12 13:52:00 UTC (rev 13079) @@ -2575,6 +2575,7 @@ Replaceall(tm, "$owner", "0"); Printv(wrap_args, "zval ", source, ";\n", NIL); Printf(wrap_args, "args[%d] = &%s;\n", idx - 1, source); + Printv(wrap_args, "INIT_ZVAL(", source, ");\n", NIL); Printv(wrap_args, tm, "\n", NIL); Putc('O', parse_args); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kw...@us...> - 2012-05-14 09:23:16
|
Revision: 13083 http://swig.svn.sourceforge.net/swig/?rev=13083&view=rev Author: kwwette Date: 2012-05-14 09:23:06 +0000 (Mon, 14 May 2012) Log Message: ----------- Link Octave tests and examples against Octave libraries - Tests for bugs associated with loading .oct modules Modified Paths: -------------- trunk/Examples/Makefile.in trunk/configure.in Modified: trunk/Examples/Makefile.in =================================================================== --- trunk/Examples/Makefile.in 2012-05-14 05:11:02 UTC (rev 13082) +++ trunk/Examples/Makefile.in 2012-05-14 09:23:06 UTC (rev 13083) @@ -331,12 +331,11 @@ ################################################################## # Make sure these locate your Octave installation -OCTAVE_INCLUDE= $(DEFS) @OCTAVEEXT@ -OCTAVE_LIB = OCTAVE = @OCTAVE@ -qf +OCTAVE_CXX = $(DEFS) @OCTAVE_CPPFLAGS@ @OCTAVE_CXXFLAGS@ # Extra Octave specific dynamic linking options -OCTAVE_DLNK = @OCTAVEDYNAMICLINKING@ +OCTAVE_DLNK = @OCTAVE_LDFLAGS@ OCTAVE_SO = @OCTAVE_SO@ # ---------------------------------------------------------------- @@ -346,7 +345,7 @@ octave: $(SRCS) $(SWIG) -octave $(SWIGOPT) $(INTERFACEPATH) - $(CXX) -g -c $(CCSHARED) $(CFLAGS) $(ICXXSRCS) $(INCLUDES) -I$(OCTAVE_INCLUDE) + $(CXX) -g -c $(CCSHARED) $(CFLAGS) $(ICXXSRCS) $(INCLUDES) $(OCTAVE_CXX) $(CC) -g -c $(CCSHARED) $(CFLAGS) $(SRCS) $(CSRCS) $(INCLUDES) $(LDSHARED) $(CFLAGS) $(OBJS) $(IOBJS) $(OCTAVE_DLNK) $(LIBS) -o $(LIBPREFIX)$(TARGET)$(OCTAVE_SO) @@ -356,7 +355,7 @@ octave_cpp: $(SRCS) $(SWIG) -c++ -octave $(SWIGOPT) $(INTERFACEPATH) - $(CXX) -g -c $(CCSHARED) $(CFLAGS) $(ICXXSRCS) $(SRCS) $(CXXSRCS) $(INCLUDES) -I$(OCTAVE_INCLUDE) + $(CXX) -g -c $(CCSHARED) $(CFLAGS) $(ICXXSRCS) $(SRCS) $(CXXSRCS) $(INCLUDES) $(OCTAVE_CXX) $(CXXSHARED) -g $(CFLAGS) $(OBJS) $(IOBJS) $(OCTAVE_DLNK) $(LIBS) $(CPP_DLLIBS) -o $(LIBPREFIX)$(TARGET)$(OCTAVE_SO) # ----------------------------------------------------------------- Modified: trunk/configure.in =================================================================== --- trunk/configure.in 2012-05-14 05:11:02 UTC (rev 13082) +++ trunk/configure.in 2012-05-14 09:23:06 UTC (rev 13083) @@ -900,7 +900,6 @@ #---------------------------------------------------------------- OCTAVEBIN= -OCTAVEDYNAMICLINKING= OCTAVE_SO=.oct AC_ARG_WITH(octave, AS_HELP_STRING([--without-octave], [Disable Octave]) @@ -908,58 +907,51 @@ # First, check for "--without-octave" or "--with-octave=no". if test x"${OCTAVEBIN}" = xno -o x"${with_alllang}" = xno ; then -AC_MSG_NOTICE([Disabling Octave]) -OCTAVE= -else + AC_MSG_NOTICE([Disabling Octave]) + OCTAVE= # First figure out what the name of Octave is +elif test "x$OCTAVEBIN" = xyes; then + AC_CHECK_PROGS(OCTAVE, octave) -if test "x$OCTAVEBIN" = xyes; then -AC_CHECK_PROGS(OCTAVE, octave) else -OCTAVE="$OCTAVEBIN" + OCTAVE="$OCTAVEBIN" fi - -AC_MSG_CHECKING(for Octave header files) if test -n "$OCTAVE"; then - OCTAVECONFIG=[`echo $OCTAVEBIN | sed 's|octave\([^/]*\)$|octave-config\1|'`] - if test -r "$OCTAVECONFIG"; then - OCTAVEDIR=`$OCTAVECONFIG -p OCTINCLUDEDIR | sed 's|/octave$||'` - else - OCTAVEDIR="/usr/include" - fi - if test "$OCTAVEDIR" != ""; then - dirs="$OCTAVEDIR/octave $OCTAVEDIR" - OCTAVEEXT="" - for i in $dirs; do - if test -r $i/octave/oct.h; then - OCTAVEEXT="$i" - break; - fi - done - if test "$OCTAVEEXT" = "" ; then - AC_MSG_RESULT(not found) - else - AC_MSG_RESULT($OCTAVEEXT) - fi - - AC_MSG_CHECKING(for Octave compiler options) - OCTAVECCFLAGS="" - AC_MSG_RESULT($OCTAVECCFLAGS) - fi + AC_MSG_CHECKING([for mkoctfile]) + AS_IF([test "x`${OCTAVE} -qfH --eval 'mkoctfile -p CXX' 2>/dev/null`" != x],[ + AC_MSG_RESULT([yes]) + ],[ + AC_MSG_ERROR([mkoctfile is not installed]) + ]) + AC_MSG_CHECKING([for Octave preprocessor flags]) + OCTAVE_CPPFLAGS= + for n in CPPFLAGS INCFLAGS; do + OCTAVE_CPPFLAGS="${OCTAVE_CPPFLAGS} "`$OCTAVE -qfH --eval "mkoctfile -p $n"` + done + AC_MSG_RESULT($OCTAVE_CPPFLAGS) + AC_MSG_CHECKING([for Octave compiler flags]) + OCTAVE_CXXFLAGS= + for n in ALL_CXXFLAGS; do + OCTAVE_CXXFLAGS="${OCTAVE_CXXFLAGS} "`$OCTAVE -qfH --eval "mkoctfile -p $n"` + done + AC_MSG_RESULT($OCTAVE_CXXFLAGS) + AC_MSG_CHECKING([for Octave linker flags]) + OCTAVE_LDFLAGS= + for n in RDYNAMIC_FLAG LFLAGS RLD_FLAG OCTAVE_LIBS LIBS; do + OCTAVE_LDFLAGS="${OCTAVE_LDFLAGS} "`$OCTAVE -qfH --eval "mkoctfile -p $n"` + done + AC_MSG_RESULT($OCTAVE_LDFLAGS) else - AC_MSG_RESULT(could not figure out how to run octave) + AC_MSG_RESULT(could not figure out how to run octave) fi -fi - AC_SUBST(OCTAVE) -AC_SUBST(OCTAVEEXT) AC_SUBST(OCTAVE_SO) -AC_SUBST(OCTAVEDYNAMICLINKING) -AC_SUBST(OCTAVELIB) -AC_SUBST(OCTAVECCFLAGS) +AC_SUBST(OCTAVE_CPPFLAGS) +AC_SUBST(OCTAVE_CXXFLAGS) +AC_SUBST(OCTAVE_LDFLAGS) #---------------------------------------------------------------- # Look for java @@ -2215,7 +2207,7 @@ SKIP_OCTAVE= -if test -z "$OCTAVE" || test -z "$OCTAVEEXT" ; then +if test -z "$OCTAVE" ; then SKIP_OCTAVE="1" fi AC_SUBST(SKIP_OCTAVE) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kw...@us...> - 2012-05-14 09:24:09
|
Revision: 13087 http://swig.svn.sourceforge.net/swig/?rev=13087&view=rev Author: kwwette Date: 2012-05-14 09:24:00 +0000 (Mon, 14 May 2012) Log Message: ----------- Declare Octave public wrapping functions with DEFUNX_DLD - New helper function Octave_begin_function writes function declaration and installer function definition using SWIG_DEFUN macro, which in turn uses Octave DEFUNX_DLD macro - Can now use Octave's dynamic module loader to load functions safely - Link documentation of public wrapping functions through DEFUNX_DLD Modified Paths: -------------- trunk/Lib/octave/octrun.swg trunk/Source/Modules/octave.cxx Modified: trunk/Lib/octave/octrun.swg =================================================================== --- trunk/Lib/octave/octrun.swg 2012-05-14 09:23:45 UTC (rev 13086) +++ trunk/Lib/octave/octrun.swg 2012-05-14 09:24:00 UTC (rev 13087) @@ -14,6 +14,12 @@ #endif +#if OCTAVE_API_VERSION_NUMBER < 37 +#define SWIG_DEFUN(cname, wname, doc) DEFUNX_DLD(#cname, wname, FS ## cname, args, nargout, doc) +#else +#define SWIG_DEFUN(cname, wname, doc) DEFUNX_DLD(#cname, wname, G ## cname, args, nargout, doc) +#endif + SWIGRUNTIME bool SWIG_check_num_args(const char *func_name, int num_args, int max_args, int min_args, int varargs) { if (num_args > max_args && !varargs) error("function %s takes at most %i arguments", func_name, max_args); Modified: trunk/Source/Modules/octave.cxx =================================================================== --- trunk/Source/Modules/octave.cxx 2012-05-14 09:23:45 UTC (rev 13086) +++ trunk/Source/Modules/octave.cxx 2012-05-14 09:24:00 UTC (rev 13087) @@ -50,6 +50,16 @@ Hash *docs; + void Octave_begin_function(Node *n, File *f, const_String_or_char_ptr cname, const_String_or_char_ptr wname, bool dld) { + if (dld) { + String *tname = texinfo_name(n, "std::string()"); + Printf(f, "SWIG_DEFUN( %s, %s, %s ) {", cname, wname, tname); + } + else { + Printf(f, "static octave_value_list %s (const octave_value_list& args, int nargout) {", wname); + } + } + public: OCTAVE():f_begin(0), f_runtime(0), f_header(0), f_doc(0), f_wrappers(0), f_init(0), f_initbeforefunc(0), f_directors(0), f_directors_h(0), @@ -293,14 +303,14 @@ return !Len(synopsis) && !Len(decl_info) && !Len(cdecl_info) && !Len(args_info); } - String *texinfo_name(Node* n) { + String *texinfo_name(Node* n, const char* defval = "0") { String *tname = NewString(""); String *iname = Getattr(n, "sym:name"); String *wname = Swig_name_wrapper(iname); Node* d = Getattr(docs, wname); if (is_empty_doc_node(d)) - Printf(tname, "0"); + Printf(tname, defval); else Printf(tname, "%s_texinfo", wname); @@ -543,8 +553,11 @@ if (overloaded) Append(overname, Getattr(n, "sym:overname")); - Printv(f->def, "static octave_value_list ", overname, " (const octave_value_list& args, int nargout) {", NIL); + if (!overloaded || last_overload) + process_autodoc(n); + Octave_begin_function(n, f->def, iname, overname, !overloaded); + emit_parameter_variables(l, f); emit_attach_parmmaps(l, f); Setattr(n, "wrap:parms", l); @@ -743,7 +756,6 @@ dispatchFunction(n); if (!overloaded || last_overload) { - process_autodoc(n); String *tname = texinfo_name(n); Printf(s_global_tab, "{\"%s\",%s,0,0,2,%s},\n", iname, wname, tname); Delete(tname); @@ -766,7 +778,7 @@ String *dispatch = Swig_overload_dispatch(n, "return %s(args, nargout);", &maxargs); String *tmp = NewString(""); - Printv(f->def, "static octave_value_list ", wname, " (const octave_value_list& args, int nargout) {", NIL); + Octave_begin_function(n, f->def, iname, wname, true); Wrapper_add_local(f, "argc", "int argc = args.length()"); Printf(tmp, "octave_value_ref argv[%d]={", maxargs); for (int j = 0; j < maxargs; ++j) @@ -800,7 +812,10 @@ String *getname = Swig_name_get(NSPACE_TODO, iname); String *setname = Swig_name_set(NSPACE_TODO, iname); - Printf(setf->def, "static octave_value_list _wrap_%s(const octave_value_list& args,int nargout) {", setname); + String *getwname = Swig_name_wrapper(getname); + String *setwname = Swig_name_wrapper(setname); + + Octave_begin_function(n, setf->def, setname, setwname, true); Printf(setf->def, "if (!SWIG_check_num_args(\"%s_set\",args.length(),1,1,0)) return octave_value_list();", iname); if (is_assignable(n)) { Setattr(n, "wrap:name", setname); @@ -826,7 +841,7 @@ Setattr(n, "wrap:name", getname); int addfail = 0; - Printf(getf->def, "static octave_value_list _wrap_%s(const octave_value_list& args,int nargout) {", getname); + Octave_begin_function(n, getf->def, getname, getwname, true); Wrapper_add_local(getf, "obj", "octave_value obj"); if ((tm = Swig_typemap_lookup("varout", n, name, 0))) { Replaceall(tm, "$source", name); @@ -845,8 +860,11 @@ Append(getf->code, "}\n"); Wrapper_print(getf, f_wrappers); - Printf(s_global_tab, "{\"%s\",0,_wrap_%s,_wrap_%s,2,0},\n", iname, getname, setname); + Printf(s_global_tab, "{\"%s\",0,%s,%s,2,0},\n", iname, getwname, setwname); + Delete(getwname); + Delete(setwname); + return SWIG_OK; } @@ -937,20 +955,21 @@ String *nspace = Getattr(n, "sym:nspace"); String *cname = Swig_name_disown(nspace, class_name); String *wcname = Swig_name_wrapper(cname); - String *disown_shadow = NewString(""); - Printf(disown_shadow, "static octave_value_list %s_shadow " "(const octave_value_list& args, int nargout) {\n", wcname); - Printf(disown_shadow, " if (args.length()!=1) {\n"); - Printf(disown_shadow, " error(\"disown takes no arguments\");\n"); - Printf(disown_shadow, " return octave_value_list();\n"); - Printf(disown_shadow, " }\n"); - Printf(disown_shadow, " %s (args, nargout);\n", wcname); - Printf(disown_shadow, " return args;\n"); - Printf(disown_shadow, "}\n"); - Printv(f_wrappers, disown_shadow, NIL); - Delete(disown_shadow); - Printf(s_members_tab, "{\"__disown\",%s_shadow,0,0,0,0},\n", wcname); + String *cnameshdw = NewStringf("%s_shadow", cname); + String *wcnameshdw = Swig_name_wrapper(cnameshdw); + Octave_begin_function(n, f_wrappers, cnameshdw, wcnameshdw, true); + Printf(f_wrappers, " if (args.length()!=1) {\n"); + Printf(f_wrappers, " error(\"disown takes no arguments\");\n"); + Printf(f_wrappers, " return octave_value_list();\n"); + Printf(f_wrappers, " }\n"); + Printf(f_wrappers, " %s (args, nargout);\n", wcname); + Printf(f_wrappers, " return args;\n"); + Printf(f_wrappers, "}\n"); + Printf(s_members_tab, "{\"__disown\",%s,0,0,0,0},\n", wcnameshdw); Delete(wcname); Delete(cname); + Delete(wcnameshdw); + Delete(cnameshdw); } Printf(s_members_tab, "{0,0,0,0}\n};\n"); @@ -1049,15 +1068,18 @@ assert(s_members_tab); assert(class_name); String *symname = Getattr(n, "sym:name"); - String *getname = Swig_name_wrapper(Swig_name_get(NSPACE_TODO, Swig_name_member(NSPACE_TODO, class_name, symname))); - String *setname = GetFlag(n, "feature:immutable") ? - NewString("octave_set_immutable") : Swig_name_wrapper(Swig_name_set(NSPACE_TODO, Swig_name_member(NSPACE_TODO, class_name, symname))); + String *getname = Swig_name_get(NSPACE_TODO, Swig_name_member(NSPACE_TODO, class_name, symname)); + String *setname = Swig_name_set(NSPACE_TODO, Swig_name_member(NSPACE_TODO, class_name, symname)); + String *getwname = Swig_name_wrapper(getname); + String *setwname = GetFlag(n, "feature:immutable") ? NewString("octave_set_immutable") : Swig_name_wrapper(setname); assert(s_members_tab); - Printf(s_members_tab, "{\"%s\",0,%s,%s,0,0},\n", symname, getname, setname); + Printf(s_members_tab, "{\"%s\",0,%s,%s,0,0},\n", symname, getwname, setwname); Delete(getname); Delete(setname); + Delete(getwname); + Delete(setwname); return SWIG_OK; } @@ -1132,15 +1154,18 @@ assert(s_members_tab); assert(class_name); String *symname = Getattr(n, "sym:name"); - String *getname = Swig_name_wrapper(Swig_name_get(NSPACE_TODO, Swig_name_member(NSPACE_TODO, class_name, symname))); - String *setname = GetFlag(n, "feature:immutable") ? - NewString("octave_set_immutable") : Swig_name_wrapper(Swig_name_set(NSPACE_TODO, Swig_name_member(NSPACE_TODO, class_name, symname))); + String *getname = Swig_name_get(NSPACE_TODO, Swig_name_member(NSPACE_TODO, class_name, symname)); + String *setname = Swig_name_set(NSPACE_TODO, Swig_name_member(NSPACE_TODO, class_name, symname)); + String *getwname = Swig_name_wrapper(getname); + String *setwname = GetFlag(n, "feature:immutable") ? NewString("octave_set_immutable") : Swig_name_wrapper(setname); assert(s_members_tab); - Printf(s_members_tab, "{\"%s\",0,%s,%s,1,0},\n", symname, getname, setname); + Printf(s_members_tab, "{\"%s\",0,%s,%s,1,0},\n", symname, getwname, setwname); Delete(getname); Delete(setname); + Delete(getwname); + Delete(setwname); } return SWIG_OK; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kw...@us...> - 2012-05-14 09:24:26
|
Revision: 13088 http://swig.svn.sourceforge.net/swig/?rev=13088&view=rev Author: kwwette Date: 2012-05-14 09:24:15 +0000 (Mon, 14 May 2012) Log Message: ----------- New Octave module loading behaviour - Use call syntax instead of cmdline to choose global/noglobal load: global: 'example;', noglobal: 'example = example;' - All functions loaded with Octave 'autoload' command; correctly loads .oct module and prevents segfault in Octave 3.0.5 - Functions no longer installed as global variables as well, so global operator dispatch now only looks for functions - Octave at-exit function created from string, not function, so no dependence on loaded .oct files at cleanup time - C at-exit function now immediately exits Octave (with correct status) to prevent seg-fault due to dodgy memory cleanup in some Octave versions - Documentation string for module loading function Modified Paths: -------------- trunk/Lib/octave/octrun.swg trunk/Lib/octave/octruntime.swg trunk/Source/Modules/octave.cxx Modified: trunk/Lib/octave/octrun.swg =================================================================== --- trunk/Lib/octave/octrun.swg 2012-05-14 09:24:00 UTC (rev 13087) +++ trunk/Lib/octave/octrun.swg 2012-05-14 09:24:15 UTC (rev 13088) @@ -504,37 +504,9 @@ rhs.members.clear(); } - void install_global(bool global_load) { - for (member_map::const_iterator it = members.begin(); it != members.end(); ++it) { - bool is_global_op = (it->first.substr(0, strlen(SWIG_op_prefix)) == SWIG_op_prefix); - bool is_func_defined = (it->second.first && it->second.first->method); - if (is_func_defined && (is_global_op || global_load)) { - install_builtin_function(it->second.first->method, it->first, - it->second.first->doc ? it->second.first->doc : std::string()); - } - octave_value global_val = is_global_op ? make_fcn_handle(it->first) : it->second.second; - if (global_val.is_defined() && (is_global_op || global_load)) { -#if OCTAVE_API_VERSION_NUMBER<37 - link_to_global_variable(curr_sym_tab->lookup(it->first, true)); -#else - symbol_table::varref(it->first); - symbol_table::mark_global(it->first); -#endif - set_global_value(it->first, global_val); - -#if OCTAVE_API_VERSION_NUMBER<37 - octave_swig_type *ost = Swig::swig_value_deref(global_val); - if (ost) { - const char* h = ost->help_text(); - if (h) { - symbol_record *sr = global_sym_tab->lookup (it->first, true); - sr->document(h); - } - } -#endif - } - } - } + typedef member_map::const_iterator swig_member_const_iterator; + swig_member_const_iterator swig_members_begin() { return members.begin(); } + swig_member_const_iterator swig_members_end() { return members.end(); } void *cast(swig_type_info *type, int *_own, int flags) { if (_own) @@ -835,10 +807,10 @@ // we assume that SWIG_op_prefix-prefixed functions are installed in global namespace // (rather than any module namespace). - octave_value fcn = get_global_value(symbol, true); - if (!fcn.is_function() && !fcn.is_function_handle()) + octave_function *fcn = is_valid_function(symbol, std::string(), false); + if (!fcn) return false; - ret = fcn.subsref("(", std::list < octave_value_list > (1, args), 1); + ret = fcn->do_multi_index_op(1, args)(0); return true; } Modified: trunk/Lib/octave/octruntime.swg =================================================================== --- trunk/Lib/octave/octruntime.swg 2012-05-14 09:24:00 UTC (rev 13087) +++ trunk/Lib/octave/octruntime.swg 2012-05-14 09:24:15 UTC (rev 13088) @@ -1,11 +1,14 @@ %insert(runtime) %{ #include <iostream> #include <octave/oct.h> -#include <octave/parse.h> -#include <octave/ov-fcn-handle.h> #include <octave/Cell.h> +#include <octave/dynamic-ld.h> +#include <octave/oct-env.h> #include <octave/oct-map.h> +#include <octave/ov-fcn-handle.h> +#include <octave/parse.h> #include <octave/toplev.h> +#include <octave/unwind-prot.h> %} %insert(runtime) "swigrun.swg"; @@ -18,9 +21,12 @@ static void SWIG_init_user(octave_swig_type* module_ns); -#if OCTAVE_API_VERSION_NUMBER>=37 -octave_value_list SWIG_atexit_func(const octave_value_list &args, int nargout); -#endif +SWIGINTERN void SWIG_Octave_InstallFunction(octave_function *octloadfcn, std::string name) { + octave_value_list args; + args.append(name); + args.append(octloadfcn->fcn_file_name()); + feval("autoload", args, 0); +} static const char *const subclass_usage = "-*- texinfo -*- \n\ @deftypefn {Loadable Function} {} subclass()\n\ @@ -114,87 +120,94 @@ return octave_value(octave_uint64((unsigned long long) ost->swig_this())); } -DEFUN_DLD (SWIG_name,args,nargout,SWIG_name_d) { +// workaround to prevent octave seg-faulting on exit: register at-exit +// function which exits octave immediately without trying to cleanup memory. +// definitely affects version 3.2.*, not sure about 3.3.*, seems to be +// fixed in version 3.4.* and above. can be turned on/off with macros. +#ifndef SWIG_OCTAVE_NO_SEGFAULT_HACK +#if 36 < OCTAVE_API_VERSION_NUMBER && OCTAVE_API_VERSION_NUMBER < 45 +#define SWIG_OCTAVE_SEGFAULT_HACK +#endif +#endif +#ifdef SWIG_OCTAVE_SEGFAULT_HACK +#define _SWIG_OCT_SEGF_HACK_ATEXIT_FCN(NAME) SWIG_OCT_SEGF_HACK_ATEXIT_FCN_##NAME +#define SWIG_OCT_SEGF_HACK_ATEXIT_FCN(NAME) _SWIG_OCT_SEGF_HACK_ATEXIT_FCN(NAME) +void SWIG_OCT_SEGF_HACK_ATEXIT_FCN(SWIG_name)(void) { + _exit(exit_status); +} +#endif - // determine if module is already loaded - bool already_load; -#if OCTAVE_API_VERSION_NUMBER<37 - { - symbol_record *rec = curr_sym_tab->lookup(SWIG_name_d); - already_load = (rec && rec->is_linked_to_global()); - } -#else - already_load = symbol_table::is_global(SWIG_name_d); +static const char *const SWIG_name_usage = "-*- texinfo -*- \n\ +@deftypefn {Loadable Module} {} " SWIG_name_d "\n\ +Loads the SWIG-generated module `" SWIG_name_d "'.\n\ +\n\ +To load the module into the global namespace:\n\ +@example\n\ +" SWIG_name_d ";\n\ +@end example\n\ +To access the module through a local variable, without loading it globally:\n\ +@example\n\ +" SWIG_name_d " = " SWIG_name_d ";\n\ +@end example\n\ +To access the module locally through a variable named, e.g. @var{modl}:\n\ +@example\n\ +@var{modl} = " SWIG_name_d ";\n\ +@end example\n\ +@end deftypefn"; + +DEFUN_DLD( SWIG_name, args, nargout, SWIG_name_usage ) { + + static octave_swig_type* module_ns = 0; + octave_value_list retval; + + // create module on first function call + if (!module_ns) { + +#ifdef SWIG_OCTAVE_SEGFAULT_HACK + atexit(SWIG_OCT_SEGF_HACK_ATEXIT_FCN(SWIG_name)); #endif - if (!already_load) { - // parse command line - const char* usage="usage: " SWIG_name_d " [-global|-noglobal] [-globals {<name>|.}]"; - bool global_load=SWIG_global_load; - std::string global_name=SWIG_global_name; - for (int j=0;j<args.length();++j) - if (args(j).is_string()) { - if (args(j).string_value()=="-help") { - std::cout << usage << std::endl; - return octave_value_list(); - } else if (args(j).string_value()=="-global") { - global_load = true; - } else if (args(j).string_value()=="-noglobal") { - global_load = false; - } else if (args(j).string_value()=="-globals") { - if (j+1<args.length()&&args(j+1).is_string()) { - global_name = args(j+1).string_value(); - ++j; - } else { - std::cerr << "error: " SWIG_name_d ": option '-globals' requires an argument." << std::endl; - std::cerr << usage << std::endl; - return octave_value_list(); - } - } else { - std::cerr << "error: " SWIG_name_d ": unrecognised argument '" << args(j).string_value() << "'." << std::endl; - std::cerr << usage << std::endl; - return octave_value_list(); - } - } else { - std::cerr << "error: " SWIG_name_d ": unrecognised non-string argument." << std::endl; - std::cerr << usage << std::endl; - return octave_value_list(); - } - - if (global_name != "." && !valid_identifier(global_name)) { - std::cerr << "error: " SWIG_name_d ": '" << global_name << "' is not a valid Octave identifier." << std::endl; - return octave_value_list(); - } - - // load module in base frame -#if OCTAVE_API_VERSION_NUMBER<37 - symbol_table *prev_sym_tab = curr_sym_tab; - curr_sym_tab = top_level_sym_tab; -#else - octave_call_stack::goto_base_frame(); + // workaround bug in octave where installing global variable of custom type and then + // exiting without explicitly clearing the variable causes octave to segfault. +#if OCTAVE_API_VERSION_NUMBER >= 37 + octave_value_list eval_args; + eval_args.append("base"); + eval_args.append("function __swig_atexit__; " + " if mislocked() " + " clear -all; " + " else " + " mlock(); " + " endif; " + "endfunction; " + "__swig_atexit__; " + "atexit(\"__swig_atexit__\", false); " + "atexit(\"__swig_atexit__\")"); + feval("evalin", eval_args, 0); #endif - + octave_swig_ref::register_type(); octave_swig_packed::register_type(); SWIG_InitializeModule(0); SWIG_PropagateClientData(); - - install_builtin_function(swig_type,"swig_type",std::string()); - install_builtin_function(swig_typequery,"swig_typequery",std::string()); - install_builtin_function(swig_this,"swig_this",std::string()); - install_builtin_function(subclass,"subclass",std::string()); - + + octave_function *me = octave_call_stack::current(); + + SWIG_Octave_InstallFunction(me, "swig_type"); + SWIG_Octave_InstallFunction(me, "swig_typequery"); + SWIG_Octave_InstallFunction(me, "swig_this"); + SWIG_Octave_InstallFunction(me, "subclass"); + octave_swig_type* cvar_ns=0; - if (global_name != ".") { + if (SWIG_global_name != ".") { cvar_ns=new octave_swig_type; for (int j=0;swig_globals[j].name;++j) if (swig_globals[j].get_method) cvar_ns->assign(swig_globals[j].name,&swig_globals[j]); } - - octave_swig_type* module_ns=new octave_swig_type(0, 0, 0, true); - if (global_name != ".") { - module_ns->assign(global_name,Swig::swig_value_ref(cvar_ns)); + + module_ns=new octave_swig_type(0, 0, 0, true); + if (SWIG_global_name != ".") { + module_ns->assign(SWIG_global_name,Swig::swig_value_ref(cvar_ns)); } else { for (int j=0;swig_globals[j].name;++j) @@ -204,72 +217,63 @@ for (int j=0;swig_globals[j].name;++j) if (swig_globals[j].method) module_ns->assign(swig_globals[j].name,&swig_globals[j]); - - // * need better solution here; swig_type -> octave_class mapping is - // * really n-to-1, in some cases such as template partial spec, etc. + + // * need better solution here; swig_type -> octave_class mapping is + // * really n-to-1, in some cases such as template partial spec, etc. // * see failing tests. for (int j=0;swig_types[j];++j) if (swig_types[j]->clientdata) { swig_octave_class* c=(swig_octave_class*)swig_types[j]->clientdata; module_ns->assign(c->name, - Swig::swig_value_ref - (new octave_swig_type(0,swig_types[j]))); + Swig::swig_value_ref + (new octave_swig_type(0,swig_types[j]))); } - + SWIG_init_user(module_ns); - + SWIG_InstallOps(octave_swig_ref::static_type_id()); - - // the incref is necessary so install_global doesn't destroy module_ns, - // as it would if it installed something with the same name as the module. - module_ns->incref(); - module_ns->install_global(global_load); - module_ns->decref(); - - // create global variable containing module - set_global_value(SWIG_name_d,Swig::swig_value_ref(module_ns)); - -#if OCTAVE_API_VERSION_NUMBER>=37 - install_builtin_function(SWIG_atexit_func,"__swig_atexit_" SWIG_name_d "__",std::string()); - octave_add_atexit_function("__swig_atexit_" SWIG_name_d "__"); - octave_remove_atexit_function("__finish__"); -#endif - // return from base frame -#if OCTAVE_API_VERSION_NUMBER<37 - curr_sym_tab = prev_sym_tab; +#if OCTAVE_API_VERSION_NUMBER < 37 + mlock(me->name()); #else - octave_call_stack::pop(); -#endif - -#if OCTAVE_API_VERSION_NUMBER>=37 mlock(); #endif - } // !already_load - - // link variable to module in current context -#if OCTAVE_API_VERSION_NUMBER<37 - link_to_global_variable(curr_sym_tab->lookup(SWIG_name_d,true)); -#else - symbol_table::varref(SWIG_name_d); - symbol_table::mark_global(SWIG_name_d); -#endif + } - return octave_value_list(); -} + // return module if asked for + if (args.length() == 0 && nargout == 1) { + retval = octave_value(module_ns->as_value()); + } -// workaround bug in octave where installing global variable of custom type and then -// exiting without explicitly clearing the variable causes octave to segfault. -#if OCTAVE_API_VERSION_NUMBER>=37 -octave_value_list SWIG_atexit_func(const octave_value_list &args, int nargout) { - string_vector vars = symbol_table::global_variable_names(); - for (int i = 0; i < vars.length(); i++) - symbol_table::clear_global(vars[i]); - symbol_table::clear_functions(); - return octave_value(); + // if call with not output arguments, load globally + else if (args.length() == 0 && nargout == 0) { + + octave_function *me = octave_call_stack::current(); + + octave_swig_type::swig_member_const_iterator mb; + for (mb = module_ns->swig_members_begin(); mb != module_ns->swig_members_end(); ++mb) { + if (mb->second.first && mb->second.first->method) { + SWIG_Octave_InstallFunction(me, mb->first); + } + else if (mb->second.second.is_defined()) { + SWIG_Octave_SetGlobalValue(mb->first, mb->second.second); + SWIG_Octave_LinkGlobalValue(mb->first); + } + } + + SWIG_Octave_SetGlobalValue(SWIG_name_d, module_ns->as_value()); + SWIG_Octave_LinkGlobalValue(SWIG_name_d); + + } + + // otherwise print usage + else { + print_usage(); + } + + return retval; + } -#endif %} - Modified: trunk/Source/Modules/octave.cxx =================================================================== --- trunk/Source/Modules/octave.cxx 2012-05-14 09:24:00 UTC (rev 13087) +++ trunk/Source/Modules/octave.cxx 2012-05-14 09:24:15 UTC (rev 13088) @@ -15,16 +15,13 @@ #include "swigmod.h" -static bool global_load = true; static String *global_name = 0; static String *op_prefix = 0; static const char *usage = (char *) "\ Octave Options (available with -octave)\n\ - -global - Load all symbols into the global namespace [default]\n\ -globals <name> - Set <name> used to access C global variables [default: 'cvar']\n\ - - Use '.' to load C global variables into module namespace\n\ - -noglobal - Do not load all symbols into the global namespace\n\ + Use '.' to load C global variables into module namespace\n\ -opprefix <str> - Prefix <str> for global operator functions [default: 'op_']\n\ \n"; @@ -83,12 +80,13 @@ if (argv[i]) { if (strcmp(argv[i], "-help") == 0) { fputs(usage, stdout); - } else if (strcmp(argv[i], "-global") == 0) { - global_load = true; - Swig_mark_arg(i); - } else if (strcmp(argv[i], "-noglobal") == 0) { - global_load = false; - Swig_mark_arg(i); + } else if (strcmp(argv[i], "-global") == 0 || + strcmp(argv[i], "-noglobal") == 0) { + Printv(stderr, + "*** -global/-noglobal are no longer supported\n" + "*** global load behaviour is now determined at module load\n" + "*** see the Perl section in the manual for details.\n", NIL); + SWIG_exit(EXIT_FAILURE); } else if (strcmp(argv[i], "-globals") == 0) { if (argv[i + 1]) { global_name = NewString(argv[i + 1]); @@ -179,10 +177,8 @@ Printf(f_runtime, "#define SWIG_name %s\n", module); Printf(f_runtime, "\n"); - Printf(f_runtime, "#define SWIG_global_load %s\n", global_load ? "true" : "false"); Printf(f_runtime, "#define SWIG_global_name \"%s\"\n", global_name); Printf(f_runtime, "#define SWIG_op_prefix \"%s\"\n", op_prefix); - Printf(f_runtime, "#define SWIG_atexit_func swig_atexit_%s\n", module); if (directorsEnabled()) { Printf(f_runtime, "#define SWIG_DIRECTORS\n"); @@ -383,7 +379,7 @@ virtual int importDirective(Node *n) { String *modname = Getattr(n, "module"); if (modname) - Printf(f_init, "feval(\"%s\",octave_value_list(),0);\n", modname); + Printf(f_init, "feval(\"%s\",octave_value_list(),1);\n", modname); return Language::importDirective(n); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-05-15 19:51:12
|
Revision: 13092 http://swig.svn.sourceforge.net/swig/?rev=13092&view=rev Author: wsfulton Date: 2012-05-15 19:51:06 +0000 (Tue, 15 May 2012) Log Message: ----------- Fix some language's std::map wrappers to recognise difference_type, size_type, key_type and mapped_type. Modified Paths: -------------- trunk/CHANGES.current trunk/Lib/csharp/std_map.i trunk/Lib/guile/std_map.i trunk/Lib/mzscheme/std_map.i trunk/Lib/ocaml/std_map.i trunk/Lib/perl5/std_map.i trunk/Lib/php/std_map.i trunk/Lib/tcl/std_map.i Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-05-14 09:24:53 UTC (rev 13091) +++ trunk/CHANGES.current 2012-05-15 19:51:06 UTC (rev 13092) @@ -5,6 +5,10 @@ Version 2.0.7 (in progress) =========================== +2012-05-14: wsfulton + Fix some language's std::map wrappers to recognise difference_type, size_type, key_type + and mapped_type. + 2012-05-14: kwwette (signed off by xavier98) [Octave] Prevent Octave from seg-faulting at exit when SWIG modules are loaded, due to bugs in Octave's cleanup code: Modified: trunk/Lib/csharp/std_map.i =================================================================== --- trunk/Lib/csharp/std_map.i 2012-05-14 09:24:53 UTC (rev 13091) +++ trunk/Lib/csharp/std_map.i 2012-05-15 19:51:06 UTC (rev 13092) @@ -215,12 +215,13 @@ %} public: + typedef size_t size_type; + typedef ptrdiff_t difference_type; + typedef K key_type; + typedef T mapped_type; + map(); map(const map< K, T > &other); - - typedef K key_type; - typedef T mapped_type; - typedef size_t size_type; size_type size() const; bool empty() const; %rename(Clear) clear; Modified: trunk/Lib/guile/std_map.i =================================================================== --- trunk/Lib/guile/std_map.i 2012-05-14 09:24:53 UTC (rev 13091) +++ trunk/Lib/guile/std_map.i 2012-05-15 19:51:06 UTC (rev 13092) @@ -217,6 +217,10 @@ %rename("delete!") __delitem__; %rename("has-key?") has_key; public: + typedef size_t size_type; + typedef ptrdiff_t difference_type; + typedef K key_type; + typedef T mapped_type; map(); map(const map<K,T> &); Modified: trunk/Lib/mzscheme/std_map.i =================================================================== --- trunk/Lib/mzscheme/std_map.i 2012-05-14 09:24:53 UTC (rev 13091) +++ trunk/Lib/mzscheme/std_map.i 2012-05-15 19:51:06 UTC (rev 13092) @@ -217,6 +217,10 @@ %rename("delete!") __delitem__; %rename("has-key?") has_key; public: + typedef size_t size_type; + typedef ptrdiff_t difference_type; + typedef K key_type; + typedef T mapped_type; map(); map(const map<K,T> &); Modified: trunk/Lib/ocaml/std_map.i =================================================================== --- trunk/Lib/ocaml/std_map.i 2012-05-14 09:24:53 UTC (rev 13091) +++ trunk/Lib/ocaml/std_map.i 2012-05-15 19:51:06 UTC (rev 13092) @@ -22,6 +22,10 @@ template<class K, class T> class map { // add typemaps here public: + typedef size_t size_type; + typedef ptrdiff_t difference_type; + typedef K key_type; + typedef T mapped_type; map(); map(const map<K,T> &); Modified: trunk/Lib/perl5/std_map.i =================================================================== --- trunk/Lib/perl5/std_map.i 2012-05-14 09:24:53 UTC (rev 13091) +++ trunk/Lib/perl5/std_map.i 2012-05-15 19:51:06 UTC (rev 13092) @@ -23,6 +23,10 @@ template<class K, class T> class map { // add typemaps here public: + typedef size_t size_type; + typedef ptrdiff_t difference_type; + typedef K key_type; + typedef T mapped_type; map(); map(const map<K,T> &); Modified: trunk/Lib/php/std_map.i =================================================================== --- trunk/Lib/php/std_map.i 2012-05-14 09:24:53 UTC (rev 13091) +++ trunk/Lib/php/std_map.i 2012-05-15 19:51:06 UTC (rev 13092) @@ -23,6 +23,10 @@ template<class K, class T> class map { // add typemaps here public: + typedef size_t size_type; + typedef ptrdiff_t difference_type; + typedef K key_type; + typedef T mapped_type; map(); map(const map<K,T> &); Modified: trunk/Lib/tcl/std_map.i =================================================================== --- trunk/Lib/tcl/std_map.i 2012-05-14 09:24:53 UTC (rev 13091) +++ trunk/Lib/tcl/std_map.i 2012-05-15 19:51:06 UTC (rev 13092) @@ -24,6 +24,10 @@ template<class K, class T> class map { // add typemaps here public: + typedef size_t size_type; + typedef ptrdiff_t difference_type; + typedef K key_type; + typedef T mapped_type; map(); map(const map<K,T> &); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ol...@us...> - 2012-05-18 02:43:58
|
Revision: 13096 http://swig.svn.sourceforge.net/swig/?rev=13096&view=rev Author: olly Date: 2012-05-18 02:43:52 +0000 (Fri, 18 May 2012) Log Message: ----------- [PHP] Fix getters for template members. (SF#3428833) Modified Paths: -------------- trunk/CHANGES.current trunk/Examples/test-suite/common.mk trunk/Source/Modules/php.cxx Added Paths: ----------- trunk/Examples/test-suite/li_std_vector_member_var.i trunk/Examples/test-suite/php/li_std_vector_member_var_runme.php Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-05-18 02:42:23 UTC (rev 13095) +++ trunk/CHANGES.current 2012-05-18 02:43:52 UTC (rev 13096) @@ -5,6 +5,9 @@ Version 2.0.7 (in progress) =========================== +2012-05-18: olly + [PHP] Fix getters for template members. (SF#3428833) + 2012-05-14: wsfulton Fix some language's std::map wrappers to recognise difference_type, size_type, key_type and mapped_type. Modified: trunk/Examples/test-suite/common.mk =================================================================== --- trunk/Examples/test-suite/common.mk 2012-05-18 02:42:23 UTC (rev 13095) +++ trunk/Examples/test-suite/common.mk 2012-05-18 02:43:52 UTC (rev 13096) @@ -475,6 +475,7 @@ li_std_string \ li_std_vector \ li_std_vector_enum \ + li_std_vector_member_var\ naturalvar \ smart_pointer_inherit \ template_typedef_fnc \ Added: trunk/Examples/test-suite/li_std_vector_member_var.i =================================================================== --- trunk/Examples/test-suite/li_std_vector_member_var.i (rev 0) +++ trunk/Examples/test-suite/li_std_vector_member_var.i 2012-05-18 02:43:52 UTC (rev 13096) @@ -0,0 +1,23 @@ +%module li_std_vector_member_var + +%include "std_vector.i" + +%template(vectorDbl) std::vector<double>; + +%inline %{ +#include <vector> + +typedef std::vector<double> DblVector; + +struct Test { + DblVector v; + int x; + + Test() : x(0) { } + + void f(int n) { + x += n; + v.push_back(1.0 / n); + } +}; +%} Added: trunk/Examples/test-suite/php/li_std_vector_member_var_runme.php =================================================================== --- trunk/Examples/test-suite/php/li_std_vector_member_var_runme.php (rev 0) +++ trunk/Examples/test-suite/php/li_std_vector_member_var_runme.php 2012-05-18 02:43:52 UTC (rev 13096) @@ -0,0 +1,24 @@ +<?php + +require "tests.php"; +require "li_std_vector_member_var.php"; + +$t = new Test(); + +check::equal($t->x, 0, "Test::x != 0"); +check::equal($t->v->size(), 0, "Test::v.size() != 0"); + +$t->f(1); +check::equal($t->x, 1, "Test::x != 1"); +check::equal($t->v->size(), 1, "Test::v.size() != 1"); + +$t->f(2); +check::equal($t->x, 3, "Test::x != 3"); +check::equal($t->v->size(), 2, "Test::v.size() != 2"); + +$t->f(3); +check::equal($t->x, 6, "Test::x != 6"); +check::equal($t->v->size(), 3, "Test::v.size() != 3"); + +check::done(); +?> Modified: trunk/Source/Modules/php.cxx =================================================================== --- trunk/Source/Modules/php.cxx 2012-05-18 02:42:23 UTC (rev 13095) +++ trunk/Source/Modules/php.cxx 2012-05-18 02:43:52 UTC (rev 13096) @@ -1032,7 +1032,7 @@ p += strlen(p) - 4; String *varname = Getattr(n, "membervariableHandler:sym:name"); if (strcmp(p, "_get") == 0) { - Setattr(shadow_get_vars, varname, iname); + Setattr(shadow_get_vars, varname, Getattr(n, "type")); } else if (strcmp(p, "_set") == 0) { Setattr(shadow_set_vars, varname, iname); } @@ -2012,7 +2012,6 @@ classnode = 0; if (shadow) { - DOH *key; List *baselist = Getattr(n, "bases"); Iterator ki, base; @@ -2055,10 +2054,10 @@ // FIXME: tune this threshold... if (Len(shadow_set_vars) <= 2) { // Not many setters, so avoid call_user_func. - while (ki.key) { - key = ki.key; - Printf(s_phpclasses, "\t\tif ($var === '%s') return %s($this->%s,$value);\n", key, ki.item, SWIG_PTR); - ki = Next(ki); + for (; ki.key; ki = Next(ki)) { + DOH *key = ki.key; + String *iname = ki.item; + Printf(s_phpclasses, "\t\tif ($var === '%s') return %s($this->%s,$value);\n", key, iname, SWIG_PTR); } } else { Printf(s_phpclasses, "\t\t$func = '%s_'.$var.'_set';\n", shadow_classname); @@ -2106,21 +2105,29 @@ if (ki.key) { // This class has getters. Printf(s_phpclasses, "\n\tfunction __get($var) {\n"); - // FIXME: Currently we always use call_user_func for __get, so we can - // check and wrap the result. This is needless if all the properties - // are primitive types. Also this doesn't handle all the cases which - // a method returning an object does. - Printf(s_phpclasses, "\t\t$func = '%s_'.$var.'_get';\n", shadow_classname); - Printf(s_phpclasses, "\t\tif (function_exists($func)) {\n"); - Printf(s_phpclasses, "\t\t\t$r = call_user_func($func,$this->%s);\n", SWIG_PTR); - Printf(s_phpclasses, "\t\t\tif (!is_resource($r)) return $r;\n"); - if (Len(prefix) == 0) { - Printf(s_phpclasses, "\t\t\t$c=substr(get_resource_type($r), (strpos(get_resource_type($r), '__') ? strpos(get_resource_type($r), '__') + 2 : 3));\n"); + int non_class_getters = 0; + for (; ki.key; ki = Next(ki)) { + DOH *key = ki.key; + SwigType *d = ki.item; + if (!is_class(d)) { + ++non_class_getters; + continue; + } + Printv(s_phpclasses, "\t\tif ($var === '", key, "') return new ", prefix, Getattr(classLookup(d), "sym:name"), "(", shadow_classname, "_", key, "_get($this->", SWIG_PTR, "));\n", NIL); + } + // FIXME: tune this threshold... + if (non_class_getters <= 2) { + // Not many non-class getters, so avoid call_user_func. + for (ki = First(shadow_get_vars); non_class_getters && ki.key; --non_class_getters, ki = Next(ki)) { + DOH *key = ki.key; + SwigType *d = ki.item; + if (is_class(d)) continue; + Printv(s_phpclasses, "\t\tif ($var === '", key, "') return ", shadow_classname, "_", key, "_get($this->", SWIG_PTR, ");\n", NIL); + } } else { - Printf(s_phpclasses, "\t\t\t$c='%s'.substr(get_resource_type($r), (strpos(get_resource_type($r), '__') ? strpos(get_resource_type($r), '__') + 2 : 3));\n", prefix); + Printf(s_phpclasses, "\t\t$func = '%s_'.$var.'_get';\n", shadow_classname); + Printf(s_phpclasses, "\t\tif (function_exists($func)) return call_user_func($func,$this->%s);\n", SWIG_PTR); } - Printf(s_phpclasses, "\t\t\treturn new $c($r);\n"); - Printf(s_phpclasses, "\t\t}\n"); Printf(s_phpclasses, "\t\tif ($var === 'thisown') return swig_%s_get_newobject($this->%s);\n", module, SWIG_PTR); if (baseclass) { Printf(s_phpclasses, "\t\treturn %s%s::__get($var);\n", prefix, baseclass); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ol...@us...> - 2012-05-23 02:58:30
|
Revision: 13105 http://swig.svn.sourceforge.net/swig/?rev=13105&view=rev Author: olly Date: 2012-05-23 02:58:24 +0000 (Wed, 23 May 2012) Log Message: ----------- Fix SF#3528035, a regression introduced by the fix for SF#3428833. Modified Paths: -------------- trunk/CHANGES.current trunk/Examples/test-suite/li_std_vector_member_var.i trunk/Examples/test-suite/php/li_std_vector_member_var_runme.php trunk/Source/Modules/php.cxx Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-05-22 17:15:22 UTC (rev 13104) +++ trunk/CHANGES.current 2012-05-23 02:58:24 UTC (rev 13105) @@ -6,7 +6,7 @@ =========================== 2012-05-18: olly - [PHP] Fix getters for template members. (SF#3428833) + [PHP] Fix getters for template members. (SF#3428833, SF#3528035) 2012-05-14: wsfulton Fix some language's std::map wrappers to recognise difference_type, size_type, key_type Modified: trunk/Examples/test-suite/li_std_vector_member_var.i =================================================================== --- trunk/Examples/test-suite/li_std_vector_member_var.i 2012-05-22 17:15:22 UTC (rev 13104) +++ trunk/Examples/test-suite/li_std_vector_member_var.i 2012-05-23 02:58:24 UTC (rev 13105) @@ -20,4 +20,15 @@ v.push_back(1.0 / n); } }; + +// Regression test for SF#3528035: +struct S { + int x; + S() : x(4) { } +}; + +struct T { + S start_t; + unsigned length; +}; %} Modified: trunk/Examples/test-suite/php/li_std_vector_member_var_runme.php =================================================================== --- trunk/Examples/test-suite/php/li_std_vector_member_var_runme.php 2012-05-22 17:15:22 UTC (rev 13104) +++ trunk/Examples/test-suite/php/li_std_vector_member_var_runme.php 2012-05-23 02:58:24 UTC (rev 13105) @@ -20,5 +20,11 @@ check::equal($t->x, 6, "Test::x != 6"); check::equal($t->v->size(), 3, "Test::v.size() != 3"); +$T = new T(); +$T->start_t = new S(); +$T->length = 7; +check::equal($T->start_t->x, 4, "S::x != 4"); +check::equal($T->length, 7, "T::length != 7"); + check::done(); ?> Modified: trunk/Source/Modules/php.cxx =================================================================== --- trunk/Source/Modules/php.cxx 2012-05-22 17:15:22 UTC (rev 13104) +++ trunk/Source/Modules/php.cxx 2012-05-23 02:58:24 UTC (rev 13105) @@ -2118,11 +2118,12 @@ // FIXME: tune this threshold... if (non_class_getters <= 2) { // Not many non-class getters, so avoid call_user_func. - for (ki = First(shadow_get_vars); non_class_getters && ki.key; --non_class_getters, ki = Next(ki)) { + for (ki = First(shadow_get_vars); non_class_getters && ki.key; ki = Next(ki)) { DOH *key = ki.key; SwigType *d = ki.item; if (is_class(d)) continue; Printv(s_phpclasses, "\t\tif ($var === '", key, "') return ", shadow_classname, "_", key, "_get($this->", SWIG_PTR, ");\n", NIL); + --non_class_getters; } } else { Printf(s_phpclasses, "\t\t$func = '%s_'.$var.'_get';\n", shadow_classname); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sz...@us...> - 2012-05-23 04:05:17
|
Revision: 13106 http://swig.svn.sourceforge.net/swig/?rev=13106&view=rev Author: szager Date: 2012-05-23 04:05:11 +0000 (Wed, 23 May 2012) Log Message: ----------- python: disambiguate SWIG_From_unsigned_SS_int and SWIG_From_unsigned_SS_long. Modified Paths: -------------- trunk/CHANGES.current trunk/Lib/python/pyprimtypes.swg Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-05-23 02:58:24 UTC (rev 13105) +++ trunk/CHANGES.current 2012-05-23 04:05:11 UTC (rev 13106) @@ -4,6 +4,8 @@ Version 2.0.7 (in progress) =========================== +2012-05-22: szager + [python] Disambiguate SWIG_From_unsigned_SS_int and SWIG_From_unsigned_SS_long. 2012-05-18: olly [PHP] Fix getters for template members. (SF#3428833, SF#3528035) Modified: trunk/Lib/python/pyprimtypes.swg =================================================================== --- trunk/Lib/python/pyprimtypes.swg 2012-05-23 02:58:24 UTC (rev 13105) +++ trunk/Lib/python/pyprimtypes.swg 2012-05-23 04:05:11 UTC (rev 13106) @@ -35,6 +35,16 @@ } } +/* unsigned int */ + +%fragment(SWIG_From_frag(unsigned int),"header") { +SWIGINTERNINLINE PyObject* + SWIG_From_dec(unsigned int)(unsigned int value) +{ + return PyInt_FromSize_t((size_t) value); +} +} + /* long */ %fragment(SWIG_From_frag(long),"header") { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-05-24 23:05:13
|
Revision: 13119 http://swig.svn.sourceforge.net/swig/?rev=13119&view=rev Author: wsfulton Date: 2012-05-24 23:05:07 +0000 (Thu, 24 May 2012) Log Message: ----------- Lua fix for -external-runtime Modified Paths: -------------- trunk/CHANGES.current trunk/Lib/lua/lua.swg trunk/Lib/lua/luarun.swg trunk/Source/Modules/lua.cxx Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-05-24 23:01:28 UTC (rev 13118) +++ trunk/CHANGES.current 2012-05-24 23:05:07 UTC (rev 13119) @@ -4,6 +4,9 @@ Version 2.0.7 (in progress) =========================== +2012-05-25: wsfulton + [Lua] Fixes for -external-runtime to work again. + 2012-05-22: szager [python] Disambiguate SWIG_From_unsigned_SS_int and SWIG_From_unsigned_SS_long. Modified: trunk/Lib/lua/lua.swg =================================================================== --- trunk/Lib/lua/lua.swg 2012-05-24 23:01:28 UTC (rev 13118) +++ trunk/Lib/lua/lua.swg 2012-05-24 23:05:07 UTC (rev 13119) @@ -5,30 +5,6 @@ * This file is parsed by SWIG before reading any other interface file. * ----------------------------------------------------------------------------- */ -%insert("runtime") %{ -/* Lua flavors */ -#define SWIG_LUA_FLAVOR_LUA 1 -#define SWIG_LUA_FLAVOR_ELUA 2 -#define SWIG_LUA_FLAVOR_ELUAC 3 - -#if (SWIG_LUA_TARGET == SWIG_LUA_FLAVOR_ELUA) || (SWIG_LUA_TARGET == SWIG_LUA_FLAVOR_ELUAC) -# define SWIG_LUA_CONSTTAB_INT(B, C) LSTRKEY(B), LNUMVAL(C) -# define SWIG_LUA_CONSTTAB_FLOAT(B, C) LSTRKEY(B), LNUMVAL(C) -# define SWIG_LUA_CONSTTAB_STRING(B, C) LSTRKEY(B), LSTRVAL(C) -# define SWIG_LUA_CONSTTAB_CHAR(B, C) LSTRKEY(B), LNUMVAL(C) -# else /* SWIG_LUA_FLAVOR_LUA */ -# define SWIG_LUA_CONSTTAB_INT(B, C) SWIG_LUA_INT, (char *)B, (long)C, 0, 0, 0 -# define SWIG_LUA_CONSTTAB_FLOAT(B, C) SWIG_LUA_FLOAT, (char *)B, 0, (double)C, 0, 0 -# define SWIG_LUA_CONSTTAB_STRING(B, C) SWIG_LUA_STRING, (char *)B, 0, 0, (void *)C, 0 -# define SWIG_LUA_CONSTTAB_CHAR(B, C) SWIG_LUA_CHAR, (char *)B, (long)C, 0, 0, 0 -#endif - -#if (SWIG_LUA_TARGET == SWIG_LUA_FLAVOR_ELUA) || (SWIG_LUA_TARGET == SWIG_LUA_FLAVOR_ELUAC) -# define LRO_STRVAL(v) {{.p = (char *) v}, LUA_TSTRING} -# define LSTRVAL LRO_STRVAL -#endif -%} - /* ----------------------------------------------------------------------------- * includes * ----------------------------------------------------------------------------- */ Modified: trunk/Lib/lua/luarun.swg =================================================================== --- trunk/Lib/lua/luarun.swg 2012-05-24 23:01:28 UTC (rev 13118) +++ trunk/Lib/lua/luarun.swg 2012-05-24 23:05:07 UTC (rev 13119) @@ -16,6 +16,35 @@ #include <assert.h> /* for a few sanity tests */ /* ----------------------------------------------------------------------------- + * Lua flavors + * ----------------------------------------------------------------------------- */ + +#define SWIG_LUA_FLAVOR_LUA 1 +#define SWIG_LUA_FLAVOR_ELUA 2 +#define SWIG_LUA_FLAVOR_ELUAC 3 + +#if !defined(SWIG_LUA_TARGET) +# error SWIG_LUA_TARGET not defined +#endif + +#if (SWIG_LUA_TARGET == SWIG_LUA_FLAVOR_ELUA) || (SWIG_LUA_TARGET == SWIG_LUA_FLAVOR_ELUAC) +# define SWIG_LUA_CONSTTAB_INT(B, C) LSTRKEY(B), LNUMVAL(C) +# define SWIG_LUA_CONSTTAB_FLOAT(B, C) LSTRKEY(B), LNUMVAL(C) +# define SWIG_LUA_CONSTTAB_STRING(B, C) LSTRKEY(B), LSTRVAL(C) +# define SWIG_LUA_CONSTTAB_CHAR(B, C) LSTRKEY(B), LNUMVAL(C) +#else /* SWIG_LUA_FLAVOR_LUA */ +# define SWIG_LUA_CONSTTAB_INT(B, C) SWIG_LUA_INT, (char *)B, (long)C, 0, 0, 0 +# define SWIG_LUA_CONSTTAB_FLOAT(B, C) SWIG_LUA_FLOAT, (char *)B, 0, (double)C, 0, 0 +# define SWIG_LUA_CONSTTAB_STRING(B, C) SWIG_LUA_STRING, (char *)B, 0, 0, (void *)C, 0 +# define SWIG_LUA_CONSTTAB_CHAR(B, C) SWIG_LUA_CHAR, (char *)B, (long)C, 0, 0, 0 +#endif + +#if (SWIG_LUA_TARGET == SWIG_LUA_FLAVOR_ELUA) || (SWIG_LUA_TARGET == SWIG_LUA_FLAVOR_ELUAC) +# define LRO_STRVAL(v) {{.p = (char *) v}, LUA_TSTRING} +# define LSTRVAL LRO_STRVAL +#endif + +/* ----------------------------------------------------------------------------- * compatibility defines * ----------------------------------------------------------------------------- */ Modified: trunk/Source/Modules/lua.cxx =================================================================== --- trunk/Source/Modules/lua.cxx 2012-05-24 23:01:28 UTC (rev 13118) +++ trunk/Source/Modules/lua.cxx 2012-05-24 23:05:07 UTC (rev 13119) @@ -284,12 +284,7 @@ Printf(f_runtime, "\n"); Printf(f_runtime, "#define SWIGLUA\n"); - if (elua_ltr) - Printf(f_runtime, "#define SWIG_LUA_TARGET SWIG_LUA_FLAVOR_ELUA\n"); - else if (eluac_ltr) - Printf(f_runtime, "#define SWIG_LUA_TARGET SWIG_LUA_FLAVOR_ELUAC\n"); - else - Printf(f_runtime, "#define SWIG_LUA_TARGET SWIG_LUA_FLAVOR_LUA\n"); + emitLuaFlavor(f_runtime); if (nomoduleglobal) { Printf(f_runtime, "#define SWIG_LUA_NO_MODULE_GLOBAL\n"); @@ -1269,6 +1264,9 @@ String *runtimeCode() { String *s = NewString(""); const char *filenames[] = { "luarun.swg", 0 } ; // must be 0 terminated + + emitLuaFlavor(s); + String *sfile; for (int i = 0; filenames[i] != 0; i++) { sfile = Swig_include_sys(filenames[i]); @@ -1279,6 +1277,7 @@ Delete(sfile); } } + return s; } @@ -1290,6 +1289,16 @@ * helpers * --------------------------------------------------------------------- */ + void emitLuaFlavor(String *s) { + if (elua_ltr) + Printf(s, "#define SWIG_LUA_TARGET SWIG_LUA_FLAVOR_ELUA\n"); + else if (eluac_ltr) + Printf(s, "#define SWIG_LUA_TARGET SWIG_LUA_FLAVOR_ELUAC\n"); + else + Printf(s, "#define SWIG_LUA_TARGET SWIG_LUA_FLAVOR_LUA\n"); + } + + /* This is to convert the string of Lua code into a proper string, which can then be emitted into the C/C++ code. Basically is is a lot of search & replacing of odd sequences This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-05-26 06:33:56
|
Revision: 13120 http://swig.svn.sourceforge.net/swig/?rev=13120&view=rev Author: wsfulton Date: 2012-05-26 06:33:49 +0000 (Sat, 26 May 2012) Log Message: ----------- std::string typemap modifications so they can be used with %apply for other string classes Modified Paths: -------------- trunk/CHANGES.current trunk/Lib/allegrocl/std_string.i trunk/Lib/chicken/std_string.i trunk/Lib/csharp/std_string.i trunk/Lib/d/std_string.i trunk/Lib/go/std_string.i trunk/Lib/guile/std_string.i trunk/Lib/java/std_string.i trunk/Lib/lua/std_string.i trunk/Lib/mzscheme/std_string.i trunk/Lib/ocaml/std_string.i trunk/Lib/php/std_string.i trunk/Lib/pike/std_string.i Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-05-24 23:05:07 UTC (rev 13119) +++ trunk/CHANGES.current 2012-05-26 06:33:49 UTC (rev 13120) @@ -4,6 +4,10 @@ Version 2.0.7 (in progress) =========================== +2012-05-26: wsfulton + std::string typemap modifications so they can be used with %apply for other string + classes. + 2012-05-25: wsfulton [Lua] Fixes for -external-runtime to work again. Modified: trunk/Lib/allegrocl/std_string.i =================================================================== --- trunk/Lib/allegrocl/std_string.i 2012-05-24 23:05:07 UTC (rev 13119) +++ trunk/Lib/allegrocl/std_string.i 2012-05-26 06:33:49 UTC (rev 13120) @@ -121,7 +121,7 @@ // SWIG_exception(SWIG_TypeError, "string expected"); // } -// %typemap(in) const string & (std::string temp) { +// %typemap(in) const string & ($*1_ltype temp) { // if (caml_ptr_check($input)) { // temp.assign((char *)caml_ptr_val($input,0), // caml_string_len($input)); @@ -131,7 +131,7 @@ // } // } -// %typemap(in) string & (std::string temp) { +// %typemap(in) string & ($*1_ltype temp) { // if (caml_ptr_check($input)) { // temp.assign((char *)caml_ptr_val($input,0), // caml_string_len($input)); @@ -141,9 +141,9 @@ // } // } -// %typemap(in) string * (std::string *temp) { +// %typemap(in) string * ($*1_ltype *temp) { // if (caml_ptr_check($input)) { -// temp = new std::string((char *)caml_ptr_val($input,0), +// temp = new $*1_ltype((char *)caml_ptr_val($input,0), // caml_string_len($input)); // $1 = temp; // } else { @@ -151,7 +151,7 @@ // } // } -// %typemap(free) string * (std::string *temp) { +// %typemap(free) string * ($*1_ltype *temp) { // delete temp; // } Modified: trunk/Lib/chicken/std_string.i =================================================================== --- trunk/Lib/chicken/std_string.i 2012-05-24 23:05:07 UTC (rev 13119) +++ trunk/Lib/chicken/std_string.i 2012-05-26 06:33:49 UTC (rev 13120) @@ -44,7 +44,7 @@ } } - %typemap(in) const string& (std::string temp, char *tempptr) { + %typemap(in) const string& ($*1_ltype temp, char *tempptr) { if ($input == C_SCHEME_FALSE) { temp.resize(0); Modified: trunk/Lib/csharp/std_string.i =================================================================== --- trunk/Lib/csharp/std_string.i 2012-05-24 23:05:07 UTC (rev 13119) +++ trunk/Lib/csharp/std_string.i 2012-05-26 06:33:49 UTC (rev 13120) @@ -69,7 +69,7 @@ SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "null string", 0); return $null; } - std::string $1_str($input); + $*1_ltype $1_str($input); $1 = &$1_str; %} %typemap(out) const string & %{ $result = SWIG_csharp_string_callback($1->c_str()); %} @@ -85,7 +85,7 @@ return $null; } /* possible thread/reentrant code problem */ - static std::string $1_str; + static $*1_ltype $1_str; $1_str = $input; $result = &$1_str; %} Modified: trunk/Lib/d/std_string.i =================================================================== --- trunk/Lib/d/std_string.i 2012-05-24 23:05:07 UTC (rev 13119) +++ trunk/Lib/d/std_string.i 2012-05-26 06:33:49 UTC (rev 13120) @@ -36,7 +36,7 @@ SWIG_DSetPendingException(SWIG_DIllegalArgumentException, "null string"); return $null; } - std::string $1_str($input); + $*1_ltype $1_str($input); $1 = &$1_str; %} %typemap(out) string %{ $result = SWIG_d_string_callback($1.c_str()); %} @@ -63,7 +63,7 @@ return $null; } /* possible thread/reentrant code problem */ - static std::string $1_str; + static $*1_ltype $1_str; $1_str = $input; $result = &$1_str; %} Modified: trunk/Lib/go/std_string.i =================================================================== --- trunk/Lib/go/std_string.i 2012-05-24 23:05:07 UTC (rev 13119) +++ trunk/Lib/go/std_string.i 2012-05-26 06:33:49 UTC (rev 13120) @@ -35,13 +35,13 @@ %typemap(in) const string & %{ - std::string $1_str($input.p, $input.n); + $*1_ltype $1_str($input.p, $input.n); $1 = &$1_str; %} %typemap(directorout,warning=SWIGWARN_TYPEMAP_THREAD_UNSAFE_MSG) const string & %{ - static std::string $1_str; + static $*1_ltype $1_str; $1_str.assign($input.p, $input.n); $result = &$1_str; %} Modified: trunk/Lib/guile/std_string.i =================================================================== --- trunk/Lib/guile/std_string.i 2012-05-24 23:05:07 UTC (rev 13119) +++ trunk/Lib/guile/std_string.i 2012-05-26 06:33:49 UTC (rev 13120) @@ -36,7 +36,7 @@ } } - %typemap(in) const string & (std::string temp, char *tempptr) { + %typemap(in) const string & ($*1_ltype temp, char *tempptr) { if (gh_string_p($input)) { tempptr = SWIG_scm2str($input); temp.assign(tempptr); @@ -50,7 +50,7 @@ %typemap(in) string * (char *tempptr) { if (gh_string_p($input)) { tempptr = SWIG_scm2str($input); - $1 = new std::string(tempptr); + $1 = new $*1_ltype(tempptr); if (tempptr) SWIG_free(tempptr); } else { SWIG_exception(SWIG_TypeError, "string expected"); Modified: trunk/Lib/java/std_string.i =================================================================== --- trunk/Lib/java/std_string.i 2012-05-24 23:05:07 UTC (rev 13119) +++ trunk/Lib/java/std_string.i 2012-05-26 06:33:49 UTC (rev 13120) @@ -28,7 +28,7 @@ %typemap(in) string %{ if(!$input) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null std::string"); + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null string"); return $null; } const char *$1_pstr = (const char *)jenv->GetStringUTFChars($input, 0); @@ -38,7 +38,7 @@ %typemap(directorout) string %{ if(!$input) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null std::string"); + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null string"); return $null; } const char *$1_pstr = (const char *)jenv->GetStringUTFChars($input, 0); @@ -73,24 +73,24 @@ %typemap(in) const string & %{ if(!$input) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null std::string"); + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null string"); return $null; } const char *$1_pstr = (const char *)jenv->GetStringUTFChars($input, 0); if (!$1_pstr) return $null; - std::string $1_str($1_pstr); + $*1_ltype $1_str($1_pstr); $1 = &$1_str; jenv->ReleaseStringUTFChars($input, $1_pstr); %} %typemap(directorout,warning=SWIGWARN_TYPEMAP_THREAD_UNSAFE_MSG) const string & %{ if(!$input) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null std::string"); + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null string"); return $null; } const char *$1_pstr = (const char *)jenv->GetStringUTFChars($input, 0); if (!$1_pstr) return $null; /* possible thread/reentrant code problem */ - static std::string $1_str; + static $*1_ltype $1_str; $1_str = $1_pstr; $result = &$1_str; jenv->ReleaseStringUTFChars($input, $1_pstr); %} Modified: trunk/Lib/lua/std_string.i =================================================================== --- trunk/Lib/lua/std_string.i 2012-05-24 23:05:07 UTC (rev 13119) +++ trunk/Lib/lua/std_string.i 2012-05-26 06:33:49 UTC (rev 13120) @@ -51,7 +51,7 @@ %typemap(out) std::string %{ lua_pushlstring(L,$1.data(),$1.size()); SWIG_arg++;%} -%typemap(in,checkfn="lua_isstring") const std::string& (std::string temp) +%typemap(in,checkfn="lua_isstring") const std::string& ($*1_ltype temp) %{temp.assign(lua_tostring(L,$input),lua_rawlen(L,$input)); $1=&temp;%} %typemap(out) const std::string& @@ -84,7 +84,7 @@ */ %typemap(in) std::string &INPUT=const std::string &; -%typemap(in, numinputs=0) std::string &OUTPUT (std::string temp) +%typemap(in, numinputs=0) std::string &OUTPUT ($*1_ltype temp) %{ $1 = &temp; %} %typemap(argout) std::string &OUTPUT %{ lua_pushlstring(L,$1->data(),$1->size()); SWIG_arg++;%} Modified: trunk/Lib/mzscheme/std_string.i =================================================================== --- trunk/Lib/mzscheme/std_string.i 2012-05-24 23:05:07 UTC (rev 13119) +++ trunk/Lib/mzscheme/std_string.i 2012-05-26 06:33:49 UTC (rev 13120) @@ -35,7 +35,7 @@ SWIG_exception(SWIG_TypeError, "string expected"); } - %typemap(in) const string & (std::string temp) { + %typemap(in) const string & ($*1_ltype temp) { if (SCHEME_STRINGP($input)) { temp.assign(SCHEME_STR_VAL($input)); $1 = &temp; Modified: trunk/Lib/ocaml/std_string.i =================================================================== --- trunk/Lib/ocaml/std_string.i 2012-05-24 23:05:07 UTC (rev 13119) +++ trunk/Lib/ocaml/std_string.i 2012-05-26 06:33:49 UTC (rev 13120) @@ -36,7 +36,7 @@ SWIG_exception(SWIG_TypeError, "string expected"); } -%typemap(in) const string & (std::string temp) { +%typemap(in) const string & ($*1_ltype temp) { /* %typemap(in) const string & */ if (caml_ptr_check($input)) { temp.assign((char *)caml_ptr_val($input,0), caml_string_len($input)); @@ -46,7 +46,7 @@ } } -%typemap(in) string & (std::string temp) { +%typemap(in) string & ($*1_ltype temp) { /* %typemap(in) string & */ if (caml_ptr_check($input)) { temp.assign((char *)caml_ptr_val($input,0), caml_string_len($input)); @@ -56,17 +56,17 @@ } } -%typemap(in) string * (std::string *temp) { +%typemap(in) string * ($*1_ltype *temp) { /* %typemap(in) string * */ if (caml_ptr_check($input)) { - temp = new std::string((char *)caml_ptr_val($input,0), caml_string_len($input)); + temp = new $*1_ltype((char *)caml_ptr_val($input,0), caml_string_len($input)); $1 = temp; } else { SWIG_exception(SWIG_TypeError, "string expected"); } } -%typemap(free) string * (std::string *temp) { +%typemap(free) string * ($*1_ltype *temp) { delete temp; } Modified: trunk/Lib/php/std_string.i =================================================================== --- trunk/Lib/php/std_string.i 2012-05-24 23:05:07 UTC (rev 13119) +++ trunk/Lib/php/std_string.i 2012-05-26 06:33:49 UTC (rev 13120) @@ -56,15 +56,15 @@ /* These next two handle a function which takes a non-const reference to * a std::string and modifies the string. */ - %typemap(in) string & (std::string temp) %{ + %typemap(in) string & ($*1_ltype temp) %{ convert_to_string_ex($input); temp.assign(Z_STRVAL_PP($input), Z_STRLEN_PP($input)); $1 = &temp; %} - %typemap(directorout) string & (std::string *temp) %{ + %typemap(directorout) string & ($*1_ltype *temp) %{ convert_to_string_ex($input); - temp = new std::string(Z_STRVAL_PP($input), Z_STRLEN_PP($input)); + temp = new $*1_ltype(Z_STRVAL_PP($input), Z_STRLEN_PP($input)); swig_acquire_ownership(temp); $result = temp; %} Modified: trunk/Lib/pike/std_string.i =================================================================== --- trunk/Lib/pike/std_string.i 2012-05-24 23:05:07 UTC (rev 13119) +++ trunk/Lib/pike/std_string.i 2012-05-26 06:33:49 UTC (rev 13120) @@ -25,7 +25,7 @@ $1.assign(STR0($input.u.string)); } - %typemap(in, pikedesc="tStr") const string & (std::string temp) { + %typemap(in, pikedesc="tStr") const string & ($*1_ltype temp) { if ($input.type != T_STRING) Pike_error("Bad argument: Expected a string.\n"); temp.assign(STR0($input.u.string)); @@ -47,7 +47,7 @@ throw Swig::DirectorTypeMismatchException("string expected"); } - %typemap(directorout) const string & (std::string temp) { + %typemap(directorout) const string & ($*1_ltype temp) { if ($input.type == T_STRING) { temp.assign(STR0($input.u.string)); $result = &temp; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-05-26 07:10:00
|
Revision: 13122 http://swig.svn.sourceforge.net/swig/?rev=13122&view=rev Author: wsfulton Date: 2012-05-26 07:09:54 +0000 (Sat, 26 May 2012) Log Message: ----------- swig-2.0.7 release date Modified Paths: -------------- trunk/ANNOUNCE trunk/CHANGES.current trunk/Doc/Manual/Sections.html trunk/README Modified: trunk/ANNOUNCE =================================================================== --- trunk/ANNOUNCE 2012-05-26 07:07:00 UTC (rev 13121) +++ trunk/ANNOUNCE 2012-05-26 07:09:54 UTC (rev 13122) @@ -1,4 +1,4 @@ -*** ANNOUNCE: SWIG 2.0.7 (in progress) *** +*** ANNOUNCE: SWIG 2.0.7 (26 May 2012) *** http://www.swig.org Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-05-26 07:07:00 UTC (rev 13121) +++ trunk/CHANGES.current 2012-05-26 07:09:54 UTC (rev 13122) @@ -2,7 +2,7 @@ See the CHANGES file for changes in older releases. See the RELEASENOTES file for a summary of changes in each release. -Version 2.0.7 (in progress) +Version 2.0.7 (26 May 2012) =========================== 2012-05-26: wsfulton std::string typemap modifications so they can be used with %apply for other string Modified: trunk/Doc/Manual/Sections.html =================================================================== --- trunk/Doc/Manual/Sections.html 2012-05-26 07:07:00 UTC (rev 13121) +++ trunk/Doc/Manual/Sections.html 2012-05-26 07:09:54 UTC (rev 13122) @@ -6,7 +6,7 @@ <body bgcolor="#ffffff"> <H1><a name="Sections"></a>SWIG-2.0 Documentation</H1> -Last update : SWIG-2.0.7 (in progress) +Last update : SWIG-2.0.7 (26 May 2012) <H2>Sections</H2> Modified: trunk/README =================================================================== --- trunk/README 2012-05-26 07:07:00 UTC (rev 13121) +++ trunk/README 2012-05-26 07:09:54 UTC (rev 13122) @@ -1,6 +1,6 @@ SWIG (Simplified Wrapper and Interface Generator) -Version: 2.0.7 (in progress) +Version: 2.0.7 (26 May 2012) Tagline: SWIG is a compiler that integrates C and C++ with languages including Perl, Python, Tcl, Ruby, PHP, Java, Ocaml, Lua, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-05-26 08:05:23
|
Revision: 13125 http://swig.svn.sourceforge.net/swig/?rev=13125&view=rev Author: wsfulton Date: 2012-05-26 08:05:16 +0000 (Sat, 26 May 2012) Log Message: ----------- Bump version to 2.0.8 Modified Paths: -------------- trunk/ANNOUNCE trunk/CHANGES trunk/CHANGES.current trunk/Doc/Manual/Sections.html trunk/README trunk/configure.in Modified: trunk/ANNOUNCE =================================================================== --- trunk/ANNOUNCE 2012-05-26 07:58:23 UTC (rev 13124) +++ trunk/ANNOUNCE 2012-05-26 08:05:16 UTC (rev 13125) @@ -1,8 +1,8 @@ -*** ANNOUNCE: SWIG 2.0.7 (26 May 2012) *** +*** ANNOUNCE: SWIG 2.0.8 (in progress) *** http://www.swig.org -We're pleased to announce SWIG-2.0.7, the latest SWIG release. +We're pleased to announce SWIG-2.0.8, the latest SWIG release. What is SWIG? ============= @@ -21,11 +21,11 @@ ============ The release is available for download on Sourceforge at - http://prdownloads.sourceforge.net/swig/swig-2.0.7.tar.gz + http://prdownloads.sourceforge.net/swig/swig-2.0.8.tar.gz A Windows version is also available at - http://prdownloads.sourceforge.net/swig/swigwin-2.0.7.zip + http://prdownloads.sourceforge.net/swig/swigwin-2.0.8.zip Please report problems with this release to the swig-devel mailing list, details at http://www.swig.org/mail.html. Modified: trunk/CHANGES =================================================================== --- trunk/CHANGES 2012-05-26 07:58:23 UTC (rev 13124) +++ trunk/CHANGES 2012-05-26 08:05:16 UTC (rev 13125) @@ -3,6 +3,97 @@ See the CHANGES.current file for changes in the current version. See the RELEASENOTES file for a summary of changes in each release. +Version 2.0.7 (26 May 2012) +=========================== +2012-05-26: wsfulton + std::string typemap modifications so they can be used with %apply for other string + classes. + +2012-05-25: wsfulton + [Lua] Fixes for -external-runtime to work again. + +2012-05-22: szager + [python] Disambiguate SWIG_From_unsigned_SS_int and SWIG_From_unsigned_SS_long. + +2012-05-18: olly + [PHP] Fix getters for template members. (SF#3428833, SF#3528035) + +2012-05-14: wsfulton + Fix some language's std::map wrappers to recognise difference_type, size_type, key_type + and mapped_type. + +2012-05-14: kwwette (signed off by xavier98) + [Octave] Prevent Octave from seg-faulting at exit when SWIG + modules are loaded, due to bugs in Octave's cleanup code: + * Wrapping functions now declared with Octave DEFUN_DLD macro, + and loaded through Octave's dynamic module loader + * Global variables of swigref type are now assigned a new() + copy of the swigref class, to prevent double-free errors + * SWIG module at-exit cleanup function now created in Octave + through eval(), so not dependent on loaded .oct library + * For Octave versions 3.1.* to 3.3.*, register C-level at-exit + function which terminates Octave immediately (with correct + status code) without performing memory cleanup. This function + can be controlled with macros in Lib/octave/octruntime.swg + + [Octave] New syntax for determing whether SWIG module should be + loaded globally or non-globally. To load module "example" globally, + type the module name + $ example; + as before; to load module non-globally, assign it to a variable: + $ example = example; + or + $ ex = example; + for a shorter (local) module name. -global/-noglobal command-line + options and module command line are deprecated. Added usage info + to module, so typing + $ help example + or incorrect usage should display proper usage, with examples. + + *** POTENTIAL INCOMPATIBILITY *** + +2012-05-12: olly + [PHP] Fix memory leak in code generated for a callback. Patch from + SF bug #3510806. + +2012-05-12: olly + [PHP] Avoid using zend_error_noreturn() as it doesn't work with all + builds of PHP (SF bug #3166423). Instead we now wrap it in a + SWIG_FAIL() function which we annotate as "noreturn" for GCC to + avoids warnings. This also reduces the size of the compiled + wrapper (e.g. the stripped size is reduced by 6% for Xapian's PHP + bindings). + +2012-05-11: wsfulton + [Java] SF patch #3522855 Fix unintended uninitialised memory access in OUTPUT typemaps. + +2012-05-11: wsfulton + [Java] SF patch #3522674 Fix possible uninitialised memory access in char **STRING_OUT + typemap. + +2012-05-11: wsfulton + [Java] SF patch #3522611 Fix uninitialised size regression in char **STRING_ARRAY + introduced in swig-2.0.6. + +2012-05-11: wsfulton + SF bug #3525050 - Fix regression introduced in swig-2.0.5 whereby defining one typemap + method such as an 'out' typemap may hide another typemap method such as an 'in' typemap - + only occurs when the type is a template type where the template parameters are the same + via a typedef. + +2012-05-10: olly + [PHP] Fix the constant typemaps for SWIGTYPE, etc - previously + these used the wrong name for renamed constants. Add + autodoc_runme.php to the testsuite as a regression test for this. + +2012-05-02: ianlancetaylor + [Go] Remove compatibility support for gccgo 4.6. Using + SWIG with gccgo will now require gccgo 4.7. Using SWIG + with the more commonly used gc compiler is unaffected. + +2012-05-01: wsfulton + Fix generated code for C forward enum declarations in some languages. + Version 2.0.6 (30 April 2012) ============================= Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-05-26 07:58:23 UTC (rev 13124) +++ trunk/CHANGES.current 2012-05-26 08:05:16 UTC (rev 13125) @@ -2,94 +2,5 @@ See the CHANGES file for changes in older releases. See the RELEASENOTES file for a summary of changes in each release. -Version 2.0.7 (26 May 2012) +Version 2.0.8 (in progress) =========================== -2012-05-26: wsfulton - std::string typemap modifications so they can be used with %apply for other string - classes. - -2012-05-25: wsfulton - [Lua] Fixes for -external-runtime to work again. - -2012-05-22: szager - [python] Disambiguate SWIG_From_unsigned_SS_int and SWIG_From_unsigned_SS_long. - -2012-05-18: olly - [PHP] Fix getters for template members. (SF#3428833, SF#3528035) - -2012-05-14: wsfulton - Fix some language's std::map wrappers to recognise difference_type, size_type, key_type - and mapped_type. - -2012-05-14: kwwette (signed off by xavier98) - [Octave] Prevent Octave from seg-faulting at exit when SWIG - modules are loaded, due to bugs in Octave's cleanup code: - * Wrapping functions now declared with Octave DEFUN_DLD macro, - and loaded through Octave's dynamic module loader - * Global variables of swigref type are now assigned a new() - copy of the swigref class, to prevent double-free errors - * SWIG module at-exit cleanup function now created in Octave - through eval(), so not dependent on loaded .oct library - * For Octave versions 3.1.* to 3.3.*, register C-level at-exit - function which terminates Octave immediately (with correct - status code) without performing memory cleanup. This function - can be controlled with macros in Lib/octave/octruntime.swg - - [Octave] New syntax for determing whether SWIG module should be - loaded globally or non-globally. To load module "example" globally, - type the module name - $ example; - as before; to load module non-globally, assign it to a variable: - $ example = example; - or - $ ex = example; - for a shorter (local) module name. -global/-noglobal command-line - options and module command line are deprecated. Added usage info - to module, so typing - $ help example - or incorrect usage should display proper usage, with examples. - - *** POTENTIAL INCOMPATIBILITY *** - -2012-05-12: olly - [PHP] Fix memory leak in code generated for a callback. Patch from - SF bug #3510806. - -2012-05-12: olly - [PHP] Avoid using zend_error_noreturn() as it doesn't work with all - builds of PHP (SF bug #3166423). Instead we now wrap it in a - SWIG_FAIL() function which we annotate as "noreturn" for GCC to - avoids warnings. This also reduces the size of the compiled - wrapper (e.g. the stripped size is reduced by 6% for Xapian's PHP - bindings). - -2012-05-11: wsfulton - [Java] SF patch #3522855 Fix unintended uninitialised memory access in OUTPUT typemaps. - -2012-05-11: wsfulton - [Java] SF patch #3522674 Fix possible uninitialised memory access in char **STRING_OUT - typemap. - -2012-05-11: wsfulton - [Java] SF patch #3522611 Fix uninitialised size regression in char **STRING_ARRAY - introduced in swig-2.0.6. - -2012-05-11: wsfulton - SF bug #3525050 - Fix regression introduced in swig-2.0.5 whereby defining one typemap - method such as an 'out' typemap may hide another typemap method such as an 'in' typemap - - only occurs when the type is a template type where the template parameters are the same - via a typedef. - -2012-05-10: olly - [PHP] Fix the constant typemaps for SWIGTYPE, etc - previously - these used the wrong name for renamed constants. Add - autodoc_runme.php to the testsuite as a regression test for this. - -2012-05-02: ianlancetaylor - [Go] Remove compatibility support for gccgo 4.6. Using - SWIG with gccgo will now require gccgo 4.7. Using SWIG - with the more commonly used gc compiler is unaffected. - -2012-05-01: wsfulton - Fix generated code for C forward enum declarations in some languages. - Modified: trunk/Doc/Manual/Sections.html =================================================================== --- trunk/Doc/Manual/Sections.html 2012-05-26 07:58:23 UTC (rev 13124) +++ trunk/Doc/Manual/Sections.html 2012-05-26 08:05:16 UTC (rev 13125) @@ -6,7 +6,7 @@ <body bgcolor="#ffffff"> <H1><a name="Sections"></a>SWIG-2.0 Documentation</H1> -Last update : SWIG-2.0.7 (26 May 2012) +Last update : SWIG-2.0.8 (in progress) <H2>Sections</H2> Modified: trunk/README =================================================================== --- trunk/README 2012-05-26 07:58:23 UTC (rev 13124) +++ trunk/README 2012-05-26 08:05:16 UTC (rev 13125) @@ -1,6 +1,6 @@ SWIG (Simplified Wrapper and Interface Generator) -Version: 2.0.7 (26 May 2012) +Version: 2.0.8 (in progress) Tagline: SWIG is a compiler that integrates C and C++ with languages including Perl, Python, Tcl, Ruby, PHP, Java, Ocaml, Lua, Modified: trunk/configure.in =================================================================== --- trunk/configure.in 2012-05-26 07:58:23 UTC (rev 13124) +++ trunk/configure.in 2012-05-26 08:05:16 UTC (rev 13125) @@ -2,7 +2,7 @@ dnl The macros which aren't shipped with the autotools are stored in the dnl Tools/config directory in .m4 files. -AC_INIT([swig],[2.0.7],[http://www.swig.org]) +AC_INIT([swig],[2.0.8],[http://www.swig.org]) dnl NB: When this requirement is increased to 2.60 or later, AC_PROG_SED dnl definition below can be removed This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-05-28 06:20:52
|
Revision: 13128 http://swig.svn.sourceforge.net/swig/?rev=13128&view=rev Author: wsfulton Date: 2012-05-28 06:20:45 +0000 (Mon, 28 May 2012) Log Message: ----------- Fix seg fault attempting to warn about illegal destructors - introduced in rev 13111 Revision Links: -------------- http://swig.svn.sourceforge.net/swig/?rev=13111&view=rev Modified Paths: -------------- trunk/CHANGES.current trunk/Examples/test-suite/errors/expected.log trunk/Source/Modules/lang.cxx Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-05-26 08:20:20 UTC (rev 13127) +++ trunk/CHANGES.current 2012-05-28 06:20:45 UTC (rev 13128) @@ -4,3 +4,6 @@ Version 2.0.8 (in progress) =========================== +2012-05-28: wsfulton + Fix seg fault when attempting to warn about an illegal destructor - #3530055 and #3530118. + Modified: trunk/Examples/test-suite/errors/expected.log =================================================================== --- trunk/Examples/test-suite/errors/expected.log 2012-05-26 08:20:20 UTC (rev 13127) +++ trunk/Examples/test-suite/errors/expected.log 2012-05-28 06:20:45 UTC (rev 13128) @@ -227,17 +227,17 @@ cpp_extend_destructors.i:85: Warning 302: previous definition of '~JStruct'. cpp_extend_destructors.i:100: Warning 302: Identifier '~LStruct' redefined (ignored), cpp_extend_destructors.i:98: Warning 302: previous definition of '~LStruct'. -cpp_extend_destructors.i:24: Warning 521: Illegal destructor name ~NOT_CStruct. Ignored. -cpp_extend_destructors.i:30: Warning 521: Illegal destructor name ~NOT_DStruct. Ignored. -cpp_extend_destructors.i:44: Warning 521: Illegal destructor name ~NOT_EStruct. Ignored. -cpp_extend_destructors.i:50: Warning 521: Illegal destructor name ~NOT_FStruct. Ignored. -cpp_extend_destructors.i:65: Warning 521: Illegal destructor name ~NOT_GStruct. Ignored. -cpp_extend_destructors.i:72: Warning 521: Illegal destructor name ~NOT_HStruct. Ignored. -cpp_extend_destructors.i:81: Warning 521: Illegal destructor name ~NOT_IStruct. Ignored. -cpp_extend_destructors.i:86: Warning 521: Illegal destructor name ~NOT_JStruct. Ignored. -cpp_extend_destructors.i:92: Warning 521: Illegal destructor name ~NOT_KStruct. Ignored. -cpp_extend_destructors.i:99: Warning 521: Illegal destructor name ~NOT_LStruct< int >. Ignored. -cpp_extend_destructors.i:99: Warning 521: Illegal destructor name ~NOT_LStruct< short >. Ignored. +cpp_extend_destructors.i:24: Warning 521: Illegal destructor name CStruct::~NOT_CStruct(). Ignored. +cpp_extend_destructors.i:30: Warning 521: Illegal destructor name DStruct::~NOT_DStruct(). Ignored. +cpp_extend_destructors.i:44: Warning 521: Illegal destructor name EStruct::~NOT_EStruct(). Ignored. +cpp_extend_destructors.i:50: Warning 521: Illegal destructor name FStruct::~NOT_FStruct(). Ignored. +cpp_extend_destructors.i:65: Warning 521: Illegal destructor name GStruct::~NOT_GStruct(). Ignored. +cpp_extend_destructors.i:72: Warning 521: Illegal destructor name HStruct::~NOT_HStruct(). Ignored. +cpp_extend_destructors.i:81: Warning 521: Illegal destructor name IStruct::~NOT_IStruct(). Ignored. +cpp_extend_destructors.i:86: Warning 521: Illegal destructor name JStruct::~NOT_JStruct(). Ignored. +cpp_extend_destructors.i:92: Warning 521: Illegal destructor name KStruct::~NOT_KStruct(). Ignored. +cpp_extend_destructors.i:99: Warning 521: Illegal destructor name LStruct< int >::~NOT_LStruct(). Ignored. +cpp_extend_destructors.i:99: Warning 521: Illegal destructor name LStruct< short >::~NOT_LStruct(). Ignored. :::::::::::::::::::::::::::::::: cpp_extend_redefine.i ::::::::::::::::::::::::::::::::::: cpp_extend_redefine.i:9: Warning 302: Identifier 'bar' redefined by %extend (ignored), @@ -312,8 +312,8 @@ cpp_no_access.i:3: Warning 319: No access specifier given for base class 'foo' (ignored). :::::::::::::::::::::::::::::::: cpp_no_return_type.i ::::::::::::::::::::::::::::::::::: -cpp_no_return_type.i:6: Warning 504: Function R must have a return type. Ignored. -cpp_no_return_type.i:10: Warning 504: Function UU must have a return type. Ignored. +cpp_no_return_type.i:6: Warning 504: Function S::R() must have a return type. Ignored. +cpp_no_return_type.i:10: Warning 504: Function U::UU() must have a return type. Ignored. :::::::::::::::::::::::::::::::: cpp_nobase.i ::::::::::::::::::::::::::::::::::: cpp_nobase.i:3: Warning 401: Nothing known about base class 'Bar'. Ignored. Modified: trunk/Source/Modules/lang.cxx =================================================================== --- trunk/Source/Modules/lang.cxx 2012-05-26 08:20:20 UTC (rev 13127) +++ trunk/Source/Modules/lang.cxx 2012-05-28 06:20:45 UTC (rev 13128) @@ -2623,7 +2623,7 @@ Delete(expected_name_resolved); } if (illegal_name) { - Swig_warning(WARN_LANG_RETURN_TYPE, input_file, line_number, "Function %s must have a return type. Ignored.\n", Swig_name_decl(name)); + Swig_warning(WARN_LANG_RETURN_TYPE, input_file, line_number, "Function %s must have a return type. Ignored.\n", Swig_name_decl(n)); Swig_restore(n); return SWIG_NOWRAP; } @@ -2760,7 +2760,7 @@ } if (illegal_name) { - Swig_warning(WARN_LANG_ILLEGAL_DESTRUCTOR, input_file, line_number, "Illegal destructor name %s. Ignored.\n", Swig_name_decl(name)); + Swig_warning(WARN_LANG_ILLEGAL_DESTRUCTOR, input_file, line_number, "Illegal destructor name %s. Ignored.\n", Swig_name_decl(n)); Swig_restore(n); Delete(expected_name); return SWIG_NOWRAP; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-05-29 22:02:50
|
Revision: 13135 http://swig.svn.sourceforge.net/swig/?rev=13135&view=rev Author: wsfulton Date: 2012-05-29 22:02:43 +0000 (Tue, 29 May 2012) Log Message: ----------- Fix bug 3529601 - seg fault when a protected method has the director feature but the parent class does not. Also fix similar problems with the allprotected feature. Modified Paths: -------------- trunk/CHANGES.current trunk/Examples/test-suite/common.mk trunk/Source/Modules/go.cxx trunk/Source/Modules/lang.cxx trunk/Source/Modules/swigmod.h Added Paths: ----------- trunk/Examples/test-suite/allprotected_not.i Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-05-28 22:56:37 UTC (rev 13134) +++ trunk/CHANGES.current 2012-05-29 22:02:43 UTC (rev 13135) @@ -4,6 +4,11 @@ Version 2.0.8 (in progress) =========================== +2012-05-29: wsfulton + Fix #3529601 - seg fault when a protected method has the "director" + feature but the parent class does not. Also fix similar problems with + the allprotected feature. + 2012-05-28: wsfulton Fix seg fault when attempting to warn about an illegal destructor - #3530055, 3530078 and #3530118. Added: trunk/Examples/test-suite/allprotected_not.i =================================================================== --- trunk/Examples/test-suite/allprotected_not.i (rev 0) +++ trunk/Examples/test-suite/allprotected_not.i 2012-05-29 22:02:43 UTC (rev 13135) @@ -0,0 +1,27 @@ +// Tests directors and allprotected option when the class does not have the "director" feature +// Was previously crashing and/or generating uncompilable code. + +%module(directors="1", allprotected="1") allprotected_not + +//%feature("director") AllProtectedNot; +%feature("director") AllProtectedNot::ProtectedMethod; +%feature("director") AllProtectedNot::StaticNonVirtualProtectedMethod; +%feature("director") AllProtectedNot::NonVirtualProtectedMethod; +%feature("director") AllProtectedNot::ProtectedVariable; +%feature("director") AllProtectedNot::StaticProtectedVariable; +%feature("director") AllProtectedNot::PublicMethod; + +%inline %{ +class AllProtectedNot { +public: + virtual ~AllProtectedNot() {} + virtual void PublicMethod() {} +protected: + virtual void ProtectedMethod() {} + static void StaticNonVirtualProtectedMethod() {} + void NonVirtualProtectedMethod() {} + int ProtectedVariable; + static int StaticProtectedVariable; +}; +int AllProtectedNot::StaticProtectedVariable = 0; +%} Modified: trunk/Examples/test-suite/common.mk =================================================================== --- trunk/Examples/test-suite/common.mk 2012-05-28 22:56:37 UTC (rev 13134) +++ trunk/Examples/test-suite/common.mk 2012-05-29 22:02:43 UTC (rev 13135) @@ -108,6 +108,7 @@ aggregate \ allowexcept \ allprotected \ + allprotected_not \ anonymous_bitfield \ apply_signed_char \ apply_strings \ Modified: trunk/Source/Modules/go.cxx =================================================================== --- trunk/Source/Modules/go.cxx 2012-05-28 22:56:37 UTC (rev 13134) +++ trunk/Source/Modules/go.cxx 2012-05-29 22:02:43 UTC (rev 13135) @@ -2088,7 +2088,7 @@ } int flags = Extend | SmartPointer | use_naturalvar_mode(var); - if (is_non_virtual_protected_access(var)) { + if (isNonVirtualProtectedAccess(var)) { flags |= CWRAP_ALL_PROTECTED_ACCESS; } Modified: trunk/Source/Modules/lang.cxx =================================================================== --- trunk/Source/Modules/lang.cxx 2012-05-28 22:56:37 UTC (rev 13134) +++ trunk/Source/Modules/lang.cxx 2012-05-29 22:02:43 UTC (rev 13135) @@ -841,7 +841,7 @@ if (!isfriend) { /* Check what the director needs. If the method is pure virtual, it is always needed. * Also wrap non-virtual protected members if asked for (allprotected mode). */ - if (!(directorsEnabled() && ((is_member_director(CurrentClass, n) && need_nonpublic_member(n)) || is_non_virtual_protected_access(n)))) { + if (!(directorsEnabled() && ((is_member_director(CurrentClass, n) && need_nonpublic_member(n)) || isNonVirtualProtectedAccess(n)))) { return SWIG_NOWRAP; } // Prevent wrapping protected overloaded director methods more than once - @@ -1224,7 +1224,7 @@ // Set up the type for the cast to this class for use when wrapping const director (virtual) methods. // Note: protected director methods or when allprotected mode turned on. String *director_type = 0; - if (!is_public(n) && (is_member_director(CurrentClass, n) || GetFlag(n, "explicitcall") || is_non_virtual_protected_access(n))) { + if (!is_public(n) && (is_member_director(CurrentClass, n) || GetFlag(n, "explicitcall") || isNonVirtualProtectedAccess(n))) { director_type = Copy(DirectorClassName); String *qualifier = Getattr(n, "qualifier"); if (qualifier) @@ -1270,7 +1270,7 @@ if (!Extend) { Node *sb = Getattr(n, "cplus:staticbase"); String *sname = Getattr(sb, "name"); - if (is_non_virtual_protected_access(n)) + if (isNonVirtualProtectedAccess(n)) cname = NewStringf("%s::%s", DirectorClassName, name); else cname = NewStringf("%s::%s", sname, name); @@ -1415,14 +1415,14 @@ Delete(pname); } } else { - String *pname = is_non_virtual_protected_access(n) ? NewString("darg") : Swig_cparm_name(0, 0); + String *pname = isNonVirtualProtectedAccess(n) ? NewString("darg") : Swig_cparm_name(0, 0); target = NewStringf("%s->%s", pname, name); Delete(pname); } tm = Swig_typemap_lookup("memberin", n, target, 0); } int flags = Extend | SmartPointer | use_naturalvar_mode(n); - if (is_non_virtual_protected_access(n)) + if (isNonVirtualProtectedAccess(n)) flags = flags | CWRAP_ALL_PROTECTED_ACCESS; Swig_MembersetToFunction(n, ClassType, flags); @@ -1470,7 +1470,7 @@ /* Emit get function */ { int flags = Extend | SmartPointer | use_naturalvar_mode(n); - if (is_non_virtual_protected_access(n)) + if (isNonVirtualProtectedAccess(n)) flags = flags | CWRAP_ALL_PROTECTED_ACCESS; Swig_MembergetToFunction(n, ClassType, flags); Setattr(n, "sym:name", mrename_get); @@ -1530,7 +1530,7 @@ int Language::staticmembervariableHandler(Node *n) { Swig_require("staticmembervariableHandler", n, "*name", "*sym:name", "*type", "?value", NIL); String *value = Getattr(n, "value"); - String *classname = !SmartPointer ? (is_non_virtual_protected_access(n) ? DirectorClassName : ClassName) : Getattr(CurrentClass, "allocate:smartpointerbase"); + String *classname = !SmartPointer ? (isNonVirtualProtectedAccess(n) ? DirectorClassName : ClassName) : Getattr(CurrentClass, "allocate:smartpointerbase"); if (!value || !Getattr(n, "hasconsttype")) { String *name = Getattr(n, "name"); @@ -1695,7 +1695,7 @@ if (Extend) new_name = Copy(value); else - new_name = NewStringf("%s::%s", is_non_virtual_protected_access(n) ? DirectorClassName : ClassName, name); + new_name = NewStringf("%s::%s", isNonVirtualProtectedAccess(n) ? DirectorClassName : ClassName, name); Setattr(n, "name", new_name); constantWrapper(n); @@ -2116,7 +2116,7 @@ Node *nodeType = Getattr(ni, "nodeType"); bool cdeclaration = (Cmp(nodeType, "cdecl") == 0); if (cdeclaration && !GetFlag(ni, "feature:ignore")) { - if (is_non_virtual_protected_access(ni)) { + if (isNonVirtualProtectedAccess(ni)) { Node *overloaded = Getattr(ni, "sym:overloaded"); // emit the using base::member statement (but only once if the method is overloaded) if (!overloaded || (overloaded && (overloaded == ni))) @@ -3331,7 +3331,7 @@ * Language::need_nonpublic_member() * ----------------------------------------------------------------------------- */ int Language::need_nonpublic_member(Node *n) { - if (directorsEnabled()) { + if (directorsEnabled() && DirectorClassName) { if (is_protected(n)) { if (dirprot_mode()) { /* when using dirprot mode, the protected members are always needed. */ @@ -3356,6 +3356,16 @@ } /* ----------------------------------------------------------------------------- + * Language::() + * ----------------------------------------------------------------------------- */ + +bool Language::isNonVirtualProtectedAccess(Node *n) const { + // Ideally is_non_virtual_protected_access() would contain all this logic, see + // comments therein about vtable. + return DirectorClassName && is_non_virtual_protected_access(n); +} + +/* ----------------------------------------------------------------------------- * Language::extraDirectorProtectedCPPMethodsRequired() * ----------------------------------------------------------------------------- */ Modified: trunk/Source/Modules/swigmod.h =================================================================== --- trunk/Source/Modules/swigmod.h 2012-05-28 22:56:37 UTC (rev 13134) +++ trunk/Source/Modules/swigmod.h 2012-05-29 22:02:43 UTC (rev 13135) @@ -294,6 +294,10 @@ /* Some language modules require additional wrappers for virtual methods not declared in sub-classes */ virtual bool extraDirectorProtectedCPPMethodsRequired() const; + /* Identifies if a protected members that are generated when the allprotected option is used. + This does not include protected virtual methods as they are turned on with the dirprot option. */ + bool isNonVirtualProtectedAccess(Node *n) const; + /* Director subclass comparison test */ String *none_comparison; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ian...@us...> - 2012-06-04 05:37:16
|
Revision: 13146 http://swig.svn.sourceforge.net/swig/?rev=13146&view=rev Author: ianlancetaylor Date: 2012-06-04 05:37:10 +0000 (Mon, 04 Jun 2012) Log Message: ----------- Fix Go support to use appropriate interface for entering and leaving C/C++ code, depending on GCC version. Modified Paths: -------------- trunk/Lib/go/goruntime.swg trunk/Source/Modules/go.cxx Modified: trunk/Lib/go/goruntime.swg =================================================================== --- trunk/Lib/go/goruntime.swg 2012-06-03 20:06:58 UTC (rev 13145) +++ trunk/Lib/go/goruntime.swg 2012-06-04 05:37:10 UTC (rev 13146) @@ -84,6 +84,57 @@ #endif extern void *_cgo_allocate(size_t); extern void _cgo_panic(const char *); + +/* Implementations of SwigCgocall and friends for different versions + of gccgo. The Go code will call these functions using C names with + a prefix of the module name. The implementations here call the + routine in libgo. The routines to call vary depending on the gccgo + version. We assume that the version of gcc used to compile this + file is the same as the version of gccgo. */ + +#define SWIGCONCAT2(s1, s2) s1 ## s2 +#define SWIGCONCAT1(s1, s2) SWIGCONCAT2(s1, s2) +#define SwigCgocall SWIGCONCAT1(SWIGMODULE, SwigCgocall) +#define SwigCgocallDone SWIGCONCAT1(SWIGMODULE, SwigCgocallDone) +#define SwigCgocallBack SWIGCONCAT1(SWIGMODULE, SwigCgocallBack) +#define SwigCgocallBackDone SWIGCONCAT1(SWIGMODULE, SwigCgocallBackDone) + +#define SWIG_GCC_VERSION \ + (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC__PATH_LEVEL__) + +#if SWIG_GCC_VERSION < 40700 +#define SwigDoCgocall() +#define SwigDoCgocalldone() +#define SwigDoCgocallBack() +#define SwigDoCgocallBackDone() +#elif SWIG_GCC_VERSION == 40700 +void SwigDoCgocall(void) __asm__("libgo_syscall.syscall.Entersyscall"); +void SwigDoCgocallDone(void) __asm__("libgo_syscall.syscall.Exitsyscall"); +void SwigDoCgocallBack(void) __asm__("libgo_syscall.syscall.Exitsyscall"); +void SwigDoCgocallBackDone(void) __asm__("libgo_syscall.syscall.Entersyscall"); +#else +void SwigDoCgocall(void) __asm__("syscall.Cgocall"); +void SwigDoCgocallDone(void) __asm__("syscall.CgocallDone"); +void SwigDoCgocallBack(void) __asm__("syscall.CgocallBack"); +void SwigDoCgocallBackDone(void) __asm__("syscall.CgocallBackDone"); +#endif + +void SwigCgocall() { + SwigDoCgocall(); +} + +void SwigCgocallDone() { + SwigDoCgocallDone(); +} + +void SwigCgocallBack() { + SwigDoCgocallBack(); +} + +void SwigCgocallBackDone() { + SwigDoCgocallBackDone(); +} + #ifdef __cplusplus } #endif Modified: trunk/Source/Modules/go.cxx =================================================================== --- trunk/Source/Modules/go.cxx 2012-06-03 20:06:58 UTC (rev 13145) +++ trunk/Source/Modules/go.cxx 2012-06-04 05:37:10 UTC (rev 13146) @@ -326,6 +326,8 @@ Swig_banner(f_c_begin); + Printf(f_c_runtime, "#define SWIGMODULE %s\n", module); + if (directorsEnabled()) { Printf(f_c_runtime, "#define SWIG_DIRECTORS\n"); @@ -349,6 +351,15 @@ Printf(f_go_begin, "\npackage %s\n\n", package); + Printf(f_go_runtime, "//extern %sSwigCgocall\n", module); + Printf(f_go_runtime, "func SwigCgocall()\n"); + Printf(f_go_runtime, "//extern %sSwigCgocallDone\n", module); + Printf(f_go_runtime, "func SwigCgocallDone()\n"); + Printf(f_go_runtime, "//extern %sSwigCgocallBack\n", module); + Printf(f_go_runtime, "func SwigCgocallBack()\n"); + Printf(f_go_runtime, "//extern %sSwigCgocallBackDone\n", module); + Printf(f_go_runtime, "func SwigCgocallBackDone()\n\n"); + // All the C++ wrappers should be extern "C". Printv(f_c_wrappers, "#ifdef __cplusplus\n", "extern \"C\" {\n", "#endif\n\n", NULL); @@ -941,8 +952,8 @@ } if (gccgo_flag) { - Printv(f_go_wrappers, "\tsyscall.Entersyscall()\n", NULL); - Printv(f_go_wrappers, "\tdefer syscall.Exitsyscall()\n", NULL); + Printv(f_go_wrappers, "\tSwigCgocall()\n", NULL); + Printv(f_go_wrappers, "\tdefer SwigCgocallDone()\n", NULL); } Printv(f_go_wrappers, "\t", NULL); @@ -2538,8 +2549,8 @@ Printv(f_go_wrappers, "\tp := &", director_struct_name, "{0, v}\n", NULL); if (gccgo_flag) { - Printv(f_go_wrappers, "\tsyscall.Entersyscall()\n", NULL); - Printv(f_go_wrappers, "\tdefer syscall.Exitsyscall()\n", NULL); + Printv(f_go_wrappers, "\tSwigCgocall()\n", NULL); + Printv(f_go_wrappers, "\tdefer SwigCgocallDone()\n", NULL); } Printv(f_go_wrappers, "\tp.", class_receiver, " = ", fn_name, NULL); @@ -3049,11 +3060,6 @@ Printv(f_go_wrappers, " {\n", NULL); - if (gccgo_flag) { - Printv(f_go_wrappers, "\tsyscall.Entersyscall()\n", NULL); - Printv(f_go_wrappers, "\tdefer syscall.Exitsyscall()\n", NULL); - } - Printv(f_go_wrappers, "\tif swig_g, swig_ok := swig_p.v.(", interface_name, "); swig_ok {\n", NULL); Printv(f_go_wrappers, "\t\t", NULL); if (SwigType_type(result) != T_VOID) { @@ -3076,6 +3082,12 @@ Printv(f_go_wrappers, "\t\treturn\n", NULL); } Printv(f_go_wrappers, "\t}\n", NULL); + + if (gccgo_flag) { + Printv(f_go_wrappers, "\tSwigCgocall()\n", NULL); + Printv(f_go_wrappers, "\tdefer SwigCgocallDone()\n", NULL); + } + Printv(f_go_wrappers, "\t", NULL); if (SwigType_type(result) != T_VOID) { Printv(f_go_wrappers, "return ", NULL); @@ -3222,8 +3234,8 @@ Printv(f_go_wrappers, " {\n", NULL); if (gccgo_flag) { - Printv(f_go_wrappers, "\tsyscall.Entersyscall()\n", NULL); - Printv(f_go_wrappers, "\tdefer syscall.Exitsyscall()\n", NULL); + Printv(f_go_wrappers, "\tSwigCgocall()\n", NULL); + Printv(f_go_wrappers, "\tdefer SwigCgocallDone()\n", NULL); } Printv(f_go_wrappers, "\t", NULL); @@ -3269,8 +3281,8 @@ Printv(f_go_wrappers, "{\n", NULL); if (gccgo_flag) { - Printv(f_go_wrappers, "\tsyscall.Exitsyscall()\n", NULL); - Printv(f_go_wrappers, "\tdefer syscall.Entersyscall()\n", NULL); + Printv(f_go_wrappers, "\tSwigCgocallBack()\n", NULL); + Printv(f_go_wrappers, "\tdefer SwigCgocallBackDone()\n", NULL); } Printv(f_go_wrappers, "\t", NULL); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-06-11 18:06:06
|
Revision: 13160 http://swig.svn.sourceforge.net/swig/?rev=13160&view=rev Author: wsfulton Date: 2012-06-11 18:05:56 +0000 (Mon, 11 Jun 2012) Log Message: ----------- Move contributor names to where they belong Modified Paths: -------------- trunk/COPYRIGHT trunk/Lib/r/std_vector.i Modified: trunk/COPYRIGHT =================================================================== --- trunk/COPYRIGHT 2012-06-10 13:54:27 UTC (rev 13159) +++ trunk/COPYRIGHT 2012-06-11 18:05:56 UTC (rev 13160) @@ -65,7 +65,7 @@ James Michael DuPont, Clark McGrew, Dustin Mitchell, Ian Cooke, Catalin Dumitrescu, Baran Kovuk, Oleg Tolmatcev, Tal Shalif, Lluis Padro, Chris Seatory, Igor Bely, Robin Dunn, Edward Zimmermann, David Ascher, Dominique Dumont, Pier Giorgio Esposito, Hasan Baran Kovuk, - Klaus Wiederänders + Klaus Wiederänders, Richard Beare (See CHANGES and CHANGES.current and the bug tracker for a more complete list). Past students: Modified: trunk/Lib/r/std_vector.i =================================================================== --- trunk/Lib/r/std_vector.i 2012-06-10 13:54:27 UTC (rev 13159) +++ trunk/Lib/r/std_vector.i 2012-06-11 18:05:56 UTC (rev 13160) @@ -1,7 +1,6 @@ // R specific swig components /* Vectors - Thanks to Richard Beare - ric...@ie... for StdVectorTraits */ %fragment("StdVectorTraits","header",fragment="StdSequenceTraits") This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-06-25 06:36:40
|
Revision: 13190 http://swig.svn.sourceforge.net/swig/?rev=13190&view=rev Author: wsfulton Date: 2012-06-25 06:36:29 +0000 (Mon, 25 Jun 2012) Log Message: ----------- Fix symbol table bug with combinations of using directives and using declarations Modified Paths: -------------- trunk/CHANGES.current trunk/Examples/test-suite/common.mk trunk/Source/Swig/symbol.c Added Paths: ----------- trunk/Examples/test-suite/java/using_directive_and_declaration_runme.java trunk/Examples/test-suite/using_directive_and_declaration.i Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-06-24 04:20:59 UTC (rev 13189) +++ trunk/CHANGES.current 2012-06-25 06:36:29 UTC (rev 13190) @@ -4,6 +4,19 @@ Version 2.0.8 (in progress) =========================== +2012-06-25: wsfulton + Fix using declarations combined with using directives so that types are correctly found in scope. + Example: + + namespace Outer2 { + namespace Space2 { + class Thing2 {}; + } + } + using namespace Outer2; // using directive + using Space2::Thing2; // using declaration + void useit2(Thing2 t) {} + 2012-05-29: wsfulton Fix #3529601 - seg fault when a protected method has the "director" feature but the parent class does not. Also fix similar problems with Modified: trunk/Examples/test-suite/common.mk =================================================================== --- trunk/Examples/test-suite/common.mk 2012-06-24 04:20:59 UTC (rev 13189) +++ trunk/Examples/test-suite/common.mk 2012-06-25 06:36:29 UTC (rev 13190) @@ -442,6 +442,7 @@ using1 \ using2 \ using_composition \ + using_directive_and_declaration \ using_extend \ using_inherit \ using_namespace \ Added: trunk/Examples/test-suite/java/using_directive_and_declaration_runme.java =================================================================== --- trunk/Examples/test-suite/java/using_directive_and_declaration_runme.java (rev 0) +++ trunk/Examples/test-suite/java/using_directive_and_declaration_runme.java 2012-06-25 06:36:29 UTC (rev 13190) @@ -0,0 +1,28 @@ + +import using_directive_and_declaration.*; + +public class using_directive_and_declaration_runme { + + static { + try { + System.loadLibrary("using_directive_and_declaration"); + } catch (UnsatisfiedLinkError e) { + System.err.println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e); + System.exit(1); + } + } + + public static void main(String argv[]) + { + using_directive_and_declaration.useit1(new Thing1()); + using_directive_and_declaration.useit2(new Thing2()); + using_directive_and_declaration.useit3(new Thing3()); + using_directive_and_declaration.useit4(new Thing4()); + using_directive_and_declaration.useit5(new Thing5()); + Thing6a t6a = new Thing6a(); + t6a.a(); + Thing6 t6b = new Thing6(); + t6b.b(); + using_directive_and_declaration.useit6(t6a, t6b); + } +} Added: trunk/Examples/test-suite/using_directive_and_declaration.i =================================================================== --- trunk/Examples/test-suite/using_directive_and_declaration.i (rev 0) +++ trunk/Examples/test-suite/using_directive_and_declaration.i 2012-06-25 06:36:29 UTC (rev 13190) @@ -0,0 +1,85 @@ +%module using_directive_and_declaration +// Test using directives combined with using declarations + +%inline %{ +namespace Outer1 { + namespace Space1 { + class Thing1 {}; + } +} +using namespace Outer1::Space1; +using Outer1::Space1::Thing1; +void useit1(Thing1 t) {} + + +namespace Outer2 { + namespace Space2 { + class Thing2 {}; + } +} +using namespace Outer2; +using Space2::Thing2; +void useit2(Thing2 t) {} + + +namespace Outer3 { + namespace Space3 { + namespace Middle3 { + class Thing3 {}; + } + } +} +using namespace Outer3; +using namespace Space3; +using Middle3::Thing3; +void useit3(Thing3 t) {} + + +namespace Outer4 { + namespace Space4 { + namespace Middle4 { + class Thing4 {}; + } + } +} +using namespace Outer4::Space4; +using Middle4::Thing4; +void useit4(Thing4 t) {} + + +namespace Outer5 { + namespace Space5 { + namespace Middle5 { + namespace More5 { + class Thing5 {}; + } + } + } +} +using namespace ::Outer5::Space5; +using namespace Middle5; +using More5::Thing5; +void useit5(Thing5 t) {} + +%} + +// Same symbol name in different namespaces +%rename(Thing6a) Outer6::Space6a::Thing6; + +%inline %{ +namespace Outer6 { + namespace Space6a { + struct Thing6 { + void a() {} + }; + } + namespace Space6b { + struct Thing6 { + void b() {} + }; + } +} +using namespace Outer6::Space6b; +void useit6(Outer6::Space6a::Thing6 ta, Thing6 tb) {} +%} + Modified: trunk/Source/Swig/symbol.c =================================================================== --- trunk/Source/Swig/symbol.c 2012-06-24 04:20:59 UTC (rev 13189) +++ trunk/Source/Swig/symbol.c 2012-06-25 06:36:29 UTC (rev 13190) @@ -1053,6 +1053,25 @@ Node *pn = Getattr(symtab, "parentNode"); if (pn) n = symbol_lookup_qualified(name, pn, prefix, local, checkfunc); + + /* Check inherited scopes */ + if (!n) { + List *inherit = Getattr(symtab, "inherit"); + if (inherit) { + int i, len; + len = Len(inherit); + for (i = 0; i < len; i++) { + Node *prefix_node = symbol_lookup(prefix, Getitem(inherit, i), checkfunc); + if (prefix_node) { + Node *prefix_symtab = Getattr(prefix_node, "symtab"); + if (prefix_symtab) { + n = symbol_lookup(name, prefix_symtab, checkfunc); + break; + } + } + } + } + } } else { n = 0; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-07-21 14:04:43
|
Revision: 13339 http://swig.svn.sourceforge.net/swig/?rev=13339&view=rev Author: wsfulton Date: 2012-07-21 14:04:37 +0000 (Sat, 21 Jul 2012) Log Message: ----------- Fix gdb debugger functions to display to the gdb output window rather than stdout. Modified Paths: -------------- trunk/CHANGES.current trunk/Tools/swig.gdb Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-07-21 06:58:28 UTC (rev 13338) +++ trunk/CHANGES.current 2012-07-21 14:04:37 UTC (rev 13339) @@ -4,6 +4,11 @@ Version 2.0.8 (in progress) =========================== +2012-06-27: wsfulton + Fix gdb debugger functions 'swigprint' and 'locswigprint' to display to the gdb output window + rather than stdout. This fixes display problems in gdbtui and the ensures the output + appears where expected in other gdb based debuggers such as Eclipse CDT. + 2012-07-20: kwwette [Octave] segfault-on-exit prevention hack now preserves exit status, and uses C99 _Exit(). Modified: trunk/Tools/swig.gdb =================================================================== --- trunk/Tools/swig.gdb 2012-07-21 06:58:28 UTC (rev 13338) +++ trunk/Tools/swig.gdb 2012-07-21 14:04:37 UTC (rev 13339) @@ -15,7 +15,7 @@ else set $expand_count = -1 end - call Swig_print($arg0, $expand_count) + Printf "%s\n", Swig_to_string($arg0, $expand_count) end document swigprint Displays any SWIG DOH object @@ -31,7 +31,7 @@ else set $expand_count = -1 end - call Swig_print_with_location($arg0, $expand_count) + Printf "%s\n", Swig_to_string_with_location($arg0, $expand_count) end document locswigprint Displays any SWIG DOH object prefixed with file and line location This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-07-21 22:52:37
|
Revision: 13340 http://swig.svn.sourceforge.net/swig/?rev=13340&view=rev Author: wsfulton Date: 2012-07-21 22:52:30 +0000 (Sat, 21 Jul 2012) Log Message: ----------- Fix display of pointers on 64 bit systems, only 32 bit values were being shown. Modified Paths: -------------- trunk/CHANGES.current trunk/Source/CParse/parser.y trunk/Source/DOH/hash.c trunk/Source/DOH/list.c trunk/Source/Modules/allegrocl.cxx trunk/Source/Modules/browser.cxx trunk/Source/Modules/cffi.cxx trunk/Source/Modules/modula3.cxx trunk/Source/Modules/perl5.cxx trunk/Source/Modules/python.cxx trunk/Source/Modules/s-exp.cxx trunk/Source/Modules/xml.cxx trunk/Source/Swig/symbol.c trunk/Source/Swig/tree.c trunk/Source/Swig/typesys.c Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-07-21 14:04:37 UTC (rev 13339) +++ trunk/CHANGES.current 2012-07-21 22:52:30 UTC (rev 13340) @@ -5,6 +5,9 @@ Version 2.0.8 (in progress) =========================== 2012-06-27: wsfulton + Fix display of pointers in various places on 64 bit systems - only 32 bits were being shown. + +2012-06-27: wsfulton Fix gdb debugger functions 'swigprint' and 'locswigprint' to display to the gdb output window rather than stdout. This fixes display problems in gdbtui and the ensures the output appears where expected in other gdb based debuggers such as Eclipse CDT. Modified: trunk/Source/CParse/parser.y =================================================================== --- trunk/Source/CParse/parser.y 2012-07-21 14:04:37 UTC (rev 13339) +++ trunk/Source/CParse/parser.y 2012-07-21 22:52:30 UTC (rev 13340) @@ -2988,7 +2988,7 @@ if (am) { Symtab *st = Swig_symbol_current(); Swig_symbol_setscope(Getattr(templnode,"symtab")); - /* Printf(stdout,"%s: %s %x %x\n", Getattr(templnode,"name"), clsname, Swig_symbol_current(), Getattr(templnode,"symtab")); */ + /* Printf(stdout,"%s: %s %p %p\n", Getattr(templnode,"name"), clsname, Swig_symbol_current(), Getattr(templnode,"symtab")); */ merge_extensions(templnode,am); Swig_symbol_setscope(st); append_previous_extension(templnode,am); Modified: trunk/Source/DOH/hash.c =================================================================== --- trunk/Source/DOH/hash.c 2012-07-21 14:04:37 UTC (rev 13339) +++ trunk/Source/DOH/hash.c 2012-07-21 22:52:30 UTC (rev 13340) @@ -415,12 +415,12 @@ s = NewStringEmpty(); if (ObjGetMark(ho)) { - Printf(s, "Hash(0x%x)", ho); + Printf(s, "Hash(%p)", ho); return s; } if (expanded >= max_expand) { /* replace each hash attribute with a '.' */ - Printf(s, "Hash(0x%x) {", ho); + Printf(s, "Hash(%p) {", ho); for (i = 0; i < h->hashsize; i++) { n = h->hashtable[i]; while (n) { @@ -432,7 +432,7 @@ return s; } ObjSetMark(ho, 1); - Printf(s, "Hash(0x%x) {\n", ho); + Printf(s, "Hash(%p) {\n", ho); for (i = 0; i < h->hashsize; i++) { n = h->hashtable[i]; while (n) { Modified: trunk/Source/DOH/list.c =================================================================== --- trunk/Source/DOH/list.c 2012-07-21 14:04:37 UTC (rev 13339) +++ trunk/Source/DOH/list.c 2012-07-21 22:52:30 UTC (rev 13340) @@ -242,7 +242,7 @@ List *l = (List *) ObjData(lo); s = NewStringEmpty(); if (ObjGetMark(lo)) { - Printf(s, "List(%x)", lo); + Printf(s, "List(%p)", lo); return s; } ObjSetMark(lo, 1); Modified: trunk/Source/Modules/allegrocl.cxx =================================================================== --- trunk/Source/Modules/allegrocl.cxx 2012-07-21 14:04:37 UTC (rev 13339) +++ trunk/Source/Modules/allegrocl.cxx 2012-07-21 22:52:30 UTC (rev 13340) @@ -206,7 +206,7 @@ void add_linked_type(Node *n) { #ifdef ALLEGROCL_CLASS_DEBUG - Printf(stderr, "Adding linked node of type: %s(%s) %s(%x)\n\n", nodeType(n), Getattr(n, "storage"), Getattr(n, "name"), n); + Printf(stderr, "Adding linked node of type: %s(%s) %s(%p)\n\n", nodeType(n), Getattr(n, "storage"), Getattr(n, "name"), n); // Swig_print_node(n); #endif if (!first_linked_type) { @@ -300,13 +300,13 @@ Node *p = Getattr(n, "allegrocl:synonym-of"); Node *prim = n; - // Printf(stderr, "getting primary synonym of %x\n", n); + // Printf(stderr, "getting primary synonym of %p\n", n); while (p) { - // Printf(stderr, " found one! %x\n", p); + // Printf(stderr, " found one! %p\n", p); prim = p; p = Getattr(p, "allegrocl:synonym-of"); } - // Printf(stderr,"get_primary_syn: DONE. returning %s(%x)\n", Getattr(prim,"name"),prim); + // Printf(stderr,"get_primary_syn: DONE. returning %s(%p)\n", Getattr(prim,"name"),prim); return prim; } @@ -331,7 +331,7 @@ // , name); #ifdef ALLEGROCL_CLASS_DEBUG - Printf(stderr, "Linking forward reference type = %s(%x)\n", k, n); + Printf(stderr, "Linking forward reference type = %s(%p)\n", k, n); #endif add_linked_type(n); } @@ -346,8 +346,8 @@ String *cDeclName = n ? Getattr(n, "name") : 0; #ifdef ALLEGROCL_CLASS_DEBUG - Printf(stderr, "IN A-D-F-T. (n=%x, ow=%d, k=%s, name=%s, ns=%s\n", n, overwrite, k, name, ns); - Printf(stderr, " templated = '%x', classDecl = '%x'\n", templated, cDeclName); + Printf(stderr, "IN A-D-F-T. (n=%p, ow=%d, k=%s, name=%s, ns=%s\n", n, overwrite, k, name, ns); + Printf(stderr, " templated = '%p', classDecl = '%p'\n", templated, cDeclName); #endif if (n) { if (!name) @@ -456,7 +456,7 @@ } } #ifdef ALLEGROCL_CLASS_DEBUG - Printf(stderr, "looking to add %s/%s(%x) to linked_type_list...\n", k, name, n); + Printf(stderr, "looking to add %s/%s(%p) to linked_type_list...\n", k, name, n); #endif if (is_fwd_ref) { // Printf(stderr,"*** 1\n"); @@ -509,7 +509,7 @@ Setattr(new_node, "allegrocl:synonym:is-primary", "1"); } else { // a synonym type was found (held in variable 'match') - // Printf(stderr, "setting primary synonym of %x to %x\n", new_node, match); + // Printf(stderr, "setting primary synonym of %p to %p\n", new_node, match); if (new_node == match) Printf(stderr, "Hey-4 * - '%s' is a synonym of iteself!\n", Getattr(new_node, "name")); Setattr(new_node, "allegrocl:synonym-of", match); @@ -556,8 +556,8 @@ Setattr(n, "allegrocl:synonym-of", match); Setattr(n, "real-name", Copy(lookup_type)); - // Printf(stderr, "*** pre-5: found match of '%s'(%x)\n", Getattr(match,"name"),match); - // if(n == match) Printf(stderr, "Hey-5 *** setting synonym of %x to %x\n", n, match); + // Printf(stderr, "*** pre-5: found match of '%s'(%p)\n", Getattr(match,"name"),match); + // if(n == match) Printf(stderr, "Hey-5 *** setting synonym of %p to %p\n", n, match); // Printf(stderr,"*** 5\n"); add_linked_type(n); } else { @@ -615,7 +615,7 @@ match = find_linked_type_by_name(resolved); if (!match) { #ifdef ALLEGROCL_CLASS_DEBUG - Printf(stderr, "found no implicit instantiation of %%template node %s(%x)\n", Getattr(n, "name"), n); + Printf(stderr, "found no implicit instantiation of %%template node %s(%p)\n", Getattr(n, "name"), n); #endif add_linked_type(n); } else { @@ -624,14 +624,14 @@ Setattr(n, "allegrocl:synonym:is-primary", "1"); Delattr(primary, "allegrocl:synonym:is-primary"); if (n == match) - Printf(stderr, "Hey-7 * setting synonym of %x to %x\n (match = %x)", primary, n, match); + Printf(stderr, "Hey-7 * setting synonym of %p to %p\n (match = %p)", primary, n, match); Setattr(primary, "allegrocl:synonym-of", n); // Printf(stderr,"*** 7\n"); add_linked_type(n); } } else { #ifdef ALLEGROCL_CLASS_DEBUG - Printf(stderr, "linking type '%s'(%x)\n", k, n); + Printf(stderr, "linking type '%s'(%p)\n", k, n); #endif // Printf(stderr,"*** 8\n"); add_linked_type(n); @@ -821,7 +821,7 @@ Printf(stderr, "compose_foreign_type: ENTER (%s)...\n ", ty); // Printf(stderr, "compose_foreign_type: ENTER (%s)(%s)...\n ", ty, (id ? id : 0)); /* String *id_ref = SwigType_str(ty, id); - Printf(stderr, "looking up typemap for %s, found '%s'(%x)\n", + Printf(stderr, "looking up typemap for %s, found '%s'(%p)\n", id_ref, lookup_res ? Getattr(lookup_res, "code") : 0, lookup_res); if (lookup_res) Swig_print_node(lookup_res); */ @@ -860,7 +860,7 @@ Printf(stderr, "update_package: ENTER... \n"); Printf(stderr, " current_package = '%s'\n", current_package); Printf(stderr, " node_package = '%s'\n", Getattr(n, "allegrocl:package")); - Printf(stderr, " node(%x) = '%s'\n", n, Getattr(n, "name")); + Printf(stderr, " node(%p) = '%s'\n", n, Getattr(n, "name")); #endif String *node_package = Getattr(n, "allegrocl:package"); if (Strcmp(current_package, node_package)) { @@ -1119,7 +1119,7 @@ void emit_stub_class(Node *n) { #ifdef ALLEGROCL_WRAP_DEBUG - Printf(stderr, "emit_stub_class: ENTER... '%s'(%x)\n", Getattr(n, "sym:name"), n); + Printf(stderr, "emit_stub_class: ENTER... '%s'(%p)\n", Getattr(n, "sym:name"), n); Swig_print_node(n); #endif @@ -1157,7 +1157,7 @@ Printf(stderr, "emit_synonym: ENTER... \n"); #endif - // Printf(stderr,"in emit_synonym for %s(%x)\n", Getattr(synonym,"name"),synonym); + // Printf(stderr,"in emit_synonym for %s(%p)\n", Getattr(synonym,"name"),synonym); int is_tempInst = !Strcmp(nodeType(synonym), "templateInst"); String *synonym_type; @@ -1214,7 +1214,7 @@ String *name = Getattr(n, "sym:name"); String *kind = Getattr(n, "kind"); - // Printf(stderr,"in emit_full_class: '%s'(%x).", Getattr(n,"name"),n); + // Printf(stderr,"in emit_full_class: '%s'(%p).", Getattr(n,"name"),n); if (Getattr(n, "allegrocl:synonym-of")) { // Printf(stderr,"but it's a synonym of something.\n"); update_package_if_needed(n, f_clhead); @@ -1314,7 +1314,7 @@ void emit_class(Node *n) { #ifdef ALLEGROCL_WRAP_DEBUG - Printf(stderr, "emit_class: ENTER... '%s'(%x)\n", Getattr(n, "sym:name"), n); + Printf(stderr, "emit_class: ENTER... '%s'(%p)\n", Getattr(n, "sym:name"), n); #endif int is_tempInst = !Strcmp(nodeType(n), "templateInst"); @@ -1373,7 +1373,7 @@ Delete(type); Node *in_class = Getattr(n, "allegrocl:typedef:in-class"); - // Printf(stderr,"in emit_typedef: '%s'(%x).",Getattr(n,"name"),n); + // Printf(stderr,"in emit_typedef: '%s'(%p).",Getattr(n,"name"),n); if (Getattr(n, "allegrocl:synonym-of")) { // Printf(stderr," but it's a synonym of something.\n"); emit_synonym(n); @@ -1536,11 +1536,11 @@ Node *n = first_linked_type; int i = 0; while (n) { - Printf(f, "%d: (%x) node '%s' name '%s'\n", i++, n, nodeType(n), Getattr(n, "sym:name")); + Printf(f, "%d: (%p) node '%s' name '%s'\n", i++, n, nodeType(n), Getattr(n, "sym:name")); Node *t = Getattr(n, "allegrocl:synonym-of"); if (t) - Printf(f, " synonym-of %s(%x)\n", Getattr(t, "name"), t); + Printf(f, " synonym-of %s(%p)\n", Getattr(t, "name"), t); n = Getattr(n, "allegrocl:next_linked_type"); } } @@ -1556,7 +1556,7 @@ while (n) { String *node_type = nodeType(n); - // Printf(stderr,"emitting node %s(%x) of type %s.", Getattr(n,"name"),n, nodeType(n)); + // Printf(stderr,"emitting node %s(%p) of type %s.", Getattr(n,"name"),n, nodeType(n)); if (!Strcmp(node_type, "class") || !Strcmp(node_type, "templateInst")) { // may need to emit a stub, so it will update the package itself. // Printf(stderr," Passing to emit_class."); @@ -2049,7 +2049,7 @@ int nargs = 0; while (p) { - // Printf(stderr,"enla: '%s' lin='%x' numinputs='%s'\n", Getattr(p,"name"), Getattr(p,"tmap:lin"), Getattr(p,"tmap:lin:numinputs")); + // Printf(stderr,"enla: '%s' lin='%p' numinputs='%s'\n", Getattr(p,"name"), Getattr(p,"tmap:lin"), Getattr(p,"tmap:lin:numinputs")); if (Getattr(p, "tmap:lin")) { nargs += GetInt(p, "tmap:lin:numinputs"); p = Getattr(p, "tmap:lin:next"); @@ -2283,7 +2283,7 @@ result->arity = NewStringf("%d", // emit_num_arguments(Getattr(n, "wrap:parms"))); emit_num_lin_arguments(Getattr(n, "wrap:parms"))); - // Printf(stderr, "got arity of '%s' node '%s' '%x'\n", result->arity, Getattr(n,"name"), Getattr(n,"wrap:parms")); + // Printf(stderr, "got arity of '%s' node '%s' '%p'\n", result->arity, Getattr(n,"name"), Getattr(n,"wrap:parms")); } SetVoid(n, "allegrocl:id-converter-args", result); @@ -2361,7 +2361,7 @@ #endif List *overloads = Swig_overload_rank(n, true); - // Printf(stderr,"\ndispatch node=%x\n\n", n); + // Printf(stderr,"\ndispatch node=%p\n\n", n); // Swig_print_node(n); Node *overloaded_from = Getattr(n,"sym:overloaded"); @@ -2669,7 +2669,7 @@ if (Getattr(n, "overload:ignore")) { // if we're the last overload, make sure to force the emit // of the rest of the overloads before we leave. - // Printf(stderr, "ignored overload %s(%x)\n", name, Getattr(n, "sym:nextSibling")); + // Printf(stderr, "ignored overload %s(%p)\n", name, Getattr(n, "sym:nextSibling")); if (!Getattr(n, "sym:nextSibling")) { update_package_if_needed(n); emit_buffered_defuns(n); @@ -2798,7 +2798,7 @@ int ALLEGROCL::namespaceDeclaration(Node *n) { #ifdef ALLEGROCL_DEBUG - Printf(stderr, "namespaceDecl: '%s'(0x%x) (fc=0x%x)\n", Getattr(n, "sym:name"), n, firstChild(n)); + Printf(stderr, "namespaceDecl: '%s'(%p) (fc=%p)\n", Getattr(n, "sym:name"), n, firstChild(n)); #endif /* don't wrap a namespace with no contents. package bloat. @@ -3018,7 +3018,7 @@ if (in_class) { #ifdef ALLEGROCL_TYPE_DEBUG - Printf(stderr, " typedef in class '%s'(%x)\n", Getattr(in_class, "sym:name"), in_class); + Printf(stderr, " typedef in class '%s'(%p)\n", Getattr(in_class, "sym:name"), in_class); #endif Setattr(n, "allegrocl:typedef:in-class", in_class); @@ -3036,7 +3036,7 @@ String *lookup = lookup_defined_foreign_type(typedef_type); #ifdef ALLEGROCL_TYPE_DEBUG - Printf(stderr, "** lookup='%s'(%x), typedef_type='%s', strcmp = '%d' strstr = '%d'\n", lookup, lookup, typedef_type, Strcmp(typedef_type,"void"), Strstr(ff_type,"__SWIGACL_FwdReference")); + Printf(stderr, "** lookup='%s'(%p), typedef_type='%s', strcmp = '%d' strstr = '%d'\n", lookup, lookup, typedef_type, Strcmp(typedef_type,"void"), Strstr(ff_type,"__SWIGACL_FwdReference")); #endif if(lookup || (!lookup && Strcmp(typedef_type,"void")) || @@ -3162,7 +3162,7 @@ SwigType *childType = NewStringf("%s%s", Getattr(c, "decl"), Getattr(c, "type")); #ifdef ALLEGROCL_CLASS_DEBUG - Printf(stderr, "looking at child '%x' of type '%s' '%d'\n", c, childType, SwigType_isfunction(childType)); + Printf(stderr, "looking at child '%p' of type '%s' '%d'\n", c, childType, SwigType_isfunction(childType)); // Swig_print_node(c); #endif if (!SwigType_isfunction(childType)) Modified: trunk/Source/Modules/browser.cxx =================================================================== --- trunk/Source/Modules/browser.cxx 2012-07-21 14:04:37 UTC (rev 13339) +++ trunk/Source/Modules/browser.cxx 2012-07-21 22:52:30 UTC (rev 13340) @@ -29,9 +29,9 @@ v = 1; } if (v) { - Printf(out, "<a name=\"n%x\"></a>[<a href=\"hide.html?node=0x%x&hn=0x%x#n%x\">-</a>] ", n, t, n, n); + Printf(out, "<a name=\"n%p\"></a>[<a href=\"hide.html?node=%p&hn=%p#n%p\">-</a>] ", n, t, n, n); } else { - Printf(out, "<a name=\"n%x\"></a>[<a href=\"show.html?node=0x%x&hn=0x%x#n%x\">+</a>] ", n, t, n, n); + Printf(out, "<a name=\"n%p\"></a>[<a href=\"show.html?node=%p&hn=%p#n%p\">+</a>] ", n, t, n, n); } } void show_attributes(Node *obj) { @@ -52,7 +52,7 @@ Replaceall(o, "&", "&"); Replaceall(o, "<", "<"); Replaceall(o, ">", ">"); - Printf(os, "<a href=\"data.html?n=0x%x\">?</a> %-12s - %s\n", Getattr(obj, k), k, o); + Printf(os, "<a href=\"data.html?n=%p\">?</a> %-12s - %s\n", Getattr(obj, k), k, o); Delete(o); } else { DOH *o; @@ -64,10 +64,10 @@ } Replaceall(o, "&", "&"); Replaceall(o, "<", "<"); - Printf(os, "<a href=\"data.html?n=0x%x\">?</a> %-12s - \"%(escape)-0.70s%s\"\n", Getattr(obj, k), k, o, trunc); + Printf(os, "<a href=\"data.html?n=%p\">?</a> %-12s - \"%(escape)-0.70s%s\"\n", Getattr(obj, k), k, o, trunc); Delete(o); } else { - Printf(os, "<a href=\"data.html?n=0x%x\">?</a> %-12s - 0x%x\n", Getattr(obj, k), k, Getattr(obj, k)); + Printf(os, "<a href=\"data.html?n=%p\">?</a> %-12s - %p\n", Getattr(obj, k), k, Getattr(obj, k)); } } ki = Next(ki); @@ -84,7 +84,7 @@ char *name = GetChar(n, "name"); show_checkbox(view_top, n); - Printf(out, "<b><a href=\"index.html?node=0x%x\">%s</a></b>", n, tag); + Printf(out, "<b><a href=\"index.html?node=%p\">%s</a></b>", n, tag); if (name) { Printf(out, " (%s)", name); } @@ -184,9 +184,9 @@ Printf(f, "<HTML><HEAD><TITLE>SWIG-%s</TITLE></HEAD><BODY BGCOLOR=\"#ffffff\">\n", Swig_package_version()); Printf(f, "<b>SWIG-%s</b><br>\n", Swig_package_version()); Printf(f, "[ <a href=\"exit.html\">Exit</a> ]"); - Printf(f, " [ <a href=\"index.html?node=0x%x\">Top</a> ]", tree_top); + Printf(f, " [ <a href=\"index.html?node=%p\">Top</a> ]", tree_top); if (n != tree_top) { - Printf(f, " [ <a href=\"index.html?node=0x%x\">Up</a> ]", parentNode(n)); + Printf(f, " [ <a href=\"index.html?node=%p\">Up</a> ]", parentNode(n)); } Printf(f, " [ <a href=\"symbol.html\">Symbols</a> ]"); Printf(f, "<br><hr><p>\n"); @@ -255,10 +255,10 @@ trunc = "..."; } Replaceall(o, "<", "<"); - Printf(os, " <a href=\"data.html?n=0x%x\">?</a> %-12s - \"%(escape)-0.70s%s\"\n", Getattr(obj, k), k, o, trunc); + Printf(os, " <a href=\"data.html?n=%p\">?</a> %-12s - \"%(escape)-0.70s%s\"\n", Getattr(obj, k), k, o, trunc); Delete(o); } else { - Printf(os, " <a href=\"data.html?n=0x%x\">?</a> %-12s - 0x%x\n", Getattr(obj, k), k, Getattr(obj, k)); + Printf(os, " <a href=\"data.html?n=%p\">?</a> %-12s - %p\n", Getattr(obj, k), k, Getattr(obj, k)); } ki = Next(ki); } @@ -283,10 +283,10 @@ trunc = "..."; } Replaceall(o, "<", "<"); - Printf(os, " <a href=\"data.html?n=0x%x\">?</a> [%d] - \"%(escape)-0.70s%s\"\n", o, i, s, trunc); + Printf(os, " <a href=\"data.html?n=%p\">?</a> [%d] - \"%(escape)-0.70s%s\"\n", o, i, s, trunc); Delete(s); } else { - Printf(os, " <a href=\"data.html?n=0x%x\">?</a> [%d] - 0x%x\n", o, i, o); + Printf(os, " <a href=\"data.html?n=%p\">?</a> [%d] - %p\n", o, i, o); } } Printf(os, "\n]\n"); @@ -303,7 +303,7 @@ Printf(f, "<HTML><HEAD><TITLE>SWIG-%s</TITLE></HEAD><BODY BGCOLOR=\"#ffffff\">\n", Swig_package_version()); Printf(f, "<b>SWIG-%s</b><br>\n", Swig_package_version()); Printf(f, "[ <a href=\"exit.html\">Exit</a> ]"); - Printf(f, " [ <a href=\"index.html?node=0x%x\">Top</a> ]", tree_top); + Printf(f, " [ <a href=\"index.html?node=%p\">Top</a> ]", tree_top); Printf(f, "<br><hr><p>\n"); if (n) { raw_data(f, n); @@ -319,7 +319,7 @@ Printf(f, "<HTML><HEAD><TITLE>SWIG-%s</TITLE></HEAD><BODY BGCOLOR=\"#ffffff\">\n", Swig_package_version()); Printf(f, "<b>SWIG-%s</b><br>\n", Swig_package_version()); Printf(f, "[ <a href=\"exit.html\">Exit</a> ]"); - Printf(f, " [ <a href=\"index.html?node=0x%x\">Top</a> ]", tree_top); + Printf(f, " [ <a href=\"index.html?node=%p\">Top</a> ]", tree_top); Printf(f, " [ <a href=\"symbol.html\">Symbols</a> ]"); Printf(f, "<br><hr><p>\n"); @@ -343,7 +343,7 @@ fprintf(f, "<p><form action=\"symbol.html\" method=GET>\n"); fprintf(f, "Symbol lookup: <input type=text name=name size=40></input><br>\n"); - fprintf(f, "<input type=hidden name=sym value=\"0x%x\">\n", sym); + fprintf(f, "<input type=hidden name=sym value=\"%p\">\n", sym); fprintf(f, "Submit : <input type=submit></input>\n"); fprintf(f, "</form>"); @@ -365,7 +365,7 @@ Hash *h; h = firstChild(sym); while (h) { - Printf(f, "<a href=\"symbol.html?sym=0x%x\">%s</a>\n", h, Getattr(h, "name")); + Printf(f, "<a href=\"symbol.html?sym=%p\">%s</a>\n", h, Getattr(h, "name")); h = nextSibling(h); } } Modified: trunk/Source/Modules/cffi.cxx =================================================================== --- trunk/Source/Modules/cffi.cxx 2012-07-21 14:04:37 UTC (rev 13339) +++ trunk/Source/Modules/cffi.cxx 2012-07-21 22:52:30 UTC (rev 13340) @@ -671,7 +671,7 @@ void CFFI::emit_class(Node *n) { #ifdef CFFI_WRAP_DEBUG - Printf(stderr, "emit_class: ENTER... '%s'(%x)\n", Getattr(n, "sym:name"), n); + Printf(stderr, "emit_class: ENTER... '%s'(%p)\n", Getattr(n, "sym:name"), n); #endif String *name = Getattr(n, "sym:name"); Modified: trunk/Source/Modules/modula3.cxx =================================================================== --- trunk/Source/Modules/modula3.cxx 2012-07-21 14:04:37 UTC (rev 13339) +++ trunk/Source/Modules/modula3.cxx 2012-07-21 22:52:30 UTC (rev 13340) @@ -2030,7 +2030,7 @@ if (oldname != NIL) { Swig_warning(WARN_MODULA3_BAD_ENUMERATION, input_file, line_number, "The value <%s> is already assigned to <%s>.\n", value, oldname); } -//printf("items %lx, set %s = %s\n", (long) items, Char(newvalue), Char(m3name)); +//printf("items %p, set %s = %s\n", items, Char(newvalue), Char(m3name)); Setattr(items, newvalue, m3name); if (max < numvalue) { max = numvalue; Modified: trunk/Source/Modules/perl5.cxx =================================================================== --- trunk/Source/Modules/perl5.cxx 2012-07-21 14:04:37 UTC (rev 13339) +++ trunk/Source/Modules/perl5.cxx 2012-07-21 22:52:30 UTC (rev 13340) @@ -132,7 +132,7 @@ Node *is_shadow(SwigType *t) { Node *n; n = classLookup(t); - /* Printf(stdout,"'%s' --> '%x'\n", t, n); */ + /* Printf(stdout,"'%s' --> '%p'\n", t, n); */ if (n) { if (!Getattr(n, "perl5:proxy")) { setclassname(n); Modified: trunk/Source/Modules/python.cxx =================================================================== --- trunk/Source/Modules/python.cxx 2012-07-21 14:04:37 UTC (rev 13339) +++ trunk/Source/Modules/python.cxx 2012-07-21 22:52:30 UTC (rev 13340) @@ -3809,7 +3809,7 @@ if (new_repr) { Printv(f_shadow_file, tab4, "__repr__ = _swig_repr\n", NIL); } else { - Printv(f_shadow_file, tab4, "def __repr__(self):\n", tab8, "return \"<C ", rname, " instance at 0x%x>\" % (self.this,)\n", NIL); + Printv(f_shadow_file, tab4, "def __repr__(self):\n", tab8, "return \"<C ", rname, " instance at %p>\" % (self.this,)\n", NIL); } Delete(rname); } Modified: trunk/Source/Modules/s-exp.cxx =================================================================== --- trunk/Source/Modules/s-exp.cxx 2012-07-21 14:04:37 UTC (rev 13339) +++ trunk/Source/Modules/s-exp.cxx 2012-07-21 22:52:30 UTC (rev 13340) @@ -310,7 +310,7 @@ close_paren(); } else { // What is it? - Printf(out, "#<DOH %s %x>", ObjType(obj)->objname, obj); + Printf(out, "#<DOH %s %p>", ObjType(obj)->objname, obj); } } } Modified: trunk/Source/Modules/xml.cxx =================================================================== --- trunk/Source/Modules/xml.cxx 2012-07-21 14:04:37 UTC (rev 13339) +++ trunk/Source/Modules/xml.cxx 2012-07-21 22:52:30 UTC (rev 13340) @@ -118,7 +118,7 @@ String *k; indent_level += 4; print_indent(0); - Printf(out, "<attributelist id=\"%ld\" addr=\"%x\" >\n", ++id, obj); + Printf(out, "<attributelist id=\"%ld\" addr=\"%p\" >\n", ++id, obj); indent_level += 4; Iterator ki; ki = First(obj); @@ -160,14 +160,14 @@ Replaceall(o, "\"", """); Replaceall(o, "\\", "\\\\"); Replaceall(o, "\n", " "); - Printf(out, "<attribute name=\"%s\" value=\"%s\" id=\"%ld\" addr=\"%x\" />\n", ck, o, ++id, o); + Printf(out, "<attribute name=\"%s\" value=\"%s\" id=\"%ld\" addr=\"%p\" />\n", ck, o, ++id, o); Delete(o); Delete(ck); } else { o = Getattr(obj, k); String *ck = NewString(k); Replaceall(ck, ":", "_"); - Printf(out, "<attribute name=\"%s\" value=\"%x\" id=\"%ld\" addr=\"%x\" />\n", ck, o, ++id, o); + Printf(out, "<attribute name=\"%s\" value=\"%p\" id=\"%ld\" addr=\"%p\" />\n", ck, o, ++id, o); Delete(ck); } } @@ -183,7 +183,7 @@ Node *cobj; print_indent(0); - Printf(out, "<%s id=\"%ld\" addr=\"%x\" >\n", nodeType(obj), ++id, obj); + Printf(out, "<%s id=\"%ld\" addr=\"%p\" >\n", nodeType(obj), ++id, obj); Xml_print_attributes(obj); cobj = firstChild(obj); if (cobj) { @@ -203,7 +203,7 @@ void Xml_print_parmlist(ParmList *p, const char* markup = "parmlist") { print_indent(0); - Printf(out, "<%s id=\"%ld\" addr=\"%x\" >\n", markup, ++id, p); + Printf(out, "<%s id=\"%ld\" addr=\"%p\" >\n", markup, ++id, p); indent_level += 4; while (p) { print_indent(0); @@ -221,13 +221,13 @@ void Xml_print_baselist(List *p) { print_indent(0); - Printf(out, "<baselist id=\"%ld\" addr=\"%x\" >\n", ++id, p); + Printf(out, "<baselist id=\"%ld\" addr=\"%p\" >\n", ++id, p); indent_level += 4; Iterator s; for (s = First(p); s.item; s = Next(s)) { print_indent(0); String *item_name = Xml_escape_string(s.item); - Printf(out, "<base name=\"%s\" id=\"%ld\" addr=\"%x\" />\n", item_name, ++id, s.item); + Printf(out, "<base name=\"%s\" id=\"%ld\" addr=\"%p\" />\n", item_name, ++id, s.item); Delete(item_name); } indent_level -= 4; @@ -251,7 +251,7 @@ void Xml_print_module(Node *p) { print_indent(0); - Printf(out, "<attribute name=\"module\" value=\"%s\" id=\"%ld\" addr=\"%x\" />\n", Getattr(p, "name"), ++id, p); + Printf(out, "<attribute name=\"module\" value=\"%s\" id=\"%ld\" addr=\"%p\" />\n", Getattr(p, "name"), ++id, p); } void Xml_print_kwargs(Hash *p) { @@ -272,13 +272,13 @@ void Xml_print_hash(Hash *p, const char *markup) { print_indent(0); - Printf(out, "<%s id=\"%ld\" addr=\"%x\" >\n", markup, ++id, p); + Printf(out, "<%s id=\"%ld\" addr=\"%p\" >\n", markup, ++id, p); Xml_print_attributes(p); indent_level += 4; Iterator n = First(p); while (n.key) { print_indent(0); - Printf(out, "<%ssitem id=\"%ld\" addr=\"%x\" >\n", markup, ++id, n.item); + Printf(out, "<%ssitem id=\"%ld\" addr=\"%p\" >\n", markup, ++id, n.item); Xml_print_attributes(n.item); print_indent(0); Printf(out, "</%ssitem >\n", markup); Modified: trunk/Source/Swig/symbol.c =================================================================== --- trunk/Source/Swig/symbol.c 2012-07-21 14:04:37 UTC (rev 13339) +++ trunk/Source/Swig/symbol.c 2012-07-21 22:52:30 UTC (rev 13340) @@ -549,7 +549,7 @@ Delete(cname); } #ifdef SWIG_DEBUG - Printf(stderr, "symbol_cadd %s %x\n", name, n); + Printf(stderr, "symbol_cadd %s %p\n", name, n); #endif cn = Getattr(ccurrent, name); @@ -934,7 +934,7 @@ n = Getattr(sym, name); #ifdef SWIG_DEBUG - Printf(stderr, "symbol_look %s %x %x %s\n", name, n, symtab, Getattr(symtab, "name")); + Printf(stderr, "symbol_look %s %p %p %s\n", name, n, symtab, Getattr(symtab, "name")); #endif if (n) { @@ -1437,7 +1437,7 @@ if (!symtab) return NewStringEmpty(); #ifdef SWIG_DEBUG - Printf(stderr, "symbol_qscope %s %x %s\n", Getattr(n, "name"), symtab, Getattr(symtab, "name")); + Printf(stderr, "symbol_qscope %s %p %s\n", Getattr(n, "name"), symtab, Getattr(symtab, "name")); #endif return Swig_symbol_qualifiedscopename(symtab); } @@ -1557,7 +1557,7 @@ Clear(e); Append(e, name); #ifdef SWIG_DEBUG - Printf(stderr, "symbol_qual_ei %d %s %s %x\n", i, name, e, st); + Printf(stderr, "symbol_qual_ei %d %s %s %p\n", i, name, e, st); #endif if (!Swig_scopename_check(name)) { String *qname = Swig_symbol_qualified(n); @@ -1566,7 +1566,7 @@ Insert(e, 0, qname); } #ifdef SWIG_DEBUG - Printf(stderr, "symbol_qual_sc %d %s %s %x\n", i, qname, e, st); + Printf(stderr, "symbol_qual_sc %d %s %s %p\n", i, qname, e, st); #endif Delete(qname); } @@ -1604,7 +1604,7 @@ } Delete(elements); #ifdef SWIG_DEBUG - Printf(stderr, "symbol_qualify %s %s %x %s\n", t, result, st, st ? Getattr(st, "name") : 0); + Printf(stderr, "symbol_qualify %s %s %p %s\n", t, result, st, st ? Getattr(st, "name") : 0); #endif return result; Modified: trunk/Source/Swig/tree.c =================================================================== --- trunk/Source/Swig/tree.c 2012-07-21 14:04:37 UTC (rev 13339) +++ trunk/Source/Swig/tree.c 2012-07-21 22:52:30 UTC (rev 13340) @@ -92,7 +92,7 @@ Printf(stdout, "%-12s - \"%(escape)-0.80s%s\"\n", k, o, trunc); Delete(o); } else { - Printf(stdout, "%-12s - 0x%x\n", k, Getattr(obj, k)); + Printf(stdout, "%-12s - %p\n", k, Getattr(obj, k)); } } ki = Next(ki); Modified: trunk/Source/Swig/typesys.c =================================================================== --- trunk/Source/Swig/typesys.c 2012-07-21 14:04:37 UTC (rev 13339) +++ trunk/Source/Swig/typesys.c 2012-07-21 22:52:30 UTC (rev 13340) @@ -297,7 +297,7 @@ void SwigType_scope_alias(String *aliasname, Typetab *ttab) { String *q; - /* Printf(stdout,"alias: '%s' '%x'\n", aliasname, ttab); */ + /* Printf(stdout,"alias: '%s' '%p'\n", aliasname, ttab); */ q = SwigType_scope_name(current_scope); if (Len(q)) { Append(q, "::"); @@ -398,13 +398,13 @@ Printf(stdout, "-------------------------------------------------------------\n"); ttab = Getattr(i.item, "typetab"); - Printf(stdout, "Type scope '%s' (%x)\n", i.key, i.item); + Printf(stdout, "Type scope '%s' (%p)\n", i.key, i.item); { List *inherit = Getattr(i.item, "inherit"); if (inherit) { Iterator j; for (j = First(inherit); j.item; j = Next(j)) { - Printf(stdout, " Inherits from '%s' (%x)\n", Getattr(j.item, "qname"), j.item); + Printf(stdout, " Inherits from '%s' (%p)\n", Getattr(j.item, "qname"), j.item); } } } @@ -1114,14 +1114,14 @@ /* See if the using name is a scope */ /* tt = SwigType_find_scope(current_scope,name); - Printf(stdout,"tt = %x, name = '%s'\n", tt, name); */ + Printf(stdout,"tt = %p, name = '%s'\n", tt, name); */ /* We set up a typedef B --> A::B */ Setattr(current_typetab, base, name); /* Find the scope name where the symbol is defined */ td = SwigType_typedef_resolve(name); - /* Printf(stdout,"td = '%s' %x\n", td, resolved_scope); */ + /* Printf(stdout,"td = '%s' %p\n", td, resolved_scope); */ if (resolved_scope) { defined_name = Getattr(resolved_scope, "qname"); if (defined_name) { @@ -1803,13 +1803,13 @@ Append(rlist, ck.key); } /* Printf(stdout,"rk.key = '%s'\n", rk.key); - Printf(stdout,"rh = %x '%s'\n", rh,rh); */ + Printf(stdout,"rh = %p '%s'\n", rh,rh); */ bk = First(sub); while (bk.key) { prefix = SwigType_prefix(rk.key); Append(prefix, bk.key); - /* Printf(stdout,"set %x = '%s' : '%s'\n", rh, SwigType_manglestr(prefix),prefix); */ + /* Printf(stdout,"set %p = '%s' : '%s'\n", rh, SwigType_manglestr(prefix),prefix); */ mprefix = SwigType_manglestr(prefix); Setattr(rh, mprefix, prefix); mkey = SwigType_manglestr(rk.key); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-08-04 20:23:14
|
Revision: 13502 http://swig.svn.sourceforge.net/swig/?rev=13502&view=rev Author: wsfulton Date: 2012-08-04 20:23:07 +0000 (Sat, 04 Aug 2012) Log Message: ----------- Fix using declarations combined with using directives with forward class references. Modified Paths: -------------- trunk/CHANGES.current trunk/Examples/test-suite/common.mk trunk/Examples/test-suite/java/using_directive_and_declaration_runme.java trunk/Examples/test-suite/using_directive_and_declaration.i trunk/Source/CParse/parser.y trunk/Source/Swig/swig.h trunk/Source/Swig/symbol.c Added Paths: ----------- trunk/Examples/test-suite/java/namespace_forward_declaration_runme.java trunk/Examples/test-suite/java/using_directive_and_declaration_forward_runme.java trunk/Examples/test-suite/namespace_forward_declaration.i trunk/Examples/test-suite/using_directive_and_declaration_forward.i Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2012-08-04 19:14:56 UTC (rev 13501) +++ trunk/CHANGES.current 2012-08-04 20:23:07 UTC (rev 13502) @@ -4,6 +4,7 @@ Version 2.0.8 (in progress) =========================== + 2012-06-27: wsfulton Fix display of pointers in various places on 64 bit systems - only 32 bits were being shown. @@ -15,6 +16,45 @@ 2012-07-20: kwwette [Octave] segfault-on-exit prevention hack now preserves exit status, and uses C99 _Exit(). +2012-06-30: wsfulton + Fix namespace problems for symbols declared with a forward class declarations, such as: + + namespace Space1 { + namespace Space2 { + struct XXX; + struct YYY; + } + + struct Space2::YYY {}; + struct Space1::Space2::XXX {}; + + void testXXX2(Space2::XXX xx) {} + void testYYY2(Space2::YYY yy) {} + } + + where xx and yy were not recognised as the proxy classes XXX and YYY. + +2012-06-30: wsfulton + Fix using declarations combined with using directives with forward class declarations so that + types are correctly found in scope. + + namespace Outer2 { + namespace Space2 { + class Thing2; + } + } + using namespace Outer2; + using Space2::Thing2; + class Thing2 {}; + // None of the methods below correctly used the Thing2 proxy class + void useit2(Thing2 t) {} + void useit2a(Outer2::Space2::Thing2 t) {} + void useit2b(::Outer2::Space2::Thing2 t) {} + void useit2c(Space2::Thing2 t) {} + namespace Outer2 { + void useit2d(Space2::Thing2 t) {} + } + 2012-06-25: wsfulton Fix using declarations combined with using directives so that types are correctly found in scope. Example: @@ -28,6 +68,8 @@ using Space2::Thing2; // using declaration void useit2(Thing2 t) {} + Similarly for templated classes. + 2012-05-29: wsfulton Fix #3529601 - seg fault when a protected method has the "director" feature but the parent class does not. Also fix similar problems with Modified: trunk/Examples/test-suite/common.mk =================================================================== --- trunk/Examples/test-suite/common.mk 2012-08-04 19:14:56 UTC (rev 13501) +++ trunk/Examples/test-suite/common.mk 2012-08-04 20:23:07 UTC (rev 13502) @@ -257,6 +257,7 @@ namespace_class \ namespace_enum \ namespace_extend \ + namespace_forward_declaration \ namespace_nested \ namespace_spaces \ namespace_template \ @@ -443,6 +444,7 @@ using2 \ using_composition \ using_directive_and_declaration \ + using_directive_and_declaration_forward \ using_extend \ using_inherit \ using_namespace \ Added: trunk/Examples/test-suite/java/namespace_forward_declaration_runme.java =================================================================== --- trunk/Examples/test-suite/java/namespace_forward_declaration_runme.java (rev 0) +++ trunk/Examples/test-suite/java/namespace_forward_declaration_runme.java 2012-08-04 20:23:07 UTC (rev 13502) @@ -0,0 +1,26 @@ + +import namespace_forward_declaration.*; + +public class namespace_forward_declaration_runme { + + static { + try { + System.loadLibrary("namespace_forward_declaration"); + } catch (UnsatisfiedLinkError e) { + System.err.println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e); + System.exit(1); + } + } + + public static void main(String argv[]) { + XXX xxx = new XXX(); + namespace_forward_declaration.testXXX1(xxx); + namespace_forward_declaration.testXXX2(xxx); + namespace_forward_declaration.testXXX3(xxx); + YYY yyy = new YYY(); + namespace_forward_declaration.testYYY1(yyy); + namespace_forward_declaration.testYYY2(yyy); + namespace_forward_declaration.testYYY3(yyy); + } +} + Added: trunk/Examples/test-suite/java/using_directive_and_declaration_forward_runme.java =================================================================== --- trunk/Examples/test-suite/java/using_directive_and_declaration_forward_runme.java (rev 0) +++ trunk/Examples/test-suite/java/using_directive_and_declaration_forward_runme.java 2012-08-04 20:23:07 UTC (rev 13502) @@ -0,0 +1,53 @@ + +import using_directive_and_declaration_forward.*; + +public class using_directive_and_declaration_forward_runme { + + static { + try { + System.loadLibrary("using_directive_and_declaration_forward"); + } catch (UnsatisfiedLinkError e) { + System.err.println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e); + System.exit(1); + } + } + + public static void main(String argv[]) + { + using_directive_and_declaration_forward.useit1(new Thing1()); + using_directive_and_declaration_forward.useit1a(new Thing1()); + using_directive_and_declaration_forward.useit1b(new Thing1()); + using_directive_and_declaration_forward.useit1c(new Thing1()); + + using_directive_and_declaration_forward.useit2(new Thing2()); + using_directive_and_declaration_forward.useit2a(new Thing2()); + using_directive_and_declaration_forward.useit2b(new Thing2()); + using_directive_and_declaration_forward.useit2c(new Thing2()); + using_directive_and_declaration_forward.useit2d(new Thing2()); + + using_directive_and_declaration_forward.useit3(new Thing3()); + using_directive_and_declaration_forward.useit3a(new Thing3()); + using_directive_and_declaration_forward.useit3b(new Thing3()); + using_directive_and_declaration_forward.useit3c(new Thing3()); + using_directive_and_declaration_forward.useit3d(new Thing3()); + + using_directive_and_declaration_forward.useit4(new Thing4()); + using_directive_and_declaration_forward.useit4a(new Thing4()); + using_directive_and_declaration_forward.useit4b(new Thing4()); + using_directive_and_declaration_forward.useit4c(new Thing4()); + using_directive_and_declaration_forward.useit4d(new Thing4()); + + using_directive_and_declaration_forward.useit5(new Thing5()); + using_directive_and_declaration_forward.useit5a(new Thing5()); + using_directive_and_declaration_forward.useit5b(new Thing5()); + using_directive_and_declaration_forward.useit5c(new Thing5()); + using_directive_and_declaration_forward.useit5d(new Thing5()); + + + using_directive_and_declaration_forward.useit7(new Thing7()); + using_directive_and_declaration_forward.useit7a(new Thing7()); + using_directive_and_declaration_forward.useit7b(new Thing7()); + using_directive_and_declaration_forward.useit7c(new Thing7()); + using_directive_and_declaration_forward.useit7d(new Thing7()); + } +} Modified: trunk/Examples/test-suite/java/using_directive_and_declaration_runme.java =================================================================== --- trunk/Examples/test-suite/java/using_directive_and_declaration_runme.java 2012-08-04 19:14:56 UTC (rev 13501) +++ trunk/Examples/test-suite/java/using_directive_and_declaration_runme.java 2012-08-04 20:23:07 UTC (rev 13502) @@ -24,5 +24,6 @@ Thing6 t6b = new Thing6(); t6b.b(); using_directive_and_declaration.useit6(t6a, t6b); + using_directive_and_declaration.useit7(new Thing7()); } } Added: trunk/Examples/test-suite/namespace_forward_declaration.i =================================================================== --- trunk/Examples/test-suite/namespace_forward_declaration.i (rev 0) +++ trunk/Examples/test-suite/namespace_forward_declaration.i 2012-08-04 20:23:07 UTC (rev 13502) @@ -0,0 +1,35 @@ +%module namespace_forward_declaration + +%inline %{ + namespace Space1 { + namespace Space2 { + struct XXX; + struct YYY; + } + + struct Space2::YYY { + int yyy(int h) { + return h; + } + }; + struct Space1::Space2::XXX { + int xxx(int h) { + return h; + } + }; + + void testXXX1(Space1::Space2::XXX xx) { + } + void testXXX2(Space2::XXX xx) { + } + void testXXX3(::Space1::Space2::XXX xx) { + } + void testYYY1(Space1::Space2::YYY yy) { + } + void testYYY2(Space2::YYY yy) { + } + void testYYY3(::Space1::Space2::YYY yy) { + } + } +%} + Modified: trunk/Examples/test-suite/using_directive_and_declaration.i =================================================================== --- trunk/Examples/test-suite/using_directive_and_declaration.i 2012-08-04 19:14:56 UTC (rev 13501) +++ trunk/Examples/test-suite/using_directive_and_declaration.i 2012-08-04 20:23:07 UTC (rev 13502) @@ -81,5 +81,26 @@ } using namespace Outer6::Space6b; void useit6(Outer6::Space6a::Thing6 ta, Thing6 tb) {} + +namespace Outer7 { + namespace Space7 { + namespace Middle7 { + class Thing7; + } + } +} +using namespace Outer7::Space7; +class Middle7::Thing7 {}; +using Middle7::Thing7; +void useit7(Thing7 t) {} +void useit7a(Outer7::Space7::Middle7::Thing7 t) {} +void useit7b(::Outer7::Space7::Middle7::Thing7 t) {} +void useit7c(Middle7::Thing7 t) {} +namespace Outer7 { + namespace Space7 { + void useit7d(Middle7::Thing7 t) {} + } +} + %} Added: trunk/Examples/test-suite/using_directive_and_declaration_forward.i =================================================================== --- trunk/Examples/test-suite/using_directive_and_declaration_forward.i (rev 0) +++ trunk/Examples/test-suite/using_directive_and_declaration_forward.i 2012-08-04 20:23:07 UTC (rev 13502) @@ -0,0 +1,124 @@ +%module using_directive_and_declaration_forward +// Test using directives combined with using declarations and forward declarations + +%inline %{ +namespace Outer1 { + namespace Space1 { + class Thing1; + } +} +using namespace Outer1::Space1; +using Outer1::Space1::Thing1; +class Thing1 {}; +void useit1(Thing1 t) {} +void useit1a(Outer1::Space1::Thing1 t) {} +void useit1b(::Outer1::Space1::Thing1 t) {} +namespace Outer1 { + void useit1c(Space1::Thing1 t) {} +} + + +namespace Outer2 { + namespace Space2 { + class Thing2; + } +} +using namespace Outer2; +using Space2::Thing2; +class Thing2 {}; +void useit2(Thing2 t) {} +void useit2a(Outer2::Space2::Thing2 t) {} +void useit2b(::Outer2::Space2::Thing2 t) {} +void useit2c(Space2::Thing2 t) {} +namespace Outer2 { + void useit2d(Space2::Thing2 t) {} +} + + +namespace Outer3 { + namespace Space3 { + namespace Middle3 { + class Thing3; + } + } +} +using namespace Outer3; +using namespace Space3; +using Middle3::Thing3; +class Thing3 {}; +void useit3(Thing3 t) {} +void useit3a(Outer3::Space3::Middle3::Thing3 t) {} +void useit3b(::Outer3::Space3::Middle3::Thing3 t) {} +void useit3c(Middle3::Thing3 t) {} +namespace Outer3 { + namespace Space3 { + void useit3d(Middle3::Thing3 t) {} + } +} + + +namespace Outer4 { + namespace Space4 { + namespace Middle4 { + class Thing4; + } + } +} +using namespace Outer4::Space4; +using Middle4::Thing4; +class Thing4 {}; +void useit4(Thing4 t) {} +void useit4a(Outer4::Space4::Middle4::Thing4 t) {} +void useit4b(::Outer4::Space4::Middle4::Thing4 t) {} +void useit4c(Middle4::Thing4 t) {} +namespace Outer4 { + namespace Space4 { + void useit4d(Middle4::Thing4 t) {} + } +} + + +namespace Outer5 { + namespace Space5 { + namespace Middle5 { + namespace More5 { + class Thing5; + } + } + } +} +using namespace ::Outer5::Space5; +using namespace Middle5; +using More5::Thing5; +class Thing5 {}; +void useit5(Thing5 t) {} +void useit5a(Outer5::Space5::Middle5::More5::Thing5 t) {} +void useit5b(::Outer5::Space5::Middle5::More5::Thing5 t) {} +void useit5c(Middle5::More5::Thing5 t) {} +namespace Outer5 { + namespace Space5 { + void useit5d(Middle5::More5::Thing5 t) {} + } +} + +namespace Outer7 { + namespace Space7 { + namespace Middle7 { + class Thing7; + } + } +} +using namespace Outer7::Space7; +class Middle7::Thing7 {}; +using Middle7::Thing7; +void useit7(Thing7 t) {} +void useit7a(Outer7::Space7::Middle7::Thing7 t) {} +void useit7b(::Outer7::Space7::Middle7::Thing7 t) {} +void useit7c(Middle7::Thing7 t) {} +namespace Outer7 { + namespace Space7 { + void useit7d(Middle7::Thing7 t) {} + } +} + +%} Modified: trunk/Source/CParse/parser.y =================================================================== --- trunk/Source/CParse/parser.y 2012-08-04 19:14:56 UTC (rev 13501) +++ trunk/Source/CParse/parser.y 2012-08-04 20:23:07 UTC (rev 13502) @@ -205,7 +205,7 @@ /* Forward renaming operator */ -static String *resolve_node_scope(String *cname); +static String *resolve_create_node_scope(String *cname); Hash *Swig_cparse_features(void) { @@ -867,26 +867,86 @@ static Node *nscope_inner = 0; /* Remove the scope prefix from cname and return the base name without the prefix. - * The scopes specified in the prefix are found, or created in the current namespace. - * So ultimately the scope is changed to that required for the base name. + * The scopes required for the symbol name are resolved and/or created, if required. * For example AA::BB::CC as input returns CC and creates the namespace AA then inner - * namespace BB in the current scope. If no scope separator (::) in the input, then nothing happens! */ -static String *resolve_node_scope(String *cname) { + * namespace BB in the current scope. If cname is found to already exist as a weak symbol + * (forward reference) then the scope might be changed to match, such as when a symbol match + * is made via a using reference. */ +static String *resolve_create_node_scope(String *cname) { Symtab *gscope = 0; + Node *cname_node = 0; + int skip_lookup = 0; nscope = 0; nscope_inner = 0; + if (Swig_scopename_check(cname)) { + String *prefix = Swig_scopename_prefix(cname); + if (prefix && (Strncmp(prefix,"::",2) == 0)) + skip_lookup = 1; + } + cname_node = skip_lookup ? 0 : Swig_symbol_clookup_no_inherit(cname, 0); + + if (cname_node) { + /* The symbol has been defined already or is in another scope. + If it is a weak symbol, it needs replacing and if it was brought into the current scope + via a using declaration, the scope needs adjusting appropriately for the new symbol. */ + Symtab *symtab = Getattr(cname_node, "sym:symtab"); + Node *sym_weak = Getattr(cname_node, "sym:weak"); + if (symtab && sym_weak) { + /* Check if the scope is the current scope */ + String *current_scopename = Swig_symbol_qualifiedscopename(0); + String *found_scopename = Swig_symbol_qualifiedscopename(symtab); + int len; + if (!current_scopename) + current_scopename = NewString(""); + if (!found_scopename) + found_scopename = NewString(""); + len = Len(current_scopename); + if ((len > 0) && (Strncmp(current_scopename, found_scopename, len) == 0)) { + if (Len(found_scopename) > len + 2) { + /* A matching weak symbol was found in non-global scope, some scope adjustment may be required */ + String *new_cname = NewString(Char(found_scopename) + len + 2); /* skip over "::" prefix */ + String *base = Swig_scopename_last(cname); + Printf(new_cname, "::%s", base); + cname = new_cname; + Delete(base); + } else { + /* A matching weak symbol was found in the same non-global local scope, no scope adjustment required */ + assert(len == Len(found_scopename)); + } + } else { + String *base = Swig_scopename_last(cname); + if (Len(found_scopename) > 0) { + /* A matching weak symbol was found in a different scope to the local scope - probably via a using declaration */ + cname = NewStringf("%s::%s", found_scopename, base); + } else { + /* Either: + 1) A matching weak symbol was found in a different scope to the local scope - this is actually a + symbol with the same name in a different scope which we don't want, so no adjustment required. + 2) A matching weak symbol was found in the global scope - no adjustment required. + */ + cname = Copy(base); + } + Delete(base); + } + Delete(current_scopename); + Delete(found_scopename); + } + } + + if (Swig_scopename_check(cname)) { Node *ns; String *prefix = Swig_scopename_prefix(cname); String *base = Swig_scopename_last(cname); if (prefix && (Strncmp(prefix,"::",2) == 0)) { +/* I don't think we can use :: global scope to declare classes and hence neither %template. - consider reporting error instead - wsfulton. */ /* Use the global scope */ String *nprefix = NewString(Char(prefix)+2); Delete(prefix); prefix= nprefix; gscope = set_scope_to_global(); - } - if (!prefix || (Len(prefix) == 0)) { + } + if (Len(prefix) == 0) { /* Use the global scope, but we need to add a 'global' namespace. */ if (!gscope) gscope = set_scope_to_global(); /* note that this namespace is not the "unnamed" one, @@ -904,8 +964,7 @@ } else { Symtab *nstab = Getattr(ns,"symtab"); if (!nstab) { - Swig_error(cparse_file,cparse_line, - "'%s' is not defined as a valid scope.\n", prefix); + Swig_error(cparse_file,cparse_line, "'%s' is not defined as a valid scope.\n", prefix); ns = 0; } else { /* Check if the node scope is the current scope */ @@ -986,6 +1045,7 @@ } Delete(prefix); } + return cname; } @@ -2784,7 +2844,7 @@ /* If the class name is qualified, we need to create or lookup namespace entries */ if (!inclass) { - $5 = resolve_node_scope($5); + $5 = resolve_create_node_scope($5); } /* @@ -3406,7 +3466,7 @@ prev_symtab = Swig_symbol_current(); /* If the class name is qualified. We need to create or lookup namespace/scope entries */ - scope = resolve_node_scope($3); + scope = resolve_create_node_scope($3); Setfile(scope,cparse_file); Setline(scope,cparse_line); $3 = scope; Modified: trunk/Source/Swig/swig.h =================================================================== --- trunk/Source/Swig/swig.h 2012-08-04 19:14:56 UTC (rev 13501) +++ trunk/Source/Swig/swig.h 2012-08-04 20:23:07 UTC (rev 13502) @@ -227,6 +227,7 @@ extern void Swig_symbol_cadd(const_String_or_char_ptr symname, Node *node); extern Node *Swig_symbol_clookup(const_String_or_char_ptr symname, Symtab *tab); extern Node *Swig_symbol_clookup_check(const_String_or_char_ptr symname, Symtab *tab, int (*check) (Node *)); + extern Node *Swig_symbol_clookup_no_inherit(const_String_or_char_ptr name, Symtab *n); extern Symtab *Swig_symbol_cscope(const_String_or_char_ptr symname, Symtab *tab); extern Node *Swig_symbol_clookup_local(const_String_or_char_ptr symname, Symtab *tab); extern Node *Swig_symbol_clookup_local_check(const_String_or_char_ptr symname, Symtab *tab, int (*check) (Node *)); Modified: trunk/Source/Swig/symbol.c =================================================================== --- trunk/Source/Swig/symbol.c 2012-08-04 19:14:56 UTC (rev 13501) +++ trunk/Source/Swig/symbol.c 2012-08-04 20:23:07 UTC (rev 13502) @@ -176,6 +176,8 @@ static Hash *symtabs = 0; /* Hash of all symbol tables by fully-qualified name */ static Hash *global_scope = 0; /* Global scope */ +static int use_inherit = 1; + /* common attribute keys, to avoid calling find_key all the times */ @@ -482,9 +484,9 @@ /* ----------------------------------------------------------------------------- * Swig_symbol_inherit() * - * Inherit symbols from another scope. - * Primarily for using directives, such as 'using namespace X;'. - * Not for using declarations, such as 'using A;'. + * Inherit symbols from another scope. Primarily for C++ inheritance and + * for using directives, such as 'using namespace X;' + * but not for using declarations, such as 'using A;'. * ----------------------------------------------------------------------------- */ void Swig_symbol_inherit(Symtab *s) { @@ -970,7 +972,7 @@ } inherit = Getattr(symtab, "inherit"); - if (inherit) { + if (inherit && use_inherit) { int i, len; len = Len(inherit); for (i = 0; i < len; i++) { @@ -1060,7 +1062,7 @@ /* Check inherited scopes */ if (!n) { List *inherit = Getattr(symtab, "inherit"); - if (inherit) { + if (inherit && use_inherit) { int i, len; len = Len(inherit); for (i = 0; i < len; i++) { @@ -1327,6 +1329,11 @@ return s; } +Node *Swig_symbol_clookup_no_inherit(const_String_or_char_ptr name, Symtab *n) { + use_inherit = 0; + Swig_symbol_clookup(name, n); + use_inherit = 1; +} /* ----------------------------------------------------------------------------- * Swig_symbol_cscope() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |