From: <wsf...@us...> - 2010-06-25 22:54:51
|
Revision: 12152 http://swig.svn.sourceforge.net/swig/?rev=12152&view=rev Author: wsfulton Date: 2010-06-25 22:54:45 +0000 (Fri, 25 Jun 2010) Log Message: ----------- Raw string literal changes in paper N3077 changes delimiters to use round brackets instead of square brackets Modified Paths: -------------- branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html branches/gsoc2009-matevz/Examples/test-suite/cpp0x_raw_string_literals.i branches/gsoc2009-matevz/Source/Swig/scanner.c Added Paths: ----------- branches/gsoc2009-matevz/Examples/test-suite/python/cpp0x_raw_string_literals_runme.py Modified: branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html =================================================================== --- branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html 2010-06-25 21:48:07 UTC (rev 12151) +++ branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html 2010-06-25 22:54:45 UTC (rev 12152) @@ -460,23 +460,22 @@ <H3><a name="Cpp0x_New_string_literals"></a>7.2.18 New string literals</H3> -<p>SWIG fully supports custom delimiters and unicode string -constants.</p> +<p>SWIG fully supports unicode string constants and raw string literals.</p> <div class="code"><PRE> // New string literals -char *a = "ABC"; -wstring wide = L"ABC"; -char *b = u8"ABC"; -char16_t *c = u"ABC"; -char32_t *d = U"ABC"; +wstring aa = L"Wide string"; +const char *bb = u8"UTF-8 string"; +const char16_t *cc = u"UTF-16 string"; +const char32_t *dd = U"UTF-32 string"; -// Custom String delimiter -char *e = R"XXX[to be or "not" to be [these are parenthesis], this is the question!]XXX"; -wstring wide2 = LR"XXX[to be or "not" to be [these are parenthesis], this is the question!]XXX"; -char *f = u8R"XXX[to be or "not" to be [these are parenthesis], this is the question!]XXX"; -char16_t *g = uR"XXX[to be or "not" to be [these are parenthesis], this is the question!]XXX"; -char32_t *h = UR"XXX[to be or "not" to be [these are parenthesis], this is the question!]XXX"; +// Raw string literals +const char *xx = ")I'm an \"ascii\" \\ string."; +const char *ee = R"XXX()I'm an "ascii" \ string.)XXX"; // same as xx +wstring ff = LR"XXX(I'm a "raw wide" \ string.)XXX"; +const char *gg = u8R"XXX(I'm a "raw UTF-8" \ string.)XXX"; +const char16_t *hh = uR"XXX(I'm a "raw UTF-16" \ string.)XXX"; +const char32_t *ii = UR"XXX(I'm a "raw UTF-32" \ string.)XXX"; </PRE></div> <p>Note: SWIG currently incorrectly parses the odd number of double quotes Modified: branches/gsoc2009-matevz/Examples/test-suite/cpp0x_raw_string_literals.i =================================================================== --- branches/gsoc2009-matevz/Examples/test-suite/cpp0x_raw_string_literals.i 2010-06-25 21:48:07 UTC (rev 12151) +++ branches/gsoc2009-matevz/Examples/test-suite/cpp0x_raw_string_literals.i 2010-06-25 22:54:45 UTC (rev 12152) @@ -8,15 +8,17 @@ This module also tests whether Swig correctly parses custom string delimiters. */ %module cpp0x_raw_string_literals -%warnfilter(SWIGWARN_TYPEMAP_CHARLEAK_MSG) aa; %warnfilter(SWIGWARN_TYPEMAP_CHARLEAK_MSG) bb; %warnfilter(SWIGWARN_TYPEMAP_CHARLEAK_MSG) ee; -%warnfilter(SWIGWARN_TYPEMAP_CHARLEAK_MSG) ff; +%warnfilter(SWIGWARN_TYPEMAP_CHARLEAK_MSG) gg; +%warnfilter(SWIGWARN_TYPEMAP_CHARLEAK_MSG) xx; %warnfilter(SWIGWARN_TYPEMAP_SWIGTYPELEAK_MSG) cc; %warnfilter(SWIGWARN_TYPEMAP_SWIGTYPELEAK_MSG) dd; -%warnfilter(SWIGWARN_TYPEMAP_SWIGTYPELEAK_MSG) gg; %warnfilter(SWIGWARN_TYPEMAP_SWIGTYPELEAK_MSG) hh; +%warnfilter(SWIGWARN_TYPEMAP_SWIGTYPELEAK_MSG) ii; +%include <std_wstring.i> + %inline %{ #include <iostream> #include <string> @@ -38,27 +40,20 @@ static const int UR = 100; }; -const char *aa = "ABC"; -wstring wide = L"ABC"; -const char *bb = u8"ABC"; -const char16_t *cc = u"ABC"; -const char32_t *dd = U"ABC"; +// New string literals +wstring aa = L"Wide string"; +const char *bb = u8"UTF-8 string"; +const char16_t *cc = u"UTF-16 string"; +const char32_t *dd = U"UTF-32 string"; %} /* Raw string literals */ - -#warning TODO: change SWIG support from old R"[ ... ]" to new R"( ... )" - -const char *ee = R"XXX[to be or "not" to be [square parenthesis] (round parenthesis), that is the question!]XXX"; -wstring wide2 = LR"XXX[to be or "not" to be [square parenthesis] (round parenthesis), that is the question!]XXX"; -const char *ff = u8R"XXX[to be or "not" to be [square parenthesis] (round parenthesis), that is the question!]XXX"; -const char16_t *gg = uR"XXX[to be or "not" to be [square parenthesis] (round parenthesis), that is the question!]XXX"; -const char32_t *hh = UR"XXX[to be or "not" to be [square parenthesis] (round parenthesis), that is the question!]XXX"; -%{ -const char *ee = R"XXX(to be or "not" to be [square parenthesis] (round parenthesis), that is the question!)XXX"; -wstring wide2 = LR"XXX(to be or "not" to be [square parenthesis] (round parenthesis), that is the question!)XXX"; -const char *ff = u8R"XXX(to be or "not" to be [square parenthesis] (round parenthesis), that is the question!)XXX"; -const char16_t *gg = uR"XXX(to be or "not" to be [square parenthesis] (round parenthesis), that is the question!)XXX"; -const char32_t *hh = UR"XXX(to be or "not" to be [square parenthesis] (round parenthesis), that is the question!)XXX"; +%inline %{ +const char *xx = ")I'm an \"ascii\" \\ string."; +const char *ee = R"XXX()I'm an "ascii" \ string.)XXX"; +wstring ff = LR"XXX(I'm a "raw wide" \ string.)XXX"; +const char *gg = u8R"XXX(I'm a "raw UTF-8" \ string.)XXX"; +const char16_t *hh = uR"XXX(I'm a "raw UTF-16" \ string.)XXX"; +const char32_t *ii = UR"XXX(I'm a "raw UTF-32" \ string.)XXX"; %} Added: branches/gsoc2009-matevz/Examples/test-suite/python/cpp0x_raw_string_literals_runme.py =================================================================== --- branches/gsoc2009-matevz/Examples/test-suite/python/cpp0x_raw_string_literals_runme.py (rev 0) +++ branches/gsoc2009-matevz/Examples/test-suite/python/cpp0x_raw_string_literals_runme.py 2010-06-25 22:54:45 UTC (rev 12152) @@ -0,0 +1,50 @@ +from cpp0x_raw_string_literals import * + +if cvar.L != 100: + raise RuntimeError + +if cvar.u8 != 100: + raise RuntimeError + +if cvar.u != 100: + raise RuntimeError + +if UStruct.U != 100: + raise RuntimeError + + +if cvar.R != 100: + raise RuntimeError + +if cvar.LR != 100: + raise RuntimeError + +if cvar.u8R != 100: + raise RuntimeError + +if cvar.uR != 100: + raise RuntimeError + +if URStruct.UR != 100: + raise RuntimeError + + +if cvar.aa != "Wide string": + raise RuntimeError + +if cvar.bb != "UTF-8 string": + raise RuntimeError, cvar.wide + +if cvar.xx != ")I'm an \"ascii\" \\ string.": + raise RuntimeError, cvar.xx + +if cvar.ee != ")I'm an \"ascii\" \\ string.": + raise RuntimeError, cvar.ee + +if cvar.ff != "I'm a \"raw wide\" \\ string.": + raise RuntimeError, cvar.ff + +if cvar.gg != "I'm a \"raw UTF-8\" \\ string.": + raise RuntimeError, cvar.gg + + Modified: branches/gsoc2009-matevz/Source/Swig/scanner.c =================================================================== --- branches/gsoc2009-matevz/Source/Swig/scanner.c 2010-06-25 21:48:07 UTC (rev 12151) +++ branches/gsoc2009-matevz/Source/Swig/scanner.c 2010-06-25 22:54:45 UTC (rev 12152) @@ -673,7 +673,7 @@ Swig_error(cparse_file, cparse_start_line, "Unterminated string\n"); return SWIG_TOKEN_ERROR; } - else if (c == '[') { + else if (c == '(') { state = 20; } else { @@ -698,8 +698,8 @@ Delitem(s->text, DOH_END); get_escape(s); } - } else { /* Custom delimiter string: R"XXXX[value]XXXX" */ - if (c==']') { + } else { /* Custom delimiter string: R"XXXX(value)XXXX" */ + if (c==')') { int i=0; String *end_delimiter = NewStringEmpty(); while ((c = nextchar(s)) != 0 && c!='\"') { @@ -710,7 +710,7 @@ } if (Strcmp( str_delimiter, end_delimiter )==0) { - Delete( end_delimiter ); /* Correct end delimiter ]XXXX" occured */ + Delete( end_delimiter ); /* Correct end delimiter )XXXX" occured */ Delete( str_delimiter ); str_delimiter = 0; return SWIG_TOKEN_STRING; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2010-07-18 00:19:29
|
Revision: 12160 http://swig.svn.sourceforge.net/swig/?rev=12160&view=rev Author: wsfulton Date: 2010-07-18 00:19:22 +0000 (Sun, 18 Jul 2010) Log Message: ----------- Improved C++0x rvalue reference implementation differentiating lvalue and rvalue references. The previous implementation treated rvalue references as lvalue references which leads to a number of different wrapping issues. Modified Paths: -------------- branches/gsoc2009-matevz/Examples/test-suite/common.mk branches/gsoc2009-matevz/Examples/test-suite/cpp0x_rvalue_reference.i branches/gsoc2009-matevz/Examples/test-suite/python/cpp0x_rvalue_reference_runme.py branches/gsoc2009-matevz/Lib/csharp/csharp.swg branches/gsoc2009-matevz/Source/CParse/parser.y branches/gsoc2009-matevz/Source/Modules/php.cxx branches/gsoc2009-matevz/Source/Swig/cwrap.c branches/gsoc2009-matevz/Source/Swig/stype.c branches/gsoc2009-matevz/Source/Swig/swig.h branches/gsoc2009-matevz/Source/Swig/typemap.c branches/gsoc2009-matevz/Source/Swig/typeobj.c branches/gsoc2009-matevz/Source/Swig/typesys.c Added Paths: ----------- branches/gsoc2009-matevz/Examples/test-suite/cpp0x_rvalue_reference2.i Modified: branches/gsoc2009-matevz/Examples/test-suite/common.mk =================================================================== --- branches/gsoc2009-matevz/Examples/test-suite/common.mk 2010-07-18 00:06:40 UTC (rev 12159) +++ branches/gsoc2009-matevz/Examples/test-suite/common.mk 2010-07-18 00:19:22 UTC (rev 12160) @@ -409,6 +409,7 @@ cpp0x_function_objects \ cpp0x_strongly_typed_enumerations \ cpp0x_rvalue_reference \ + cpp0x_rvalue_reference2 \ cpp0x_variadic_templates \ cpp0x_alternate_function_syntax \ cpp0x_userdefined_literals \ Modified: branches/gsoc2009-matevz/Examples/test-suite/cpp0x_rvalue_reference.i =================================================================== --- branches/gsoc2009-matevz/Examples/test-suite/cpp0x_rvalue_reference.i 2010-07-18 00:06:40 UTC (rev 12159) +++ branches/gsoc2009-matevz/Examples/test-suite/cpp0x_rvalue_reference.i 2010-07-18 00:19:22 UTC (rev 12160) @@ -3,12 +3,13 @@ %module cpp0x_rvalue_reference %inline %{ +#include <utility> class A { public: int getAcopy() { return _a; } int *getAptr() { return &_a; } int &getAref() { return _a; } - int &&getAmove() { return _a; } + int &&getAmove() { return std::move(_a); } void setAcopy(int a) { _a = a; } void setAptr(int *a) { _a = *a; } Added: branches/gsoc2009-matevz/Examples/test-suite/cpp0x_rvalue_reference2.i =================================================================== --- branches/gsoc2009-matevz/Examples/test-suite/cpp0x_rvalue_reference2.i (rev 0) +++ branches/gsoc2009-matevz/Examples/test-suite/cpp0x_rvalue_reference2.i 2010-07-18 00:19:22 UTC (rev 12160) @@ -0,0 +1,83 @@ +%module cpp0x_rvalue_reference2 + +// This testcase tests lots of different places that rvalue reference syntax can be used + +%typemap(in) Something && "/*in Something && typemap*/" +%rename(OperatorRValue) Thingy::operator int&&; +%rename(memberFnRenamed) memberFn(short &&i); +%feature("compactdefaultargs") Thingy::compactDefaultArgs(const bool &&b = (const bool &&)PublicGlobalTrue, const UserDef &&u = (const UserDef &&)PublicUserDef); +%feature("exception") Thingy::privateDefaultArgs(const bool &&b = (const bool &&)PrivateTrue); +%ignore Thingy::operator=; + +%inline %{ +#include <utility> +struct UserDef { + int a; +}; +static const bool PublicGlobalTrue = true; +static const UserDef PublicUserDef = UserDef(); +struct Thingy { + typedef int Integer; + int val; + int &lvalref; + int &&rvalref; + Thingy(int v) : val(v), lvalref(val), rvalref(22) {} + void refIn(long &i) {} + void rvalueIn(long &&i) {} + short && rvalueInOut(short &&i) { return std::move(i); } + static short && staticRvalueInOut(short &&i) { return std::move(i); } + // test both primitive and user defined rvalue reference default arguments and compactdefaultargs + void compactDefaultArgs(const bool &&b = (const bool &&)PublicGlobalTrue, const UserDef &&u = (const UserDef &&)PublicUserDef) {} + void privateDefaultArgs(const bool &&b = (const bool &&)PrivateTrue) {} + operator int &&() {} + Thingy& operator=(const Thingy& rhs) { + val = rhs.val; + lvalref = rhs.lvalref; + rvalref = rhs.rvalref; + } +private: + static const bool PrivateTrue = true; + Thingy(); +}; + +short && globalRvalueInOut(short &&i) { return std::move(i); } + +Thingy &&globalrrval = Thingy(55); + +short && func(short &&i) { return std::move(i); } +Thingy getit() { return Thingy(22); } + +void rvalrefFunction1(int &&v = (int &&)5) {} +void rvalrefFunctionBYVAL(short (Thingy::*memFunc)(short)) {} +void rvalrefFunctionLVALUE(short &(Thingy::*memFunc)(short &)) {} +void rvalrefFunction2(short && (Thingy::*memFunc)(short &&)) {} +void rvalrefFunction3(short && (*memFunc)(short &&)) {} + +template <typename T> struct RemoveReference { + typedef T type; +}; + +template <typename T> struct RemoveReference<T&> { + typedef T type; +}; + +template <typename T> struct RemoveReference<T&&> { + typedef T type; +}; + +template <> struct RemoveReference<short &&> { + typedef short type; +}; + +// like std::move +template <typename T> typename RemoveReference<T>::type&& Move(T&& t) { + return static_cast<typename RemoveReference<T>::type&&>(t); +} +%} + +%template(RemoveReferenceDouble) RemoveReference<double &&>; +%template(RemoveReferenceFloat) RemoveReference<float &&>; +%template(RemoveReferenceShort) RemoveReference<short &&>; +%template(MoveFloat) Move<float>; + + Modified: branches/gsoc2009-matevz/Examples/test-suite/python/cpp0x_rvalue_reference_runme.py =================================================================== --- branches/gsoc2009-matevz/Examples/test-suite/python/cpp0x_rvalue_reference_runme.py 2010-07-18 00:06:40 UTC (rev 12159) +++ branches/gsoc2009-matevz/Examples/test-suite/python/cpp0x_rvalue_reference_runme.py 2010-07-18 00:19:22 UTC (rev 12160) @@ -16,7 +16,9 @@ if a.getAcopy() != 5: raise RunTimeError, ("after A::setAref(): int A::getAcopy() value is ", a.getAcopy(), " should be 5") -a.setAmove(ptr) +rvalueref = a.getAmove() + +a.setAmove(rvalueref) if a.getAcopy() != 5: raise RunTimeError, ("after A::setAmove(): int A::getAcopy() value is ", a.getAcopy(), " should be 5") Modified: branches/gsoc2009-matevz/Lib/csharp/csharp.swg =================================================================== --- branches/gsoc2009-matevz/Lib/csharp/csharp.swg 2010-07-18 00:06:40 UTC (rev 12159) +++ branches/gsoc2009-matevz/Lib/csharp/csharp.swg 2010-07-18 00:19:22 UTC (rev 12160) @@ -125,6 +125,10 @@ %typemap(imtype, out="IntPtr") SWIGTYPE & "HandleRef" %typemap(cstype) SWIGTYPE & "$csclassname" +%typemap(ctype) SWIGTYPE && "void *" +%typemap(imtype, out="IntPtr") SWIGTYPE && "HandleRef" +%typemap(cstype) SWIGTYPE && "$csclassname" + /* pointer to a class member */ %typemap(ctype) SWIGTYPE (CLASS::*) "char *" %typemap(imtype) SWIGTYPE (CLASS::*) "string" @@ -397,6 +401,11 @@ SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "$1_type type is null", 0); return $null; } %} +%typemap(in, canthrow=1) SWIGTYPE && %{ $1 = ($1_ltype)$input; + if (!$1) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "$1_type type is null", 0); + return $null; + } %} %typemap(out) SWIGTYPE * %{ $result = (void *)$1; %} %typemap(out, fragment="SWIG_PackData") SWIGTYPE (CLASS::*) %{ char buf[128]; @@ -405,6 +414,7 @@ $result = SWIG_csharp_string_callback(buf); %} %typemap(out) SWIGTYPE & %{ $result = (void *)$1; %} +%typemap(out) SWIGTYPE && %{ $result = (void *)$1; %} %typemap(directorout, warning=SWIGWARN_TYPEMAP_DIRECTOROUT_PTR_MSG) SWIGTYPE * %{ $result = ($1_ltype)$input; %} @@ -522,6 +532,7 @@ SWIGTYPE, SWIGTYPE *, SWIGTYPE &, + SWIGTYPE &&, SWIGTYPE [], SWIGTYPE (CLASS::*) "" @@ -539,7 +550,7 @@ SWIG_CSharpSetPendingException(SWIG_CSharpApplicationException, error_msg); return $null; %} -%typemap(throws, canthrow=1) SWIGTYPE, SWIGTYPE &, SWIGTYPE *, SWIGTYPE [ANY] +%typemap(throws, canthrow=1) SWIGTYPE, SWIGTYPE &, SWIGTYPE &&, SWIGTYPE *, SWIGTYPE [ANY] %{ (void)$1; SWIG_CSharpSetPendingException(SWIG_CSharpApplicationException, "C++ $1_type exception thrown"); return $null; %} @@ -570,7 +581,7 @@ "$csinput" %typemap(csin) char *, char *&, char[ANY], char[] "$csinput" %typemap(csin) SWIGTYPE "$&csclassname.getCPtr($csinput)" -%typemap(csin) SWIGTYPE *, SWIGTYPE &, SWIGTYPE [] "$csclassname.getCPtr($csinput)" +%typemap(csin) SWIGTYPE *, SWIGTYPE &, SWIGTYPE &&, SWIGTYPE [] "$csclassname.getCPtr($csinput)" %typemap(csin) SWIGTYPE (CLASS::*) "$csclassname.getCMemberPtr($csinput)" /* The csout typemap is used for converting function return types from the return type @@ -653,6 +664,10 @@ $csclassname ret = new $csclassname($imcall, $owner);$excode return ret; } +%typemap(csout, excode=SWIGEXCODE) SWIGTYPE && { + $csclassname ret = new $csclassname($imcall, $owner);$excode + return ret; + } %typemap(csout, excode=SWIGEXCODE) SWIGTYPE *, SWIGTYPE [] { IntPtr cPtr = $imcall; $csclassname ret = (cPtr == IntPtr.Zero) ? null : new $csclassname(cPtr, $owner);$excode @@ -666,7 +681,7 @@ /* Properties */ -%typemap(csvarin, excode=SWIGEXCODE2) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [], SWIGTYPE (CLASS::*) %{ +%typemap(csvarin, excode=SWIGEXCODE2) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE &&, SWIGTYPE [], SWIGTYPE (CLASS::*) %{ set { $imcall;$excode } %} @@ -767,6 +782,11 @@ $csclassname ret = new $csclassname($imcall, $owner);$excode return ret; } %} +%typemap(csvarout, excode=SWIGEXCODE2) SWIGTYPE && %{ + get { + $csclassname ret = new $csclassname($imcall, $owner);$excode + return ret; + } %} %typemap(csvarout, excode=SWIGEXCODE2) SWIGTYPE *, SWIGTYPE [] %{ get { IntPtr cPtr = $imcall; @@ -814,13 +834,13 @@ /* Typemaps used for the generation of proxy and type wrapper class code */ -%typemap(csbase) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [], SWIGTYPE (CLASS::*) "" -%typemap(csclassmodifiers) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [], SWIGTYPE (CLASS::*) "public class" -%typemap(cscode) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [], SWIGTYPE (CLASS::*) "" -%typemap(csimports) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [], SWIGTYPE (CLASS::*) "\nusing System;\nusing System.Runtime.InteropServices;\n" +%typemap(csbase) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE &&, SWIGTYPE [], SWIGTYPE (CLASS::*) "" +%typemap(csclassmodifiers) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE &&, SWIGTYPE [], SWIGTYPE (CLASS::*) "public class" +%typemap(cscode) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE &&, SWIGTYPE [], SWIGTYPE (CLASS::*) "" +%typemap(csimports) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE &&, SWIGTYPE [], SWIGTYPE (CLASS::*) "\nusing System;\nusing System.Runtime.InteropServices;\n" %typemap(csinterfaces) SWIGTYPE "IDisposable" -%typemap(csinterfaces) SWIGTYPE *, SWIGTYPE &, SWIGTYPE [], SWIGTYPE (CLASS::*) "" -%typemap(csinterfaces_derived) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [], SWIGTYPE (CLASS::*) "" +%typemap(csinterfaces) SWIGTYPE *, SWIGTYPE &, SWIGTYPE &&, SWIGTYPE [], SWIGTYPE (CLASS::*) "" +%typemap(csinterfaces_derived) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE &&, SWIGTYPE [], SWIGTYPE (CLASS::*) "" // Proxy classes (base classes, ie, not derived classes) %typemap(csbody) SWIGTYPE %{ @@ -851,7 +871,7 @@ %} // Typewrapper classes -%typemap(csbody) SWIGTYPE *, SWIGTYPE &, SWIGTYPE [] %{ +%typemap(csbody) SWIGTYPE *, SWIGTYPE &, SWIGTYPE &&, SWIGTYPE [] %{ private HandleRef swigCPtr; internal $csclassname(IntPtr cPtr, bool futureUse) { Modified: branches/gsoc2009-matevz/Source/CParse/parser.y =================================================================== --- branches/gsoc2009-matevz/Source/CParse/parser.y 2010-07-18 00:06:40 UTC (rev 12159) +++ branches/gsoc2009-matevz/Source/CParse/parser.y 2010-07-18 00:19:22 UTC (rev 12160) @@ -3968,15 +3968,19 @@ Delete(Namespaceprefix); Namespaceprefix = Swig_symbol_qualifiedscopename(0); if (error) $$ = 0; - } - | TEMPLATE cpptype idcolon { /* Explicit template instantiation */ + } + + /* Explicit template instantiation */ + | TEMPLATE cpptype idcolon { Swig_warning(WARN_PARSE_EXPLICIT_TEMPLATE, cparse_file, cparse_line, "Explicit template instantiation ignored.\n"); - $$ = 0; - } - | EXTERN TEMPLATE cpptype idcolon { /* Explicit template instantiation without the translation unit */ + $$ = 0; + } + + /* Explicit template instantiation without the translation unit */ + | EXTERN TEMPLATE cpptype idcolon { Swig_warning(WARN_PARSE_EXPLICIT_TEMPLATE, cparse_file, cparse_line, "Explicit template instantiation ignored.\n"); - $$ = 0; - } + $$ = 0; + } ; cpp_temp_possible: c_decl { @@ -4395,6 +4399,23 @@ Setattr($$,"conversion_operator","1"); add_symbols($$); } + | storage_class COPERATOR type LAND LPAREN parms RPAREN cpp_vend { + SwigType *decl; + $$ = new_node("cdecl"); + Setattr($$,"type",$3); + Setattr($$,"name",$2); + Setattr($$,"storage",$1); + decl = NewStringEmpty(); + SwigType_add_rvalue_reference(decl); + SwigType_add_function(decl,$6); + if ($8.qualifier) { + SwigType_push(decl,$8.qualifier); + } + Setattr($$,"decl",decl); + Setattr($$,"parms",$6); + Setattr($$,"conversion_operator","1"); + add_symbols($$); + } | storage_class COPERATOR type LPAREN parms RPAREN cpp_vend { String *t = NewStringEmpty(); @@ -4902,6 +4923,15 @@ } $$.type = $1; } + | pointer LAND notso_direct_declarator { + $$ = $3; + SwigType_add_rvalue_reference($1); + if ($$.type) { + SwigType_push($1,$$.type); + Delete($$.type); + } + $$.type = $1; + } | direct_declarator { $$ = $1; if (!$$.type) $$.type = NewStringEmpty(); @@ -4920,7 +4950,7 @@ /* Adds one S/R conflict */ $$ = $2; $$.type = NewStringEmpty(); - SwigType_add_reference($$.type); + SwigType_add_rvalue_reference($$.type); if ($2.type) { SwigType_push($$.type,$2.type); Delete($2.type); @@ -4990,6 +5020,15 @@ } $$.type = $1; } + | pointer LAND PERIOD PERIOD PERIOD notso_direct_declarator { + $$ = $6; + SwigType_add_rvalue_reference($1); + if ($$.type) { + SwigType_push($1,$$.type); + Delete($$.type); + } + $$.type = $1; + } | PERIOD PERIOD PERIOD direct_declarator { $$ = $4; if (!$$.type) $$.type = NewStringEmpty(); @@ -5008,7 +5047,7 @@ /* Adds one S/R conflict */ $$ = $5; $$.type = NewStringEmpty(); - SwigType_add_reference($$.type); + SwigType_add_rvalue_reference($$.type); if ($5.type) { SwigType_push($$.type,$5.type); Delete($5.type); @@ -5047,6 +5086,16 @@ } $$.type = $1; } + | pointer idcolon DSTAR LAND PERIOD PERIOD PERIOD notso_direct_declarator { + $$ = $8; + SwigType_add_memberpointer($1,$2); + SwigType_add_rvalue_reference($1); + if ($$.type) { + SwigType_push($1,$$.type); + Delete($$.type); + } + $$.type = $1; + } | idcolon DSTAR AND PERIOD PERIOD PERIOD notso_direct_declarator { SwigType *t = NewStringEmpty(); $$ = $7; @@ -5058,6 +5107,17 @@ } $$.type = t; } + | idcolon DSTAR LAND PERIOD PERIOD PERIOD notso_direct_declarator { + SwigType *t = NewStringEmpty(); + $$ = $7; + SwigType_add_memberpointer(t,$1); + SwigType_add_rvalue_reference(t); + if ($$.type) { + SwigType_push(t,$$.type); + Delete($$.type); + } + $$.type = t; + } ; notso_direct_declarator : idcolon { @@ -5191,6 +5251,13 @@ } SwigType_add_reference($$.type); } + | LPAREN LAND direct_declarator RPAREN { + $$ = $3; + if (!$$.type) { + $$.type = NewStringEmpty(); + } + SwigType_add_rvalue_reference($$.type); + } | LPAREN idcolon DSTAR direct_declarator RPAREN { SwigType *t; $$ = $4; @@ -5283,6 +5350,13 @@ $$.parms = 0; $$.have_parms = 0; } + | pointer LAND { + $$.type = $1; + SwigType_add_rvalue_reference($$.type); + $$.id = 0; + $$.parms = 0; + $$.have_parms = 0; + } | pointer AND direct_abstract_declarator { $$ = $3; SwigType_add_reference($1); @@ -5292,6 +5366,15 @@ } $$.type = $1; } + | pointer LAND direct_abstract_declarator { + $$ = $3; + SwigType_add_rvalue_reference($1); + if ($$.type) { + SwigType_push($1,$$.type); + Delete($$.type); + } + $$.type = $1; + } | direct_abstract_declarator { $$ = $1; } @@ -5304,6 +5387,15 @@ Delete($2.type); } } + | LAND direct_abstract_declarator { + $$ = $2; + $$.type = NewStringEmpty(); + SwigType_add_rvalue_reference($$.type); + if ($2.type) { + SwigType_push($$.type,$2.type); + Delete($2.type); + } + } | AND { $$.id = 0; $$.parms = 0; @@ -5311,6 +5403,13 @@ $$.type = NewStringEmpty(); SwigType_add_reference($$.type); } + | LAND { + $$.id = 0; + $$.parms = 0; + $$.have_parms = 0; + $$.type = NewStringEmpty(); + SwigType_add_rvalue_reference($$.type); + } | idcolon DSTAR { $$.type = NewStringEmpty(); SwigType_add_memberpointer($$.type,$1); @@ -5821,6 +5920,13 @@ $$.val = NewStringf("(%s) %s", SwigType_str($2.val,0), $5.val); } } + | LPAREN expr LAND RPAREN expr %prec CAST { + $$ = $5; + if ($5.type != T_STRING) { + SwigType_add_rvalue_reference($2.val); + $$.val = NewStringf("(%s) %s", SwigType_str($2.val,0), $5.val); + } + } | LPAREN expr pointer AND RPAREN expr %prec CAST { $$ = $6; if ($6.type != T_STRING) { @@ -5829,10 +5935,22 @@ $$.val = NewStringf("(%s) %s", SwigType_str($2.val,0), $6.val); } } + | LPAREN expr pointer LAND RPAREN expr %prec CAST { + $$ = $6; + if ($6.type != T_STRING) { + SwigType_push($2.val,$3); + SwigType_add_rvalue_reference($2.val); + $$.val = NewStringf("(%s) %s", SwigType_str($2.val,0), $6.val); + } + } | AND expr { $$ = $2; $$.val = NewStringf("&%s",$2.val); } + | LAND expr { + $$ = $2; + $$.val = NewStringf("&&%s",$2.val); + } | STAR expr { $$ = $2; $$.val = NewStringf("*%s",$2.val); Modified: branches/gsoc2009-matevz/Source/Modules/php.cxx =================================================================== --- branches/gsoc2009-matevz/Source/Modules/php.cxx 2010-07-18 00:06:40 UTC (rev 12159) +++ branches/gsoc2009-matevz/Source/Modules/php.cxx 2010-07-18 00:19:22 UTC (rev 12160) @@ -1160,6 +1160,7 @@ break; } case T_REFERENCE: + case T_RVALUE_REFERENCE: case T_USER: case T_ARRAY: Clear(value); @@ -1930,6 +1931,7 @@ break; case T_POINTER: case T_REFERENCE: + case T_RVALUE_REFERENCE: case T_USER: if (is_shadow(t)) { return NewString(Char(is_shadow(t))); Modified: branches/gsoc2009-matevz/Source/Swig/cwrap.c =================================================================== --- branches/gsoc2009-matevz/Source/Swig/cwrap.c 2010-07-18 00:06:40 UTC (rev 12159) +++ branches/gsoc2009-matevz/Source/Swig/cwrap.c 2010-07-18 00:19:22 UTC (rev 12160) @@ -68,6 +68,19 @@ Delete(lstrname); } break; + case T_RVALUE_REFERENCE: + if (value) { + String *lstrname = SwigType_lstr(t, name); + String *lstr = SwigType_lstr(t, 0); + Printf(decl, "%s = (%s) &%s_defrvalue", lstrname, lstr, name); + Delete(lstrname); + Delete(lstr); + } else { + String *lstrname = SwigType_lstr(t, name); + Printf(decl, "%s = 0", lstrname); + Delete(lstrname); + } + break; case T_VOID: break; case T_VARARGS: @@ -229,6 +242,34 @@ Delete(defname); Delete(defvalue); } + } else if (tycode == T_RVALUE_REFERENCE) { + if (pvalue) { + SwigType *tvalue; + String *defname, *defvalue, *rvalue, *qvalue; + rvalue = SwigType_typedef_resolve_all(pvalue); + qvalue = SwigType_typedef_qualified(rvalue); + defname = NewStringf("%s_defrvalue", lname); + tvalue = Copy(type); + SwigType_del_rvalue_reference(tvalue); + tycode = SwigType_type(tvalue); + if (tycode != T_USER) { + /* plain primitive type, we copy the the def value */ + String *lstr = SwigType_lstr(tvalue, defname); + defvalue = NewStringf("%s = %s", lstr, qvalue); + Delete(lstr); + } else { + /* user type, we copy the reference value */ + String *str = SwigType_str(type, defname); + defvalue = NewStringf("%s = %s", str, qvalue); + Delete(str); + } + Wrapper_add_localv(w, defname, defvalue, NIL); + Delete(tvalue); + Delete(rvalue); + Delete(qvalue); + Delete(defname); + Delete(defvalue); + } } else if (!pvalue && ((tycode == T_POINTER) || (tycode == T_STRING))) { pvalue = (String *) "0"; } @@ -269,6 +310,13 @@ Delete(lstr); } break; + case T_RVALUE_REFERENCE: + { + String *lstr = SwigType_lstr(t, 0); + Printf(fcall, "%s = (%s) &", name, lstr); + Delete(lstr); + } + break; case T_USER: Printf(fcall, "%s = ", name); break; Modified: branches/gsoc2009-matevz/Source/Swig/stype.c =================================================================== --- branches/gsoc2009-matevz/Source/Swig/stype.c 2010-07-18 00:06:40 UTC (rev 12159) +++ branches/gsoc2009-matevz/Source/Swig/stype.c 2010-07-18 00:19:22 UTC (rev 12160) @@ -43,6 +43,7 @@ * * 'p.' = Pointer (*) * 'r.' = Reference (&) + * 'z.' = Rvalue reference (&&) * 'a(n).' = Array of size n [n] * 'f(..,..).' = Function with arguments (args) * 'q(str).' = Qualifier (such as const or volatile) (const, volatile) @@ -235,7 +236,7 @@ int SwigType_ismutable(SwigType *t) { int r; SwigType *qt = SwigType_typedef_resolve_all(t); - if (SwigType_isreference(qt) || SwigType_isarray(qt)) { + if (SwigType_isreference(qt) || SwigType_isrvalue_reference(qt) || SwigType_isarray(qt)) { Delete(SwigType_pop(qt)); } r = SwigType_isconst(qt); @@ -424,6 +425,16 @@ #else def = NewString("r.SWIGTYPE"); #endif + } else if (SwigType_isrvalue_reference(r)) { +#ifdef SWIG_NEW_TYPE_DEFAULT + SwigType *nr = Copy(r); + SwigType_del_rvalue_reference(nr); + def = NewString("z."); + SwigType_add_default(def, nr); + Delete(nr); +#else + def = NewString("z.SWIGTYPE"); +#endif } else if (SwigType_isarray(r)) { if (strcmp(cr, "a().SWIGTYPE") == 0) { def = NewString("p.SWIGTYPE"); @@ -597,6 +608,12 @@ Insert(result, 0, "("); Append(result, ")"); } + } else if (SwigType_isrvalue_reference(element)) { + Insert(result, 0, "&&"); + if ((nextelement) && ((SwigType_isfunction(nextelement) || (SwigType_isarray(nextelement))))) { + Insert(result, 0, "("); + Append(result, ")"); + } } else if (SwigType_isarray(element)) { DOH *size; Append(result, "["); @@ -661,7 +678,7 @@ SwigType *tt = Copy(tc); td = 0; while ((td = SwigType_typedef_resolve(tt))) { - if (td && (SwigType_isconst(td) || SwigType_isarray(td) || SwigType_isreference(td))) { + if (td && (SwigType_isconst(td) || SwigType_isarray(td) || SwigType_isreference(td) || SwigType_isrvalue_reference(td))) { /* We need to use the typedef type */ Delete(tt); tt = td; @@ -701,6 +718,13 @@ Append(result, "p."); } firstarray = 0; + } else if (SwigType_isrvalue_reference(element)) { + if (notypeconv) { + Append(result, element); + } else { + Append(result, "p."); + } + firstarray = 0; } else if (SwigType_isarray(element) && firstarray) { if (notypeconv) { Append(result, element); @@ -765,6 +789,7 @@ int clear = 1; int firstarray = 1; int isreference = 0; + int isfunction = 0; int isarray = 0; result = NewStringEmpty(); @@ -777,14 +802,14 @@ rs = s; } - if ((SwigType_isconst(rs) || SwigType_isarray(rs) || SwigType_isreference(rs))) { + if ((SwigType_isconst(rs) || SwigType_isarray(rs) || SwigType_isreference(rs) || SwigType_isrvalue_reference(rs))) { td = 0; } else { td = SwigType_typedef_resolve(rs); } if (td) { - if ((SwigType_isconst(td) || SwigType_isarray(td) || SwigType_isreference(td))) { + if ((SwigType_isconst(td) || SwigType_isarray(td) || SwigType_isreference(td) || SwigType_isrvalue_reference(td))) { elements = SwigType_split(td); } else { elements = SwigType_split(rs); @@ -836,6 +861,14 @@ Append(result, ")"); } isreference = 1; + } else if (SwigType_isrvalue_reference(element)) { + Insert(result, 0, "&&"); + if ((nextelement) && ((SwigType_isfunction(nextelement) || (SwigType_isarray(nextelement))))) { + Insert(result, 0, "("); + Append(result, ")"); + } + isreference = 1; + clear = 0; } else if (SwigType_isarray(element)) { DOH *size; if (firstarray && !isreference) { @@ -865,6 +898,7 @@ } Append(result, ")"); Delete(parms); + isfunction = 1; } else { String *bs = SwigType_namestr(element); Insert(result, 0, " "); @@ -880,10 +914,12 @@ cast = NewStringf("(%s)", result); } if (name) { - if (isreference) { - if (isarray) - Clear(cast); - Append(cast, "*"); + if (!isfunction) { + if (isreference) { + if (isarray) + Clear(cast); + Append(cast, "*"); + } } Append(cast, name); } @@ -914,6 +950,12 @@ Delete(str); if (name) Append(result, name); + } else if (SwigType_isrvalue_reference(s)) { + String *str = SwigType_str(s, 0); + Printf(result, "(%s)", str); + Delete(str); + if (name) + Append(result, name); } else if (SwigType_isqualifier(s)) { String *lstr = SwigType_lstr(s, 0); Printf(result, "(%s)%s", lstr, name); Modified: branches/gsoc2009-matevz/Source/Swig/swig.h =================================================================== --- branches/gsoc2009-matevz/Source/Swig/swig.h 2010-07-18 00:06:40 UTC (rev 12159) +++ branches/gsoc2009-matevz/Source/Swig/swig.h 2010-07-18 00:19:22 UTC (rev 12160) @@ -94,6 +94,7 @@ #define T_FUNCTION 37 #define T_MPOINTER 38 #define T_VARARGS 39 +#define T_RVALUE_REFERENCE 40 #define T_SYMBOL 98 #define T_ERROR 99 @@ -123,6 +124,8 @@ extern SwigType *SwigType_pop_arrays(SwigType *t); extern SwigType *SwigType_add_reference(SwigType *t); extern SwigType *SwigType_del_reference(SwigType *t); + extern SwigType *SwigType_add_rvalue_reference(SwigType *t); + extern SwigType *SwigType_del_rvalue_reference(SwigType *t); extern SwigType *SwigType_add_qualifier(SwigType *t, const_String_or_char_ptr qual); extern SwigType *SwigType_del_qualifier(SwigType *t); extern SwigType *SwigType_add_function(SwigType *t, ParmList *parms); @@ -146,6 +149,7 @@ extern int SwigType_ismemberpointer(SwigType *t); extern int SwigType_isreference(SwigType *t); extern int SwigType_isreference_return(SwigType *t); + extern int SwigType_isrvalue_reference(SwigType *t); extern int SwigType_isarray(SwigType *t); extern int SwigType_prefix_is_simple_1D_array(SwigType *t); extern int SwigType_isfunction(SwigType *t); Modified: branches/gsoc2009-matevz/Source/Swig/typemap.c =================================================================== --- branches/gsoc2009-matevz/Source/Swig/typemap.c 2010-07-18 00:06:40 UTC (rev 12159) +++ branches/gsoc2009-matevz/Source/Swig/typemap.c 2010-07-18 00:19:22 UTC (rev 12160) @@ -942,13 +942,13 @@ $*n_ltype */ - if (SwigType_ispointer(ftype) || (SwigType_isarray(ftype)) || (SwigType_isreference(ftype))) { - if (!(SwigType_isarray(type) || SwigType_ispointer(type) || SwigType_isreference(type))) { + if (SwigType_ispointer(ftype) || (SwigType_isarray(ftype)) || (SwigType_isreference(ftype)) || (SwigType_isrvalue_reference(ftype))) { + if (!(SwigType_isarray(type) || SwigType_ispointer(type) || SwigType_isreference(type) || SwigType_isrvalue_reference(type))) { star_type = Copy(ftype); } else { star_type = Copy(type); } - if (!SwigType_isreference(star_type)) { + if (!(SwigType_isreference(star_type) || SwigType_isrvalue_reference(star_type))) { if (SwigType_isarray(star_type)) { SwigType_del_element(star_type); } else { Modified: branches/gsoc2009-matevz/Source/Swig/typeobj.c =================================================================== --- branches/gsoc2009-matevz/Source/Swig/typeobj.c 2010-07-18 00:06:40 UTC (rev 12159) +++ branches/gsoc2009-matevz/Source/Swig/typeobj.c 2010-07-18 00:19:22 UTC (rev 12160) @@ -45,6 +45,7 @@ * * 'p.' = Pointer (*) * 'r.' = Reference (&) + * 'z.' = Rvalue reference (&&) * 'a(n).' = Array of size n [n] * 'f(..,..).' = Function with arguments (args) * 'q(str).' = Qualifier (such as const or volatile) (const, volatile) @@ -75,6 +76,7 @@ * * SwigType_add_pointer() * SwigType_add_reference() + * SwigType_add_rvalue_reference() * SwigType_add_array() * * These are used to build new types. There are also functions to undo these @@ -82,12 +84,14 @@ * * SwigType_del_pointer() * SwigType_del_reference() + * SwigType_del_rvalue_reference() * SwigType_del_array() * * In addition, there are query functions * * SwigType_ispointer() * SwigType_isreference() + * SwigType_isrvalue_reference() * SwigType_isarray() * * Finally, there are some data extraction functions that can be used to @@ -410,6 +414,41 @@ } /* ----------------------------------------------------------------------------- + * Rvalue References + * + * SwigType_add_rvalue_reference() + * SwigType_del_rvalue_reference() + * SwigType_isrvalue_reference() + * + * Add, remove, and test if a type is a rvalue reference. The deletion and query + * functions take into account qualifiers (if any). + * ----------------------------------------------------------------------------- */ + +SwigType *SwigType_add_rvalue_reference(SwigType *t) { + Insert(t, 0, "z."); + return t; +} + +SwigType *SwigType_del_rvalue_reference(SwigType *t) { + char *c = Char(t); + int check = strncmp(c, "z.", 2); + assert(check == 0); + Delslice(t, 0, 2); + return t; +} + +int SwigType_isrvalue_reference(SwigType *t) { + char *c; + if (!t) + return 0; + c = Char(t); + if (strncmp(c, "z.", 2) == 0) { + return 1; + } + return 0; +} + +/* ----------------------------------------------------------------------------- * Qualifiers * * SwigType_add_qualifier() Modified: branches/gsoc2009-matevz/Source/Swig/typesys.c =================================================================== --- branches/gsoc2009-matevz/Source/Swig/typesys.c 2010-07-18 00:06:40 UTC (rev 12159) +++ branches/gsoc2009-matevz/Source/Swig/typesys.c 2010-07-18 00:19:22 UTC (rev 12160) @@ -1206,6 +1206,8 @@ return T_ARRAY; if (strncmp(c, "r.", 2) == 0) return T_REFERENCE; + if (strncmp(c, "z.", 2) == 0) + return T_RVALUE_REFERENCE; if (strncmp(c, "m(", 2) == 0) return T_MPOINTER; if (strncmp(c, "q(", 2) == 0) { @@ -1540,6 +1542,11 @@ SwigType_del_reference(tt); SwigType_add_pointer(tt); SwigType_remember_clientdata(tt, clientdata); + } else if (SwigType_isrvalue_reference(t)) { + SwigType *tt = Copy(t); + SwigType_del_rvalue_reference(tt); + SwigType_add_pointer(tt); + SwigType_remember_clientdata(tt, clientdata); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2010-07-20 21:58:52
|
Revision: 12162 http://swig.svn.sourceforge.net/swig/?rev=12162&view=rev Author: wsfulton Date: 2010-07-20 21:58:41 +0000 (Tue, 20 Jul 2010) Log Message: ----------- merge revisions 11243-11872 from trunk to gsoc2009-matevz Modified Paths: -------------- branches/gsoc2009-matevz/CCache/Makefile.in branches/gsoc2009-matevz/CHANGES branches/gsoc2009-matevz/CHANGES.current branches/gsoc2009-matevz/Doc/Devel/internals.html branches/gsoc2009-matevz/Doc/Devel/tree.html branches/gsoc2009-matevz/Doc/Manual/Allegrocl.html branches/gsoc2009-matevz/Doc/Manual/Arguments.html branches/gsoc2009-matevz/Doc/Manual/CSharp.html branches/gsoc2009-matevz/Doc/Manual/Contents.html branches/gsoc2009-matevz/Doc/Manual/Customization.html branches/gsoc2009-matevz/Doc/Manual/Extending.html branches/gsoc2009-matevz/Doc/Manual/Guile.html branches/gsoc2009-matevz/Doc/Manual/Introduction.html branches/gsoc2009-matevz/Doc/Manual/Java.html branches/gsoc2009-matevz/Doc/Manual/Library.html branches/gsoc2009-matevz/Doc/Manual/Lua.html branches/gsoc2009-matevz/Doc/Manual/Modules.html branches/gsoc2009-matevz/Doc/Manual/Ocaml.html branches/gsoc2009-matevz/Doc/Manual/Perl5.html branches/gsoc2009-matevz/Doc/Manual/Php.html branches/gsoc2009-matevz/Doc/Manual/Preprocessor.html branches/gsoc2009-matevz/Doc/Manual/Python.html branches/gsoc2009-matevz/Doc/Manual/Ruby.html branches/gsoc2009-matevz/Doc/Manual/SWIG.html branches/gsoc2009-matevz/Doc/Manual/SWIGPlus.html branches/gsoc2009-matevz/Doc/Manual/Tcl.html branches/gsoc2009-matevz/Doc/Manual/Typemaps.html branches/gsoc2009-matevz/Doc/Manual/Varargs.html branches/gsoc2009-matevz/Doc/Manual/Warnings.html branches/gsoc2009-matevz/Doc/Manual/Windows.html branches/gsoc2009-matevz/Examples/Makefile.in branches/gsoc2009-matevz/Examples/java/pointer/index.html branches/gsoc2009-matevz/Examples/perl5/index.html branches/gsoc2009-matevz/Examples/perl5/pointer/index.html branches/gsoc2009-matevz/Examples/php/check.list branches/gsoc2009-matevz/Examples/php/class/Makefile branches/gsoc2009-matevz/Examples/php/class/runme.php branches/gsoc2009-matevz/Examples/php/cpointer/runme.php branches/gsoc2009-matevz/Examples/php/reference/Makefile branches/gsoc2009-matevz/Examples/php/reference/example.cxx branches/gsoc2009-matevz/Examples/php/reference/example.h branches/gsoc2009-matevz/Examples/php/reference/example.i branches/gsoc2009-matevz/Examples/php/reference/runme.php branches/gsoc2009-matevz/Examples/python/callback/example.h branches/gsoc2009-matevz/Examples/python/pointer/index.html branches/gsoc2009-matevz/Examples/ruby/multimap/example.i branches/gsoc2009-matevz/Examples/ruby/pointer/index.html branches/gsoc2009-matevz/Examples/tcl/pointer/index.html branches/gsoc2009-matevz/Examples/test-suite/allegrocl/Makefile.in branches/gsoc2009-matevz/Examples/test-suite/cffi/Makefile.in branches/gsoc2009-matevz/Examples/test-suite/char_strings.i branches/gsoc2009-matevz/Examples/test-suite/chicken/Makefile.in branches/gsoc2009-matevz/Examples/test-suite/clisp/Makefile.in branches/gsoc2009-matevz/Examples/test-suite/common.mk branches/gsoc2009-matevz/Examples/test-suite/constant_pointers.i branches/gsoc2009-matevz/Examples/test-suite/constructor_copy.i branches/gsoc2009-matevz/Examples/test-suite/cpp_broken.i branches/gsoc2009-matevz/Examples/test-suite/csharp/Makefile.in branches/gsoc2009-matevz/Examples/test-suite/csharp/char_strings_runme.cs branches/gsoc2009-matevz/Examples/test-suite/csharp/csharp_attributes_runme.cs branches/gsoc2009-matevz/Examples/test-suite/csharp/enum_thorough_runme.cs branches/gsoc2009-matevz/Examples/test-suite/csharp/enum_thorough_simple_runme.cs branches/gsoc2009-matevz/Examples/test-suite/csharp/enum_thorough_typesafe_runme.cs branches/gsoc2009-matevz/Examples/test-suite/csharp/li_std_map_runme.cs branches/gsoc2009-matevz/Examples/test-suite/csharp/li_std_vector_runme.cs branches/gsoc2009-matevz/Examples/test-suite/csharp/overload_template_runme.cs branches/gsoc2009-matevz/Examples/test-suite/csharp_attributes.i branches/gsoc2009-matevz/Examples/test-suite/csharp_prepost.i branches/gsoc2009-matevz/Examples/test-suite/default_args.i branches/gsoc2009-matevz/Examples/test-suite/derived_nested.i branches/gsoc2009-matevz/Examples/test-suite/director_detect.i branches/gsoc2009-matevz/Examples/test-suite/director_protected.i branches/gsoc2009-matevz/Examples/test-suite/director_stl.i branches/gsoc2009-matevz/Examples/test-suite/director_using.i branches/gsoc2009-matevz/Examples/test-suite/enum_thorough.i branches/gsoc2009-matevz/Examples/test-suite/enum_thorough_typesafe.i branches/gsoc2009-matevz/Examples/test-suite/enums.i branches/gsoc2009-matevz/Examples/test-suite/global_namespace.i branches/gsoc2009-matevz/Examples/test-suite/guile/Makefile.in branches/gsoc2009-matevz/Examples/test-suite/guilescm/Makefile.in branches/gsoc2009-matevz/Examples/test-suite/java/Makefile.in branches/gsoc2009-matevz/Examples/test-suite/java/char_strings_runme.java branches/gsoc2009-matevz/Examples/test-suite/java/enum_thorough_proper_runme.java branches/gsoc2009-matevz/Examples/test-suite/java/enum_thorough_runme.java branches/gsoc2009-matevz/Examples/test-suite/java/enum_thorough_simple_runme.java branches/gsoc2009-matevz/Examples/test-suite/java/enum_thorough_typeunsafe_runme.java branches/gsoc2009-matevz/Examples/test-suite/java/java_director_runme.java branches/gsoc2009-matevz/Examples/test-suite/java/java_jnitypes_runme.java branches/gsoc2009-matevz/Examples/test-suite/java/java_throws_runme.java branches/gsoc2009-matevz/Examples/test-suite/java/overload_template_runme.java branches/gsoc2009-matevz/Examples/test-suite/java/template_methods_runme.java branches/gsoc2009-matevz/Examples/test-suite/java_director.i branches/gsoc2009-matevz/Examples/test-suite/java_jnitypes.i branches/gsoc2009-matevz/Examples/test-suite/java_throws.i branches/gsoc2009-matevz/Examples/test-suite/lextype.i branches/gsoc2009-matevz/Examples/test-suite/li_cdata.i branches/gsoc2009-matevz/Examples/test-suite/li_factory.i branches/gsoc2009-matevz/Examples/test-suite/li_math.i branches/gsoc2009-matevz/Examples/test-suite/li_std_map.i branches/gsoc2009-matevz/Examples/test-suite/li_std_vector.i branches/gsoc2009-matevz/Examples/test-suite/li_std_vector_extra.i branches/gsoc2009-matevz/Examples/test-suite/li_std_vector_ptr.i branches/gsoc2009-matevz/Examples/test-suite/lua/Makefile.in branches/gsoc2009-matevz/Examples/test-suite/lua/overload_template_fast_runme.lua branches/gsoc2009-matevz/Examples/test-suite/lua/overload_template_runme.lua branches/gsoc2009-matevz/Examples/test-suite/mzscheme/Makefile.in branches/gsoc2009-matevz/Examples/test-suite/name_warnings.i branches/gsoc2009-matevz/Examples/test-suite/namespace_class.i branches/gsoc2009-matevz/Examples/test-suite/namespace_union.i branches/gsoc2009-matevz/Examples/test-suite/nested.i branches/gsoc2009-matevz/Examples/test-suite/nested_comment.i branches/gsoc2009-matevz/Examples/test-suite/nested_structs.i branches/gsoc2009-matevz/Examples/test-suite/ocaml/Makefile.in branches/gsoc2009-matevz/Examples/test-suite/octave/Makefile.in branches/gsoc2009-matevz/Examples/test-suite/octave/empty_runme.m branches/gsoc2009-matevz/Examples/test-suite/octave/enums_runme.m branches/gsoc2009-matevz/Examples/test-suite/octave/exception_order_runme.m branches/gsoc2009-matevz/Examples/test-suite/octave/imports_runme.m branches/gsoc2009-matevz/Examples/test-suite/octave/li_std_vector_runme.m branches/gsoc2009-matevz/Examples/test-suite/octave/multi_import_runme.m branches/gsoc2009-matevz/Examples/test-suite/octave/overload_template_fast_runme.m branches/gsoc2009-matevz/Examples/test-suite/octave/overload_template_runme.m branches/gsoc2009-matevz/Examples/test-suite/octave/wrapmacro_runme.m branches/gsoc2009-matevz/Examples/test-suite/operator_overload_break.i branches/gsoc2009-matevz/Examples/test-suite/overload_template.i branches/gsoc2009-matevz/Examples/test-suite/perl5/Makefile.in branches/gsoc2009-matevz/Examples/test-suite/perl5/enum_thorough_runme.pl branches/gsoc2009-matevz/Examples/test-suite/perl5/wrapmacro_runme.pl branches/gsoc2009-matevz/Examples/test-suite/php/Makefile.in branches/gsoc2009-matevz/Examples/test-suite/php/add_link_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/arrayptr_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/arrays_global_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/arrays_global_twodim_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/arrays_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/arrays_scope_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/casts_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/class_ignore_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/conversion_namespace_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/conversion_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/cpp_static_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/enum_scope_template_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/evil_diamond_ns_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/evil_diamond_prop_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/evil_diamond_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/extend_template_ns_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/extend_template_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/grouping_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/ignore_parameter_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/li_carrays_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/li_std_string_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/rename_scope_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/smart_pointer_rename_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/sym_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/template_arg_typename_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/tests.php branches/gsoc2009-matevz/Examples/test-suite/php/valuewrapper_base_runme.php branches/gsoc2009-matevz/Examples/test-suite/php_namewarn_rename.i branches/gsoc2009-matevz/Examples/test-suite/pike/Makefile.in branches/gsoc2009-matevz/Examples/test-suite/python/Makefile.in branches/gsoc2009-matevz/Examples/test-suite/python/director_exception_runme.py branches/gsoc2009-matevz/Examples/test-suite/python/enums_runme.py branches/gsoc2009-matevz/Examples/test-suite/python/li_std_vector_extra_runme.py branches/gsoc2009-matevz/Examples/test-suite/python/overload_template_fast_runme.py branches/gsoc2009-matevz/Examples/test-suite/python/overload_template_runme.py branches/gsoc2009-matevz/Examples/test-suite/python/template_typedef_import_runme.py branches/gsoc2009-matevz/Examples/test-suite/python/wrapmacro_runme.py branches/gsoc2009-matevz/Examples/test-suite/r/Makefile.in branches/gsoc2009-matevz/Examples/test-suite/rename_scope.i branches/gsoc2009-matevz/Examples/test-suite/ruby/Makefile.in branches/gsoc2009-matevz/Examples/test-suite/ruby/li_std_vector_runme.rb branches/gsoc2009-matevz/Examples/test-suite/ruby/overload_template_runme.rb branches/gsoc2009-matevz/Examples/test-suite/ruby/primitive_types_runme.rb branches/gsoc2009-matevz/Examples/test-suite/static_const_member.i branches/gsoc2009-matevz/Examples/test-suite/tcl/Makefile.in branches/gsoc2009-matevz/Examples/test-suite/template_classes.i branches/gsoc2009-matevz/Examples/test-suite/template_default.i branches/gsoc2009-matevz/Examples/test-suite/template_default2.i branches/gsoc2009-matevz/Examples/test-suite/template_default_qualify.i branches/gsoc2009-matevz/Examples/test-suite/template_enum_ns_inherit.i branches/gsoc2009-matevz/Examples/test-suite/template_enum_typedef.i branches/gsoc2009-matevz/Examples/test-suite/template_methods.i branches/gsoc2009-matevz/Examples/test-suite/template_ns4.i branches/gsoc2009-matevz/Examples/test-suite/throw_exception.i branches/gsoc2009-matevz/Examples/test-suite/typemap_out_optimal.i branches/gsoc2009-matevz/Examples/test-suite/uffi/Makefile.in branches/gsoc2009-matevz/Examples/test-suite/union_scope.i branches/gsoc2009-matevz/Examples/test-suite/using_namespace.i branches/gsoc2009-matevz/Examples/test-suite/valuewrapper_base.i branches/gsoc2009-matevz/Examples/test-suite/valuewrapper_const.i branches/gsoc2009-matevz/Examples/test-suite/wrapmacro.i branches/gsoc2009-matevz/Lib/allkw.swg branches/gsoc2009-matevz/Lib/cdata.i branches/gsoc2009-matevz/Lib/csharp/boost_shared_ptr.i branches/gsoc2009-matevz/Lib/csharp/std_map.i branches/gsoc2009-matevz/Lib/csharp/std_vector.i branches/gsoc2009-matevz/Lib/exception.i branches/gsoc2009-matevz/Lib/java/boost_intrusive_ptr.i branches/gsoc2009-matevz/Lib/java/boost_shared_ptr.i branches/gsoc2009-matevz/Lib/lua/luarun.swg branches/gsoc2009-matevz/Lib/octave/boost_shared_ptr.i branches/gsoc2009-matevz/Lib/octave/octrun.swg branches/gsoc2009-matevz/Lib/octave/octruntime.swg branches/gsoc2009-matevz/Lib/octave/octtypemaps.swg branches/gsoc2009-matevz/Lib/perl5/noembed.h branches/gsoc2009-matevz/Lib/perl5/perlrun.swg branches/gsoc2009-matevz/Lib/perl5/reference.i branches/gsoc2009-matevz/Lib/php/const.i branches/gsoc2009-matevz/Lib/php/globalvar.i branches/gsoc2009-matevz/Lib/php/php.swg branches/gsoc2009-matevz/Lib/php/phpinit.swg branches/gsoc2009-matevz/Lib/php/phpkw.swg branches/gsoc2009-matevz/Lib/php/phprun.swg branches/gsoc2009-matevz/Lib/php/std_map.i branches/gsoc2009-matevz/Lib/php/std_string.i branches/gsoc2009-matevz/Lib/php/std_vector.i branches/gsoc2009-matevz/Lib/php/typemaps.i branches/gsoc2009-matevz/Lib/php/utils.i branches/gsoc2009-matevz/Lib/python/boost_shared_ptr.i branches/gsoc2009-matevz/Lib/python/director.swg branches/gsoc2009-matevz/Lib/python/pyinit.swg branches/gsoc2009-matevz/Lib/python/pyrun.swg branches/gsoc2009-matevz/Lib/python/std_map.i branches/gsoc2009-matevz/Lib/r/r.swg branches/gsoc2009-matevz/Lib/r/rtype.swg branches/gsoc2009-matevz/Lib/r/std_pair.i branches/gsoc2009-matevz/Lib/ruby/director.swg branches/gsoc2009-matevz/Lib/ruby/embed.i branches/gsoc2009-matevz/Lib/ruby/rubycontainer.swg branches/gsoc2009-matevz/Lib/ruby/rubycontainer_extended.swg branches/gsoc2009-matevz/Lib/ruby/rubyhead.swg branches/gsoc2009-matevz/Lib/ruby/rubyprimtypes.swg branches/gsoc2009-matevz/Lib/ruby/rubyrun.swg branches/gsoc2009-matevz/Lib/ruby/std_map.i branches/gsoc2009-matevz/Lib/ruby/std_multimap.i branches/gsoc2009-matevz/Lib/ruby/std_pair.i branches/gsoc2009-matevz/Lib/ruby/std_set.i branches/gsoc2009-matevz/Lib/shared_ptr.i branches/gsoc2009-matevz/Lib/std/_std_deque.i branches/gsoc2009-matevz/Lib/std/std_vector.i branches/gsoc2009-matevz/Lib/swig.swg branches/gsoc2009-matevz/Lib/tcl/std_vector.i branches/gsoc2009-matevz/Lib/tcl/tclinit.swg branches/gsoc2009-matevz/Lib/tcl/typemaps.i branches/gsoc2009-matevz/Lib/typemaps/cdata.swg branches/gsoc2009-matevz/Lib/typemaps/fragments.swg branches/gsoc2009-matevz/Lib/typemaps/swigmacros.swg branches/gsoc2009-matevz/Makefile.in branches/gsoc2009-matevz/README branches/gsoc2009-matevz/Source/CParse/cparse.h branches/gsoc2009-matevz/Source/CParse/cscanner.c branches/gsoc2009-matevz/Source/CParse/parser.y branches/gsoc2009-matevz/Source/CParse/templ.c branches/gsoc2009-matevz/Source/Include/swigwarn.h branches/gsoc2009-matevz/Source/Makefile.am branches/gsoc2009-matevz/Source/Modules/allegrocl.cxx branches/gsoc2009-matevz/Source/Modules/allocate.cxx branches/gsoc2009-matevz/Source/Modules/cffi.cxx branches/gsoc2009-matevz/Source/Modules/clisp.cxx branches/gsoc2009-matevz/Source/Modules/csharp.cxx branches/gsoc2009-matevz/Source/Modules/emit.cxx branches/gsoc2009-matevz/Source/Modules/guile.cxx branches/gsoc2009-matevz/Source/Modules/java.cxx branches/gsoc2009-matevz/Source/Modules/lang.cxx branches/gsoc2009-matevz/Source/Modules/main.cxx branches/gsoc2009-matevz/Source/Modules/modula3.cxx branches/gsoc2009-matevz/Source/Modules/mzscheme.cxx branches/gsoc2009-matevz/Source/Modules/ocaml.cxx branches/gsoc2009-matevz/Source/Modules/octave.cxx branches/gsoc2009-matevz/Source/Modules/overload.cxx branches/gsoc2009-matevz/Source/Modules/perl5.cxx branches/gsoc2009-matevz/Source/Modules/php.cxx branches/gsoc2009-matevz/Source/Modules/pike.cxx branches/gsoc2009-matevz/Source/Modules/python.cxx branches/gsoc2009-matevz/Source/Modules/r.cxx branches/gsoc2009-matevz/Source/Modules/ruby.cxx branches/gsoc2009-matevz/Source/Modules/swigmain.cxx branches/gsoc2009-matevz/Source/Modules/swigmod.h branches/gsoc2009-matevz/Source/Modules/tcl8.cxx branches/gsoc2009-matevz/Source/Modules/typepass.cxx branches/gsoc2009-matevz/Source/Modules/uffi.cxx branches/gsoc2009-matevz/Source/Preprocessor/cpp.c branches/gsoc2009-matevz/Source/Swig/cwrap.c branches/gsoc2009-matevz/Source/Swig/error.c branches/gsoc2009-matevz/Source/Swig/include.c branches/gsoc2009-matevz/Source/Swig/misc.c branches/gsoc2009-matevz/Source/Swig/naming.c branches/gsoc2009-matevz/Source/Swig/parms.c branches/gsoc2009-matevz/Source/Swig/scanner.c branches/gsoc2009-matevz/Source/Swig/stype.c branches/gsoc2009-matevz/Source/Swig/swig.h branches/gsoc2009-matevz/Source/Swig/swigparm.h branches/gsoc2009-matevz/Source/Swig/swigscan.h branches/gsoc2009-matevz/Source/Swig/symbol.c branches/gsoc2009-matevz/Source/Swig/tree.c branches/gsoc2009-matevz/Source/Swig/typemap.c branches/gsoc2009-matevz/Source/Swig/typeobj.c branches/gsoc2009-matevz/Source/Swig/typesys.c branches/gsoc2009-matevz/Tools/mkrelease.py branches/gsoc2009-matevz/configure.in Added Paths: ----------- branches/gsoc2009-matevz/Examples/php/callback/ branches/gsoc2009-matevz/Examples/php/callback/Makefile branches/gsoc2009-matevz/Examples/php/callback/example.cxx branches/gsoc2009-matevz/Examples/php/callback/example.h branches/gsoc2009-matevz/Examples/php/callback/example.i branches/gsoc2009-matevz/Examples/php/callback/index.html branches/gsoc2009-matevz/Examples/php/callback/runme.php branches/gsoc2009-matevz/Examples/php/extend/ branches/gsoc2009-matevz/Examples/php/extend/Makefile branches/gsoc2009-matevz/Examples/php/extend/example.cxx branches/gsoc2009-matevz/Examples/php/extend/example.h branches/gsoc2009-matevz/Examples/php/extend/example.i branches/gsoc2009-matevz/Examples/php/extend/index.html branches/gsoc2009-matevz/Examples/php/extend/runme.php branches/gsoc2009-matevz/Examples/test-suite/catches.i branches/gsoc2009-matevz/Examples/test-suite/constant_expr.i branches/gsoc2009-matevz/Examples/test-suite/csharp/catches_runme.cs branches/gsoc2009-matevz/Examples/test-suite/csharp/exception_order_runme.cs branches/gsoc2009-matevz/Examples/test-suite/csharp/preproc_constants_c_runme.cs branches/gsoc2009-matevz/Examples/test-suite/csharp/preproc_constants_runme.cs branches/gsoc2009-matevz/Examples/test-suite/csharp/special_variable_macros_runme.cs branches/gsoc2009-matevz/Examples/test-suite/extern_c.i branches/gsoc2009-matevz/Examples/test-suite/global_scope_types.i branches/gsoc2009-matevz/Examples/test-suite/java/memberin_extend_runme.java branches/gsoc2009-matevz/Examples/test-suite/java/nested_class_runme.java branches/gsoc2009-matevz/Examples/test-suite/java/nested_structs_runme.java branches/gsoc2009-matevz/Examples/test-suite/java/nested_workaround_runme.java branches/gsoc2009-matevz/Examples/test-suite/java/special_variable_macros_runme.java branches/gsoc2009-matevz/Examples/test-suite/java/template_nested_runme.java branches/gsoc2009-matevz/Examples/test-suite/java/template_nested_typemaps_runme.java branches/gsoc2009-matevz/Examples/test-suite/java/template_partial_specialization_runme.java branches/gsoc2009-matevz/Examples/test-suite/java/template_partial_specialization_typedef_runme.java branches/gsoc2009-matevz/Examples/test-suite/java/wallkw_runme.java branches/gsoc2009-matevz/Examples/test-suite/li_reference.i branches/gsoc2009-matevz/Examples/test-suite/li_std_combinations.i branches/gsoc2009-matevz/Examples/test-suite/memberin_extend.i branches/gsoc2009-matevz/Examples/test-suite/memberin_extend_c.i branches/gsoc2009-matevz/Examples/test-suite/nested_class.i branches/gsoc2009-matevz/Examples/test-suite/nested_workaround.i branches/gsoc2009-matevz/Examples/test-suite/perl5/li_reference_runme.pl branches/gsoc2009-matevz/Examples/test-suite/php/char_strings_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/director_abstract_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/director_basic_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/director_classic_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/director_default_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/director_detect_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/director_enum_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/director_exception_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/director_extend_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/director_finalizer_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/director_frob_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/director_nested_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/director_profile_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/director_protected_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/director_stl_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/director_string_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/director_thread_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/director_unroll_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/import_nomodule_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/li_factory_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/newobject1_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/overload_rename_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/pointer_reference_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/prefix_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/primitive_ref_runme.php branches/gsoc2009-matevz/Examples/test-suite/prefix.i branches/gsoc2009-matevz/Examples/test-suite/preproc_constants.i branches/gsoc2009-matevz/Examples/test-suite/preproc_constants_c.i branches/gsoc2009-matevz/Examples/test-suite/python/extern_c_runme.py branches/gsoc2009-matevz/Examples/test-suite/python/li_cdata_runme.py branches/gsoc2009-matevz/Examples/test-suite/python/memberin_extend_c_runme.py branches/gsoc2009-matevz/Examples/test-suite/python/nested_workaround_runme.py branches/gsoc2009-matevz/Examples/test-suite/python/special_variable_macros_runme.py branches/gsoc2009-matevz/Examples/test-suite/python/struct_initialization_runme.py branches/gsoc2009-matevz/Examples/test-suite/special_variable_macros.i branches/gsoc2009-matevz/Examples/test-suite/struct_initialization.i branches/gsoc2009-matevz/Examples/test-suite/struct_initialization_cpp.i branches/gsoc2009-matevz/Examples/test-suite/symbol_clash.i branches/gsoc2009-matevz/Examples/test-suite/template_nested.i branches/gsoc2009-matevz/Examples/test-suite/template_nested_typemaps.i branches/gsoc2009-matevz/Examples/test-suite/template_partial_specialization.i branches/gsoc2009-matevz/Examples/test-suite/template_partial_specialization_typedef.i branches/gsoc2009-matevz/Examples/test-suite/typemap_global_scope.i branches/gsoc2009-matevz/Examples/test-suite/typemap_template.i branches/gsoc2009-matevz/Examples/test-suite/wallkw.i branches/gsoc2009-matevz/Lib/php/director.swg branches/gsoc2009-matevz/Lib/php/factory.i branches/gsoc2009-matevz/Lib/r/std_map.i Removed Paths: ------------- branches/gsoc2009-matevz/Examples/php/callback/Makefile branches/gsoc2009-matevz/Examples/php/callback/example.cxx branches/gsoc2009-matevz/Examples/php/callback/example.h branches/gsoc2009-matevz/Examples/php/callback/example.i branches/gsoc2009-matevz/Examples/php/callback/index.html branches/gsoc2009-matevz/Examples/php/callback/runme.php branches/gsoc2009-matevz/Examples/php/extend/Makefile branches/gsoc2009-matevz/Examples/php/extend/example.cxx branches/gsoc2009-matevz/Examples/php/extend/example.h branches/gsoc2009-matevz/Examples/php/extend/example.i branches/gsoc2009-matevz/Examples/php/extend/index.html branches/gsoc2009-matevz/Examples/php/extend/runme.php branches/gsoc2009-matevz/Examples/test-suite/octave/director_exception_runme.m branches/gsoc2009-matevz/Examples/test-suite/octave/director_finalizer_runme.m Property Changed: ---------------- branches/gsoc2009-matevz/ branches/gsoc2009-matevz/CCache/ branches/gsoc2009-matevz/CCache/web/ branches/gsoc2009-matevz/Examples/test-suite/cpp0x_template_double_brackets.i branches/gsoc2009-matevz/LICENSE-GPL branches/gsoc2009-matevz/LICENSE-UNIVERSITIES branches/gsoc2009-matevz/Source/Swig/swigfile.h branches/gsoc2009-matevz/Source/Swig/swigopt.h branches/gsoc2009-matevz/Source/Swig/swigparm.h branches/gsoc2009-matevz/Source/Swig/swigscan.h branches/gsoc2009-matevz/Source/Swig/swigtree.h branches/gsoc2009-matevz/Source/Swig/swigwrap.h Property changes on: branches/gsoc2009-matevz ___________________________________________________________________ Modified: svn:mergeinfo - /branches/swig-2.0:11085-11086,11088-11089 /trunk:11873-11876 + /branches/swig-2.0:11085-11086,11088-11089 /trunk:11243-11876 Property changes on: branches/gsoc2009-matevz/CCache ___________________________________________________________________ Modified: svn:ignore - Makefile ccache *gz config.h config.log config.status tca.log tca.map + Makefile autom4te.cache ccache-swig ccache-swig.1 ccache-swig.exe ccache_swig_config.h *gz configure config.h config.h.in config.log config.status tca.log tca.map Modified: branches/gsoc2009-matevz/CCache/Makefile.in =================================================================== --- branches/gsoc2009-matevz/CCache/Makefile.in 2010-07-19 18:10:40 UTC (rev 12161) +++ branches/gsoc2009-matevz/CCache/Makefile.in 2010-07-20 21:58:41 UTC (rev 12162) @@ -37,7 +37,6 @@ -yodl2man -o $(PACKAGE_NAME).1 ccache.yo web/ccache-man.html: ccache.yo - mkdir -p man yodl2html -o web/ccache-man.html ccache.yo install: $(PACKAGE_NAME)$(EXEEXT) $(PACKAGE_NAME).1 @@ -53,7 +52,7 @@ clean: /bin/rm -f $(OBJS) *~ $(PACKAGE_NAME)$(EXEEXT) -clean-docs: +distclean-docs: rm -f $(PACKAGE_NAME).1 web/ccache-man.html check : test @@ -63,9 +62,12 @@ check: test -distclean: clean - /bin/rm -f Makefile config.h config.sub config.log build-stamp config.status configure config.h +distclean: clean distclean-docs + /bin/rm -f Makefile config.h config.sub config.log build-stamp config.status config.h.in ccache_swig_config.h +maintainer-clean: distclean + /bin/rm -f configure + # FIXME: To fix this, test.sh needs to be able to take ccache from the # installed prefix, not from the source dir. installcheck: Property changes on: branches/gsoc2009-matevz/CCache/web ___________________________________________________________________ Added: svn:ignore + ccache-man.html Modified: branches/gsoc2009-matevz/CHANGES =================================================================== --- branches/gsoc2009-matevz/CHANGES 2010-07-19 18:10:40 UTC (rev 12161) +++ branches/gsoc2009-matevz/CHANGES 2010-07-20 21:58:41 UTC (rev 12162) @@ -2,6 +2,264 @@ See CHANGES.current for current version. +Version 1.3.40 (18 August 2009) +=============================== + +2009-08-17: olly + [Perl] Add "#undef do_exec" to our clean up of Perl global + namespace pollution. + +2009-08-17: olly + [PHP] Fix to wrap a resource returned by __get() in a PHP object (SF#2549217). + +2009-08-17: wsfulton + Fix #2797485 After doing a 'make clean', install fails if yodl2man or yodl2html + is not available. + +2009-08-16: wsfulton + [Octave] Caught exceptions display the type of the C++ exception instead of the + generic "c++-side threw an exception" message. + +2009-08-16: wsfulton + [Java] When %catches is used, fix so that any classes specified in the "throws" + attribute of the "throws" typemap are generated into the Java method's throws clause. + +2009-08-16: wsfulton + [C#] Fix exception handling when %catches is used, reported by Juan Manuel Alvarez. + +2009-08-15: wsfulton + Fix %template seg fault on some cases of overloading the templated method. + Bug reported by Jan Kupec. + +2009-08-15: wsfulton + [Ruby] Add numerous missing wrapped methods for std::vector<bool> specialization + as reported by Youssef Jones. + +2009-08-14: wsfulton + [Perl] Add SWIG_ConvertPtrAndOwn() method into the runtime for smart pointer + memory ownership control. shared_ptr support still to be added. Patch from + David Fletcher. + +2009-08-14: olly + [PHP] PHP5 now wraps static member variables as documented. + +2009-08-14: olly + [PHP] Update the PHP "class" example to work with PHP5 and use + modern wrapping features. + +2009-08-13: wsfulton + [PHP] std::vector wrappers overhaul. They no longer require the + specialize_std_vector() macro. Added wrappers for capacity() and reserve(). + +2009-08-13: wsfulton + [PHP] Add const reference typemaps. const reference primitive types are + now passed by value rather than pointer like the other target languages. + Fixes SF#2524029. + +2009-08-08: wsfulton + [Python] More user friendly AttributeError is raised when there are + no constructors generated for the proxy class in the event that the + class is abstract - the error message is now + "No constructor defined - class is abstract" whereas if there are no + public constructors for any other reason and the class is not abstract, + the message remains + "No constructor defined". + [tcl] Similarly for tcl when using -itcl. + +2009-08-04: olly + [PHP] Fix generated code to work with PHP 5.3. + +2009-08-04: vmiklos + [PHP] Various mathematical functions (which would conflict + with the built-in PHP ones) are now automatically handled by + adding a 'c_' prefix. + +2009-08-03: wsfulton + [C#] The std::vector<T> implementation is improved and now uses $typemap such + that the proxy class for T no longer has to be specified in some macros + for correct C# compilation; the following macros are deprecated, where + CSTYPE was the C# type for the C++ class CTYPE: + + SWIG_STD_VECTOR_SPECIALIZE_MINIMUM(CSTYPE, CTYPE) + usage should be removed altogether + + SWIG_STD_VECTOR_SPECIALIZE(CSTYPE, CTYPE) + should be replaced with: + SWIG_STD_VECTOR_ENHANCED(CTYPE) + + Some more details in csharp/std_vector.i + + *** POTENTIAL INCOMPATIBILITY *** + +2009-07-31: olly + [Python] Fix indentation so that we give a useful error if the + module can't be loaded. Patch from Gaetan Lehmann in SF#2829853. + +2009-07-29: wsfulton + Add $typemap(method, typelist) special variable macro. This allows + the contents of a typemap to be inserted within another typemap. + Fully documented in Typemaps.html. + +2009-07-29: vmiklos + [PHP] Static member variables are now prefixed with the + class name. This allows static member variables with the + same name in different classes. + +2009-07-29: olly + [Python] Add missing locks to std::map wrappers. Patch from + Paul Hampson in SF#2813836. + +2009-07-29: olly + [PHP] Fix memory leak in PHP OUTPUT typemaps. Reported by Hitoshi + Amano in SF#2826322. + +2009-07-29: olly + [PHP] Fix memory leak in PHP resource destructor for classes + without a destructor and non-class types. Patch from Hitoshi Amano + in SF#2825303. + +2009-07-28: olly + [PHP] Update warnings about clashes between identifiers and PHP + keywords and automatic renaming to work with the PHP5 class + wrappers. Fixes SF#1613679. + +2009-07-28: vmiklos + [PHP] If a member function is not public but it has a base + which is public, then now a warning is issued and the member + function will be public, as PHP requires this. + +2009-07-21: vmiklos + [PHP] Director support added. + +2009-07-15: olly + [Perl] Don't specify Perl prototype "()" for a constructor with a + different name to the class, as such constructors can still take + parameters. + +2009-07-12: xavier98 + [Octave] Add support for Octave 3.2 API + +2009-07-05: olly + [PHP] Update the list of PHP keywords - "cfunction" is no longer a + keyword in PHP5 and PHP 5.3 added "goto", "namespace", "__DIR__", + and "__NAMESPACE__". + +2009-07-03: olly + [Tcl] To complement USE_TCL_STUBS, add support for USE_TK_STUBS + and SWIG_TCL_STUBS_VERSION. Document all three in the Tcl chapter + of the manual. Based on patch from SF#2810380 by Christian + Gollwitzer. + +2009-07-02: vmiklos + [PHP] Added factory.i for PHP, see the li_factory testcase + for more info on how to use it. + +2009-07-02: wsfulton + Fix -Wallkw option as reported by Solomon Gibbs. + +2009-07-02: wsfulton + Fix syntax error when a nested struct contains a comment containing a * followed + eventually by a /. Regression from 1.3.37, reported by Solomon Gibbs. + +2009-07-01: vmiklos + [PHP] Unknown properties are no longer ignored in proxy + classes. + +2009-07-01: vmiklos + [PHP] Fixed %newobject behaviour, previously any method + marked with %newobject was handled as a constructor. + +2009-06-30: olly + [Ruby] Undefine close and connect macros defined by Ruby API + headers as we don't need them and they can clash with C++ methods + being wrapped. Patch from Vit Ondruch in SF#2814430. + +2009-06-26: olly + [Ruby] Fix to handle FIXNUM values greater than MAXINT passed for a + double parameter. + +2009-06-24: wsfulton + Fix wrapping methods with default arguments and the compactdefaultargs feature + where a class is passed by value and is assigned a default value. The SwigValueWrapper + template workaround for a missing default constructor is no longer used as the code + generated does not call the default constructor. + +2009-06-16: wsfulton + [Java,C#] Fix enum marshalling when %ignore is used on one of the enum items. + Incorrect enum values were being passed to the C++ layer or compilation errors resulted. + +2009-06-02: talby + [Perl] Resolved reference.i overload support problem + identified by John Potowsky. + +2009-05-26: wsfulton + [C#] Improved std::map wrappers based on patch from Yuval Baror. The C# proxy + now implements System.Collections.Generic.IDictionary<>. + + These std:map wrappers have a non-backwards compatible overhaul to make them + like a .NET IDictionary. Some method names have changed as following: + set -> setitem (use this[] property now) + get -> getitem (use this[] property now) + has_key -> ContainsKey + del -> Remove + clear -> Clear + + The following macros used for std::map wrappers are deprecated and will no longer work: + specialize_std_map_on_key + specialize_std_map_on_value + specialize_std_map_on_both + + *** POTENTIAL INCOMPATIBILITY *** + +2009-05-20: vmiklos + [PHP] Add the 'thisown' member to classes. The usage of it + is the same as the Python thisown one: it's 1 by default and + you can set it to 0 if you want to prevent freeing it. (For + example to prevent a double free.) + +2009-05-14: bhy + [Python] Fix the wrong pointer value returned by SwigPyObject_repr(). + +2009-05-13: mutandiz (Mikel Bancroft) + [allegrocl] Minor tweak when wrapping in -nocwrap mode. + +2009-05-11: wsfulton + [C#] Improved std::vector wrappers on the C# proxy side from Yuval Baror. These + implement IList<> instead of IEnumerable<> where possible. + +2009-04-29: wsfulton + [Java, C#] Add the 'notderived' attribute to the javabase and csbase typemaps. + When this attribute is set, the typemap will not apply to classes that are derived + from a C++ base class, eg + %typemap(csbase, notderived="1") SWIGTYPE "CommonBase" + +2009-04-29: olly + [Python] Don't attempt to acquire the GIL in situations where we + know that it will already be locked. This avoids some dead-locks + with mod_python (due to mod_python bugs which are apparently + unlikely to ever be fixed), and results in smaller wrappers which + run a little faster (in tests with Xapian on x86-64 Ubuntu 9.04, + the stripped wrapper library was 11% smaller and ran 2.7% faster). + +2009-04-21: wsfulton + [C#] Fix #2753469 - bool &OUTPUT and bool *OUTPUT typemaps initialisation. + +2009-04-09: wsfulton + Fix #2746858 - C macro expression using floating point numbers + +2009-03-30: olly + [PHP] The default out typemap for char[ANY] now returns the string up to a + zero byte, or the end of the array if there is no zero byte. This + is the same as Python does, and seems more generally useful than + the previous behaviour of returning the whole contents of the array + including any zero bytes. If you want the old behaviour, you can provide + your own typemap to do this: + + %typemap(out) char [ANY] + %{ + RETVAL_STRINGL($1, $1_dim0, 1); + %} + Version 1.3.39 (21 March 2009) ============================== Modified: branches/gsoc2009-matevz/CHANGES.current =================================================================== --- branches/gsoc2009-matevz/CHANGES.current 2010-07-19 18:10:40 UTC (rev 12161) +++ branches/gsoc2009-matevz/CHANGES.current 2010-07-20 21:58:41 UTC (rev 12162) @@ -1,64 +1,371 @@ -Version 1.3.40 (in progress) +Version 1.3.41 (in progress) ============================ -2009-05-26: wsfulton - [C#] Improved std::map wrappers based on patch from Yuval Baror. The C# proxy - now implements System.Collections.Generic.IDictionary<>. +2010-02-27: wsfulton + [Python] Remove -dirvtable from the optimizations included by -O as it this option + currently leads to memory leaks as reported by Johan Blake. - These std:map wrappers have a non-backwards compatible overhaul to make them - like a .NET IDictionary. Some method names have changed as following: - set -> setitem (use this[] property now) - get -> getitem (use this[] property now) - has_key -> ContainsKey - del -> Remove - clear -> Clear +2010-02-13: wsfulton + [Ruby] A few fixes for compiling under ruby-1.9.x including patch from 'Nibble'. - The following macros used for std::map wrappers are deprecated and will no longer work: - specialize_std_map_on_key - specialize_std_map_on_value - specialize_std_map_on_both +2010-02-13: wsfulton + [Ruby] Apply patch from Patrick Bennett to fix RARRAY_LEN and RARRAY_PTR usage for Ruby 1.9.x + used in various STL wrappers. +2010-02-13: wsfulton + [C#, Java] Fix incorrect multiply defined symbol name error when an enum item + and class name have the same name, as reported by Nathan Krieger. Example: + + class Vector {}; + namespace Text { + enum Preference { Vector }; + } + + This also fixes other incorrect corner case target language symbol name clashes. + +2010-02-11: wsfulton + Add the -debug-lsymbols option for displaying the target language layer symbols. + +2010-02-09: wsfulton + Fix -MM and -MMD options on Windows. They were not omitting files in the SWIG library as + they should be. + +2010-02-08: wsfulton + Fix #1807329 - When Makefile dependencies are being generated using the -M family of options + on Windows, the file paths have been corrected to use single backslashes rather than double + backslashes as path separators. + +2010-02-06: wsfulton + Fix #2918902 - language specific files not being generated in correct directory on + Windows when using forward slashes for -o, for example: + swig -python -c++ -o subdirectory/theinterface_wrap.cpp subdirectory/theinterface.i + +2010-02-05: wsfulton + Fix #2894405 - assertion when using -xmlout. + +2010-01-28: wsfulton + Fix typemap matching bug when a templated type has a typemap both specialized and not + specialized. For example: + + template<typename T> struct XX { ... }; + %typemap(in) const XX & "..." + %typemap(in) const XX< int > & "..." + + resulted in the 2nd typemap being applied for all T in XX< T >. + +2010-01-22: wsfulton + Fix #2933129 - typemaps not being found when the unary scope operator (::) is used to denote + global scope, the typemap is now used in situations like this: + + struct X {}; + %typemap(in) const X & "..." + void m(const ::X &); + + and this: + + struct X {}; + %typemap(in) const ::X & "..." + void m(const X &); + +2010-01-20: wsfulton + Fix some unary scope operator (::) denoting global scope problems in the types generated + into the C++ layer. Previously the unary scope operator was dropped in the generated code + if the type had any sort of qualifier, for example when using pointers, references, like + ::foo*, ::foo&, bar< ::foo* >. + +2010-01-13: olly + [PHP] Add datetime to the list of PHP predefined classes (patch + from David Fletcher in SF#2931042). + +2010-01-11: wsfulton + Slight change to warning, error and diagnostic reporting. The warning number is no + longer shown within brackets. This is to help default parsing of warning messages by + other tools, vim on Unix in particular. + + Example original display using -Fstandard: + example.i:20: Warning(401): Nothing known about base class 'B'. Ignored. + New display: + example.i:20: Warning 401: Nothing known about base class 'B'. Ignored. + + Also subtle fix to -Fmicrosoft format adding in missing space. Example original display: + example.i(20): Warning(401): Nothing known about base class 'Base'. Ignored. + New display: + example.i(20) : Warning 401: Nothing known about base class 'Base'. Ignored. + +2010-01-10: wsfulton + Fix a few inconsistencies in reporting of file/line numberings including modifying + the overload warnings 509, 512, 516, 474, 475 to now be two line warnings. + +2010-01-10: wsfulton + Modify -debug-tags output to use standard file name/line reporting so that editors + can easily navigate to the appropriate lines. + Was typically: + . top . include . include (/usr/share/swig/temp/trunk/Lib/swig.swg:312) + . top . include . include . include (/usr/share/swig/temp/trunk/Lib/swigwarnings.swg:39) + now: + /usr/share/swig/temp/trunk/Lib/swig.swg:312: . top . include . include + /usr/share/swig/temp/trunk/Lib/swigwarnings.swg:39: . top . include . include . include + +2010-01-03: wsfulton + Fix missing file/line numbers for typemap warnings and in output from the + -debug-tmsearch/-debug-tmused options. + +2010-01-03: wsfulton + Add typemaps used debugging option (-debug-tmused). When used each line displays + the typemap used for each type for which code is being generated including the file + and line number related to the type. This is effectively a condensed form of the + -debug-tmsearch option. Documented in Typemaps.html. + +2009-12-23: wsfulton + Fix for %javaexception and directors so that all the appropriate throws clauses + are generated. Problem reported by Peter Greenwood. + +2009-12-20: wsfulton + Add -debug-tmsearch option for debugging the typemap pattern matching rules. + Documented in Typemaps.html. + +2009-12-12: wsfulton + [Octave] Remove the -api option and use the new OCTAVE_API_VERSION_NUMBER + macro provided in the octave headers for determining the api version instead. + +2009-12-04: olly + [Ruby] Improve support for Ruby 1.9 under GCC. Addresses part of + SF#2859614. + +2009-12-04: olly + Fix handling of modulo operator (%) in constant expressions + (SF#2818562). + +2009-12-04: olly + [PHP] "empty" is a reserved word in PHP, so rename empty() method + on STL classes to "is_empty()" (previously this was automatically + renamed to "c_empty()"). + *** POTENTIAL INCOMPATIBILITY *** + +2009-12-03: olly + [PHP] Add typemaps for long long and unsigned long long, and for + pointer to method. + +2009-12-02: olly + [PHP] Fix warning and rename of reserved class name to be case + insensitive. + +2009-12-01: wsfulton + Revert support for %extend and memberin typemaps added in swig-1.3.39. The + memberin typemaps are ignored again for member variables within a %extend block. + Documentation inconsistency reported by Torsten Landschoff. + +2009-11-29: wsfulton + [Java, C#] Fix generated quoting when using %javaconst(1)/%csconst(1) for + static const char member variables. + + %javaconst(1) A; + %csconst(1) A; + struct X { + static const char A = 'A'; + }; + +2009-11-26: wsfulton + [Java, C#] Fix %javaconst(1)/%csconst(1) for static const member variables to + use the actual constant value if it is specified, rather than the C++ code to + access the member. + + %javaconst(1) EN; + %csconst(1) EN; + struct X { + static const int EN = 2; + }; + +2009-11-23: wsfulton + C++ nested typedef classes can now be handled too, for example: + struct Outer { + typedef Foo { } FooTypedef1, FooTypedef2; + }; + +2009-11-18: wsfulton + The wrappers for C nested structs are now generated in the same order as declared + in the parsed code. + +2009-11-18: wsfulton + Fix #491476 - multiple declarations of nested structs, for example: + struct Outer { + struct { + int val; + } inner1, inner2, *inner3, inner4[1]; + } outer; + +2009-11-17: wsfulton + Fix parsing of enum declaration and initialization, for example: + + enum ABC { + a, + b, + c + } A = a, *pC = &C, array[3] = {a, b, c}; + +2009-11-17: wsfulton + Fix parsing of struct declaration and initialization, for example: + + struct S { + int x; + } instance = { 10 }; + +2009-11-15: wsfulton + Fix #1960977 - Syntax error parsing derived nested class declaration and member + variable instance. + +2009-11-14: wsfulton + Fix #2310483 - function pointer typedef within extern "C" block. + +2009-11-13: wsfulton + Fix usage of nested template classes within templated classes so that compileable code + is generated. + +2009-11-13: olly + [php] Fix place where class prefix (as specified with -prefix) + wasn't being used. Patch from gverbruggen in SF#2892647. + +2009-11-12: wsfulton + Fix usage of nested template classes so that compileable code is generated - the nested + template class is now treated like a normal nested classes, that is, as an opaque type + unless the nestedworkaround feature is used. + +2009-11-12: wsfulton + Replace SWIGWARN_PARSE_NESTED_CLASS with SWIGWARN_PARSE_NAMED_NESTED_CLASS and + SWIGWARN_PARSE_UNNAMED_NESTED_CLASS for named and unnamed nested classes respectively. + + Named nested class ignored warnings can now be suppressed by name using %warnfilter, eg: + + %warnfilter(SWIGWARN_PARSE_NAMED_NESTED_CLASS) Outer::Inner; + + but clearly unnamed nested classes cannot and the global suppression is still required, eg: + + #pragma SWIG nowarn=SWIGWARN_PARSE_UNNAMED_NESTED_CLASS + +2009-11-11: wsfulton + Added the nestedworkaround feature as a way to use the full functionality of a nested class + (C++ mode only). It removes the nested class from SWIG's type information so it is as if SWIG + had never parsed the nested class. The documented nested class workarounds using a global + fake class stopped working when SWIG treated the nested class as an opaque pointer, and + this feature reverts this behaviour. The documentation has been updated with details of how + to use and implement it, see the "Nested classes" section in SWIGPlus.html. + +2009-11-11: wsfulton + There were a number of C++ cases where nested classes/structs/unions were being handled + as if C code was being parsed which would oftentimes lead to uncompileable code as an + attempt was made to wrap the nested structs like it is documented for C code. Now all + nested structs/classes/unions are ignored in C++ mode, as was always documented. However, + there is an improvement as usage of nested structs/classes/unions is now always treated + as an opaque type by default, resulting in generated code that should always compile. + *** POTENTIAL INCOMPATIBILITY *** -2009-05-14: bhy - [Python] Fix the wrong pointer value returned by SwigPyObject_repr(). +2009-11-09: drjoe + Fix R for -fcompact and add std_map.i -2009-05-13: mutandiz (Mikel Bancroft) - [allegrocl] Minor tweak when wrapping in -nocwrap mode. +2009-11-08: wsfulton + Fix inconsistency for nested structs/unions/classes. Uncompileable code was being + generated when inner struct and union declarations were used as types within the + inner struct. The inner struct/union is now treated as a forward declaration making the + behaviour the same as an inner class. (C++ code), eg: -2009-05-11: wsfulton - [C#] Improved std::vector wrappers on the C# proxy side from Yuval Baror. These - implement IList<> instead of IEnumerable<> where possible. + struct Outer { + struct InnerStruct { int x; }; + InnerStruct* getInnerStruct(); + }; -2009-04-29: wsfulton - [Java, C#] Add the 'notderived' attribute to the javabase and csbase typemaps. - When this attribute is set, the typemap will not apply to classes that are derived - from a C++ base class, eg - %typemap(csbase, notderived="1") SWIGTYPE "CommonBase" +2009-11-08: wsfulton + Ignored nested class/struct warnings now display the name of the ignored class/struct. -2009-04-29: olly - [Python] Don't attempt to acquire the GIL in situations where we - know that it will already be locked. This avoids some dead-locks - with mod_python (due to mod_python bugs which are apparently - unlikely to ever be fixed), and results in smaller wrappers which - run a little faster (in tests with Xapian on x86-64 Ubuntu 9.04, - the stripped wrapper library was 11% smaller and ran 2.7% faster). +2009-11-07: wsfulton + Bug #1514681 - Fix nested template classes within a namespace generated uncompileable + code and introduced strange side effects to other wrapper code especially code + after the nested template class. Note that nested template classes are still ignored. -2009-04-21: wsfulton - [C#] Fix #2753469 - bool &OUTPUT and bool *OUTPUT typemaps initialisation. +2009-11-07: wsfulton + Add new debug options: + -debug-symtabs - Display symbol tables information + -debug-symbols - Display target language symbols in the symbol tables + -debug-csymbols - Display C symbols in the symbol tables -2009-04-09: wsfulton - Fix #2746858 - C macro expression using floating point numbers +2009-11-03: wsfulton + Fix some usage of unary scope operator (::) denoting global scope, for example: -2009-03-30: olly - [PHP] The default out typemap for char[ANY] now returns the string up to a - zero byte, or the end of the array if there is no zero byte. This - is the same as Python does, and seems more generally useful than - the previous behaviour of returning the whole contents of the array - including any zero bytes. If you want the old behaviour, you can provide - your own typemap to do this: + namespace AA { /* ... */ } + using namespace ::AA; - %typemap(out) char [ANY] - %{ - RETVAL_STRINGL($1, $1_dim0, 1); - %} + and bug #1816802 - SwigValueWrapper should be used: + + struct CC { + CC(int); // no default constructor + }; + ::CC x(); + + and in template parameter specializations: + + struct S {}; + template <typename T> struct X { void a() {}; }; + template <> struct X<S> { void b() {}; }; + %template(MyTConcrete) X< ::S >; + + plus probably some other corner case usage of ::. + +2009-11-02: olly + [Python] Fix potential memory leak in initialisation code for the + generated module. + +2009-10-23: wsfulton + Fix seg fault when using a named nested template instantiation using %template(name) + within a class. A warning that these are not supported is now issued plus processing + continues as if no name was given. + +2009-10-20: wsfulton + [Python] Fix std::vector<const T*>. This would previously compile, but not run correctly. + +2009-10-20: wsfulton + Fixed previously fairly poor template partial specialization and explicit + specialization support. Numerous bugs in this area have been fixed including: + + - Template argument deduction implemented for template type arguments, eg this now + works: + template<typename T> class X {}; + template<typename T> class X<T *> {}; + %template(X1) X<const int *>; // Chooses T * specialization + + and more complex cases with multiple parameters and a mix of template argument + deduction and explicitly specialised parameters, eg: + template <typename T1, typename T2> struct TwoParm { void a() {} }; + template <typename T1> struct TwoParm<T1 *, int *> { void e() {} }; + %template(E) TwoParm<int **, int *>; + + Note that the primary template must now be in scope, like in C++, when + an explicit or partial specialization is instantiated with %template. + + *** POTENTIAL INCOMPATIBILITY *** + +2009-09-14: wsfulton + [C#] Add %csattributes for adding C# attributes to enum values, see docs for example. + +2009-09-11: wsfulton + Fix memmove regression in cdata.i as reported by Adriaan Renting. + +2009-09-07: wsfulton + Fix constant expressions containing <= or >=. + +2009-09-02: wsfulton + The following operators in constant expressions now result in type bool for C++ + wrappers and remain as type int for C wrappers, as per each standard: + + && || == != < > <= >= (Actually the last 4 are still broken). For example: + + #define A 10 + #define B 10 + #define A_EQ_B A == B // now wrapped as type bool for C++ + #define A_AND_B A && B // now wrapped as type bool for C++ + +2009-09-02: wsfulton + Fix #2845746. true and false are now recognised keywords (only when wrapping C++). + Constants such as the following are now wrapped (as type bool): + #define FOO true + #define BAR FOO && false + Modified: branches/gsoc2009-matevz/Doc/Devel/internals.html =================================================================== --- branches/gsoc2009-matevz/Doc/Devel/internals.html 2010-07-19 18:10:40 UTC (rev 12161) +++ branches/gsoc2009-matevz/Doc/Devel/internals.html 2010-07-20 21:58:41 UTC (rev 12162) @@ -1070,31 +1070,35 @@ <p> <li>String *s;</li> <br> -(String *)((DohBase *)s)->data +(struct String *)((DohBase *)s)->data <br> The underlying char * string can be displayed with <br> -((String *)((DohBase *)s)->data)->str +(*(struct String *)(((DohBase *)s)->data)).str <p> <li>SwigType *t;</li> <br> -(String *)((DohBase *)t)->data +(struct String *)((DohBase *)t)->data <br> The underlying char * string can be displayed with <br> -((String *)((DohBase *)t)->data)->str +(*(struct String *)(((DohBase *)t)->data)).str <p> -<li>String_or_char *sc;</li> +<li>const_String_or_char_ptr sc;</li> Either <br> -((String *)((DohBase *)sc)->data)->str +(*(struct String *)(((DohBase *)sc)->data)).str <br> or <br> (char *)sc <br> will work depending on whether the underlying type is really a String * or char *. </ul> +<p> +Please also read the Debugging Functions section in <a href="tree.html">SWIG Parse Tree Handling</a> for the <tt>Swig_print_node()</tt>, <tt>Swig_print_tree()</tt> and <tt>Swig_print_tags()</tt> functions for displaying node contents. It is often easier to place a few calls to these functions in code of interest and recompile than use the debugger. +</p> + <hr> Copyright (C) 1999-2004 SWIG Development Team. Modified: branches/gsoc2009-matevz/Doc/Devel/tree.html =================================================================== --- branches/gsoc2009-matevz/Doc/Devel/tree.html 2010-07-19 18:10:40 UTC (rev 12161) +++ branches/gsoc2009-matevz/Doc/Devel/tree.html 2010-07-20 21:58:41 UTC (rev 12162) @@ -218,10 +218,10 @@ <blockquote> Prints the tag-structure of the parse tree to standard output. <tt>node</tt> is the top-level parse tree... [truncated message content] |
From: <wsf...@us...> - 2010-07-20 23:35:55
|
Revision: 12164 http://swig.svn.sourceforge.net/swig/?rev=12164&view=rev Author: wsfulton Date: 2010-07-20 23:35:40 +0000 (Tue, 20 Jul 2010) Log Message: ----------- merge revisions 11877-12162 from trunk to gsoc2009-matevz Modified Paths: -------------- branches/gsoc2009-matevz/ANNOUNCE branches/gsoc2009-matevz/CCache/Makefile.in branches/gsoc2009-matevz/CHANGES branches/gsoc2009-matevz/CHANGES.current branches/gsoc2009-matevz/COPYRIGHT branches/gsoc2009-matevz/Doc/Devel/cmdopt.html branches/gsoc2009-matevz/Doc/Devel/engineering.html branches/gsoc2009-matevz/Doc/Devel/internals.html branches/gsoc2009-matevz/Doc/Devel/scanner.html branches/gsoc2009-matevz/Doc/Manual/Allegrocl.html branches/gsoc2009-matevz/Doc/Manual/Arguments.html branches/gsoc2009-matevz/Doc/Manual/CSharp.html branches/gsoc2009-matevz/Doc/Manual/Chicken.html branches/gsoc2009-matevz/Doc/Manual/Contents.html branches/gsoc2009-matevz/Doc/Manual/Customization.html branches/gsoc2009-matevz/Doc/Manual/Extending.html branches/gsoc2009-matevz/Doc/Manual/Guile.html branches/gsoc2009-matevz/Doc/Manual/Introduction.html branches/gsoc2009-matevz/Doc/Manual/Java.html branches/gsoc2009-matevz/Doc/Manual/Library.html branches/gsoc2009-matevz/Doc/Manual/Lisp.html branches/gsoc2009-matevz/Doc/Manual/Lua.html branches/gsoc2009-matevz/Doc/Manual/Makefile branches/gsoc2009-matevz/Doc/Manual/Modula3.html branches/gsoc2009-matevz/Doc/Manual/Modules.html branches/gsoc2009-matevz/Doc/Manual/Mzscheme.html branches/gsoc2009-matevz/Doc/Manual/Ocaml.html branches/gsoc2009-matevz/Doc/Manual/Octave.html branches/gsoc2009-matevz/Doc/Manual/Perl5.html branches/gsoc2009-matevz/Doc/Manual/Php.html branches/gsoc2009-matevz/Doc/Manual/Pike.html branches/gsoc2009-matevz/Doc/Manual/Preface.html branches/gsoc2009-matevz/Doc/Manual/Preprocessor.html branches/gsoc2009-matevz/Doc/Manual/Python.html branches/gsoc2009-matevz/Doc/Manual/R.html branches/gsoc2009-matevz/Doc/Manual/Ruby.html branches/gsoc2009-matevz/Doc/Manual/SWIG.html branches/gsoc2009-matevz/Doc/Manual/SWIGPlus.html branches/gsoc2009-matevz/Doc/Manual/Sections.html branches/gsoc2009-matevz/Doc/Manual/Tcl.html branches/gsoc2009-matevz/Doc/Manual/Typemaps.html branches/gsoc2009-matevz/Doc/Manual/Warnings.html branches/gsoc2009-matevz/Doc/Manual/Windows.html branches/gsoc2009-matevz/Doc/Manual/chapters branches/gsoc2009-matevz/Doc/Manual/index.html branches/gsoc2009-matevz/Examples/Makefile.in branches/gsoc2009-matevz/Examples/README branches/gsoc2009-matevz/Examples/guile/README branches/gsoc2009-matevz/Examples/index.html branches/gsoc2009-matevz/Examples/perl5/index.html branches/gsoc2009-matevz/Examples/php/disown/runme.php branches/gsoc2009-matevz/Examples/php/overloading/runme.php branches/gsoc2009-matevz/Examples/php/proxy/runme.php branches/gsoc2009-matevz/Examples/r/class/Makefile branches/gsoc2009-matevz/Examples/r/simple/Makefile branches/gsoc2009-matevz/Examples/s-exp/uffi.lisp branches/gsoc2009-matevz/Examples/test-suite/char_strings.i branches/gsoc2009-matevz/Examples/test-suite/common.mk branches/gsoc2009-matevz/Examples/test-suite/constant_expr.i branches/gsoc2009-matevz/Examples/test-suite/constant_pointers.i branches/gsoc2009-matevz/Examples/test-suite/cpp_enum.i branches/gsoc2009-matevz/Examples/test-suite/csharp/Makefile.in branches/gsoc2009-matevz/Examples/test-suite/csharp/char_strings_runme.cs branches/gsoc2009-matevz/Examples/test-suite/csharp_typemaps.i branches/gsoc2009-matevz/Examples/test-suite/director_enum.i branches/gsoc2009-matevz/Examples/test-suite/director_extend.i branches/gsoc2009-matevz/Examples/test-suite/director_finalizer.i branches/gsoc2009-matevz/Examples/test-suite/dynamic_cast.i branches/gsoc2009-matevz/Examples/test-suite/enum_thorough.i branches/gsoc2009-matevz/Examples/test-suite/enums.i branches/gsoc2009-matevz/Examples/test-suite/extend_template.i branches/gsoc2009-matevz/Examples/test-suite/global_namespace.i branches/gsoc2009-matevz/Examples/test-suite/global_scope_types.i branches/gsoc2009-matevz/Examples/test-suite/java/Makefile.in branches/gsoc2009-matevz/Examples/test-suite/java/char_strings_runme.java branches/gsoc2009-matevz/Examples/test-suite/java_enums.i branches/gsoc2009-matevz/Examples/test-suite/java_pgcpp.i branches/gsoc2009-matevz/Examples/test-suite/java_typemaps_typewrapper.i branches/gsoc2009-matevz/Examples/test-suite/keyword_rename.i branches/gsoc2009-matevz/Examples/test-suite/li_boost_intrusive_ptr.i branches/gsoc2009-matevz/Examples/test-suite/li_boost_shared_ptr.i branches/gsoc2009-matevz/Examples/test-suite/li_boost_shared_ptr_bits.i branches/gsoc2009-matevz/Examples/test-suite/li_std_combinations.i branches/gsoc2009-matevz/Examples/test-suite/li_std_map.i branches/gsoc2009-matevz/Examples/test-suite/li_std_vector.i branches/gsoc2009-matevz/Examples/test-suite/member_pointer.i branches/gsoc2009-matevz/Examples/test-suite/minherit.i branches/gsoc2009-matevz/Examples/test-suite/mixed_types.i branches/gsoc2009-matevz/Examples/test-suite/name_warnings.i branches/gsoc2009-matevz/Examples/test-suite/namespace_typemap.i branches/gsoc2009-matevz/Examples/test-suite/null_pointer.i branches/gsoc2009-matevz/Examples/test-suite/octave/Makefile.in branches/gsoc2009-matevz/Examples/test-suite/octave/enums_runme.m branches/gsoc2009-matevz/Examples/test-suite/operator_overload.i branches/gsoc2009-matevz/Examples/test-suite/overload_simple.i branches/gsoc2009-matevz/Examples/test-suite/php/Makefile.in branches/gsoc2009-matevz/Examples/test-suite/php/primitive_ref_runme.php branches/gsoc2009-matevz/Examples/test-suite/pointer_reference.i branches/gsoc2009-matevz/Examples/test-suite/preproc.i branches/gsoc2009-matevz/Examples/test-suite/python/enums_runme.py branches/gsoc2009-matevz/Examples/test-suite/python/li_boost_shared_ptr_bits_runme.py branches/gsoc2009-matevz/Examples/test-suite/python/member_pointer_runme.py branches/gsoc2009-matevz/Examples/test-suite/return_const_value.i branches/gsoc2009-matevz/Examples/test-suite/rname.i branches/gsoc2009-matevz/Examples/test-suite/smart_pointer_member.i branches/gsoc2009-matevz/Examples/test-suite/special_variable_macros.i branches/gsoc2009-matevz/Examples/test-suite/template_specialization_enum.i branches/gsoc2009-matevz/Examples/test-suite/typemap_global_scope.i branches/gsoc2009-matevz/Examples/test-suite/typemap_namespace.i branches/gsoc2009-matevz/Examples/test-suite/typemap_subst.i branches/gsoc2009-matevz/Examples/test-suite/union_parameter.i branches/gsoc2009-matevz/LICENSE-UNIVERSITIES branches/gsoc2009-matevz/Lib/allegrocl/allegrocl.swg branches/gsoc2009-matevz/Lib/cffi/cffi.swg branches/gsoc2009-matevz/Lib/chicken/chicken.swg branches/gsoc2009-matevz/Lib/chicken/std_string.i branches/gsoc2009-matevz/Lib/csharp/boost_shared_ptr.i branches/gsoc2009-matevz/Lib/csharp/csharp.swg branches/gsoc2009-matevz/Lib/csharp/csharphead.swg branches/gsoc2009-matevz/Lib/csharp/std_map.i branches/gsoc2009-matevz/Lib/csharp/std_vector.i branches/gsoc2009-matevz/Lib/guile/std_map.i branches/gsoc2009-matevz/Lib/guile/std_string.i branches/gsoc2009-matevz/Lib/guile/std_vector.i branches/gsoc2009-matevz/Lib/guile/typemaps.i branches/gsoc2009-matevz/Lib/intrusive_ptr.i branches/gsoc2009-matevz/Lib/java/boost_intrusive_ptr.i branches/gsoc2009-matevz/Lib/java/boost_shared_ptr.i branches/gsoc2009-matevz/Lib/java/java.swg branches/gsoc2009-matevz/Lib/java/std_map.i branches/gsoc2009-matevz/Lib/lua/lua.swg branches/gsoc2009-matevz/Lib/lua/luarun.swg branches/gsoc2009-matevz/Lib/lua/luatypemaps.swg branches/gsoc2009-matevz/Lib/lua/typemaps.i branches/gsoc2009-matevz/Lib/lua/wchar.i branches/gsoc2009-matevz/Lib/modula3/modula3.swg branches/gsoc2009-matevz/Lib/mzscheme/std_map.i branches/gsoc2009-matevz/Lib/mzscheme/typemaps.i branches/gsoc2009-matevz/Lib/ocaml/director.swg branches/gsoc2009-matevz/Lib/ocaml/ocamlkw.swg branches/gsoc2009-matevz/Lib/ocaml/std_map.i branches/gsoc2009-matevz/Lib/ocaml/typemaps.i branches/gsoc2009-matevz/Lib/octave/boost_shared_ptr.i branches/gsoc2009-matevz/Lib/octave/octrun.swg branches/gsoc2009-matevz/Lib/octave/std_basic_string.i branches/gsoc2009-matevz/Lib/octave/std_map.i branches/gsoc2009-matevz/Lib/perl5/perltypemaps.swg branches/gsoc2009-matevz/Lib/perl5/std_map.i branches/gsoc2009-matevz/Lib/php/director.swg branches/gsoc2009-matevz/Lib/php/globalvar.i branches/gsoc2009-matevz/Lib/php/php.swg branches/gsoc2009-matevz/Lib/php/phpinit.swg branches/gsoc2009-matevz/Lib/php/phprun.swg branches/gsoc2009-matevz/Lib/php/std_map.i branches/gsoc2009-matevz/Lib/php/std_string.i branches/gsoc2009-matevz/Lib/pike/pike.swg branches/gsoc2009-matevz/Lib/python/argcargv.i branches/gsoc2009-matevz/Lib/python/boost_shared_ptr.i branches/gsoc2009-matevz/Lib/python/director.swg branches/gsoc2009-matevz/Lib/python/pydocs.swg branches/gsoc2009-matevz/Lib/python/pyiterators.swg branches/gsoc2009-matevz/Lib/python/pytypemaps.swg branches/gsoc2009-matevz/Lib/r/r.swg branches/gsoc2009-matevz/Lib/r/rfragments.swg branches/gsoc2009-matevz/Lib/r/rtype.swg branches/gsoc2009-matevz/Lib/ruby/director.swg branches/gsoc2009-matevz/Lib/shared_ptr.i branches/gsoc2009-matevz/Lib/std/std_vector.i branches/gsoc2009-matevz/Lib/swig.swg branches/gsoc2009-matevz/Lib/swigrun.swg branches/gsoc2009-matevz/Lib/tcl/std_map.i branches/gsoc2009-matevz/Lib/tcl/tcltypemaps.swg branches/gsoc2009-matevz/Lib/typemaps/attribute.swg branches/gsoc2009-matevz/Lib/typemaps/cstrings.swg branches/gsoc2009-matevz/Lib/typemaps/fragments.swg branches/gsoc2009-matevz/Lib/typemaps/strings.swg branches/gsoc2009-matevz/Lib/typemaps/swigtype.swg branches/gsoc2009-matevz/Makefile.in branches/gsoc2009-matevz/README branches/gsoc2009-matevz/Source/CParse/cparse.h branches/gsoc2009-matevz/Source/CParse/parser.y branches/gsoc2009-matevz/Source/CParse/templ.c branches/gsoc2009-matevz/Source/DOH/base.c branches/gsoc2009-matevz/Source/Include/swigwarn.h branches/gsoc2009-matevz/Source/Makefile.am branches/gsoc2009-matevz/Source/Modules/allegrocl.cxx branches/gsoc2009-matevz/Source/Modules/chicken.cxx branches/gsoc2009-matevz/Source/Modules/csharp.cxx branches/gsoc2009-matevz/Source/Modules/emit.cxx branches/gsoc2009-matevz/Source/Modules/guile.cxx branches/gsoc2009-matevz/Source/Modules/java.cxx branches/gsoc2009-matevz/Source/Modules/lang.cxx branches/gsoc2009-matevz/Source/Modules/lua.cxx branches/gsoc2009-matevz/Source/Modules/main.cxx branches/gsoc2009-matevz/Source/Modules/modula3.cxx branches/gsoc2009-matevz/Source/Modules/mzscheme.cxx branches/gsoc2009-matevz/Source/Modules/ocaml.cxx branches/gsoc2009-matevz/Source/Modules/octave.cxx branches/gsoc2009-matevz/Source/Modules/overload.cxx branches/gsoc2009-matevz/Source/Modules/perl5.cxx branches/gsoc2009-matevz/Source/Modules/php.cxx branches/gsoc2009-matevz/Source/Modules/pike.cxx branches/gsoc2009-matevz/Source/Modules/python.cxx branches/gsoc2009-matevz/Source/Modules/r.cxx branches/gsoc2009-matevz/Source/Modules/ruby.cxx branches/gsoc2009-matevz/Source/Modules/swigmain.cxx branches/gsoc2009-matevz/Source/Modules/swigmod.h branches/gsoc2009-matevz/Source/Modules/tcl8.cxx branches/gsoc2009-matevz/Source/Modules/typepass.cxx branches/gsoc2009-matevz/Source/Preprocessor/cpp.c branches/gsoc2009-matevz/Source/Preprocessor/preprocessor.h branches/gsoc2009-matevz/Source/Swig/cwrap.c branches/gsoc2009-matevz/Source/Swig/misc.c branches/gsoc2009-matevz/Source/Swig/naming.c branches/gsoc2009-matevz/Source/Swig/scanner.c branches/gsoc2009-matevz/Source/Swig/stype.c branches/gsoc2009-matevz/Source/Swig/swig.h branches/gsoc2009-matevz/Source/Swig/swigfile.h branches/gsoc2009-matevz/Source/Swig/swigopt.h branches/gsoc2009-matevz/Source/Swig/swigparm.h branches/gsoc2009-matevz/Source/Swig/swigscan.h branches/gsoc2009-matevz/Source/Swig/swigtree.h branches/gsoc2009-matevz/Source/Swig/swigwrap.h branches/gsoc2009-matevz/Source/Swig/symbol.c branches/gsoc2009-matevz/Source/Swig/typemap.c branches/gsoc2009-matevz/Source/Swig/typeobj.c branches/gsoc2009-matevz/Source/Swig/typesys.c branches/gsoc2009-matevz/Tools/mkdist.py branches/gsoc2009-matevz/Tools/mkrelease.py branches/gsoc2009-matevz/Tools/mkwindows.sh branches/gsoc2009-matevz/configure.in branches/gsoc2009-matevz/swig.spec.in Added Paths: ----------- branches/gsoc2009-matevz/Doc/Manual/Go.html branches/gsoc2009-matevz/Examples/go/ branches/gsoc2009-matevz/Examples/go/callback/ branches/gsoc2009-matevz/Examples/go/callback/Makefile branches/gsoc2009-matevz/Examples/go/callback/example.cxx branches/gsoc2009-matevz/Examples/go/callback/example.go branches/gsoc2009-matevz/Examples/go/callback/example.h branches/gsoc2009-matevz/Examples/go/callback/example.i branches/gsoc2009-matevz/Examples/go/callback/index.html branches/gsoc2009-matevz/Examples/go/callback/runme.go branches/gsoc2009-matevz/Examples/go/check.list branches/gsoc2009-matevz/Examples/go/class/ branches/gsoc2009-matevz/Examples/go/class/Makefile branches/gsoc2009-matevz/Examples/go/class/example.cxx branches/gsoc2009-matevz/Examples/go/class/example.go branches/gsoc2009-matevz/Examples/go/class/example.h branches/gsoc2009-matevz/Examples/go/class/example.i branches/gsoc2009-matevz/Examples/go/class/index.html branches/gsoc2009-matevz/Examples/go/class/runme.go branches/gsoc2009-matevz/Examples/go/constants/ branches/gsoc2009-matevz/Examples/go/constants/Makefile branches/gsoc2009-matevz/Examples/go/constants/example.go branches/gsoc2009-matevz/Examples/go/constants/example.i branches/gsoc2009-matevz/Examples/go/constants/index.html branches/gsoc2009-matevz/Examples/go/constants/runme.go branches/gsoc2009-matevz/Examples/go/enum/ branches/gsoc2009-matevz/Examples/go/enum/Makefile branches/gsoc2009-matevz/Examples/go/enum/example.cxx branches/gsoc2009-matevz/Examples/go/enum/example.go branches/gsoc2009-matevz/Examples/go/enum/example.h branches/gsoc2009-matevz/Examples/go/enum/example.i branches/gsoc2009-matevz/Examples/go/enum/index.html branches/gsoc2009-matevz/Examples/go/enum/runme.go branches/gsoc2009-matevz/Examples/go/extend/ branches/gsoc2009-matevz/Examples/go/extend/Makefile branches/gsoc2009-matevz/Examples/go/extend/example.cxx branches/gsoc2009-matevz/Examples/go/extend/example.go branches/gsoc2009-matevz/Examples/go/extend/example.h branches/gsoc2009-matevz/Examples/go/extend/example.i branches/gsoc2009-matevz/Examples/go/extend/index.html branches/gsoc2009-matevz/Examples/go/extend/runme.go branches/gsoc2009-matevz/Examples/go/funcptr/ branches/gsoc2009-matevz/Examples/go/funcptr/Makefile branches/gsoc2009-matevz/Examples/go/funcptr/example.c branches/gsoc2009-matevz/Examples/go/funcptr/example.go branches/gsoc2009-matevz/Examples/go/funcptr/example.h branches/gsoc2009-matevz/Examples/go/funcptr/example.i branches/gsoc2009-matevz/Examples/go/funcptr/index.html branches/gsoc2009-matevz/Examples/go/funcptr/runme.go branches/gsoc2009-matevz/Examples/go/index.html branches/gsoc2009-matevz/Examples/go/multimap/ branches/gsoc2009-matevz/Examples/go/multimap/Makefile branches/gsoc2009-matevz/Examples/go/multimap/example.c branches/gsoc2009-matevz/Examples/go/multimap/example.go branches/gsoc2009-matevz/Examples/go/multimap/example.i branches/gsoc2009-matevz/Examples/go/multimap/runme.go branches/gsoc2009-matevz/Examples/go/pointer/ branches/gsoc2009-matevz/Examples/go/pointer/Makefile branches/gsoc2009-matevz/Examples/go/pointer/example.c branches/gsoc2009-matevz/Examples/go/pointer/example.go branches/gsoc2009-matevz/Examples/go/pointer/example.i branches/gsoc2009-matevz/Examples/go/pointer/index.html branches/gsoc2009-matevz/Examples/go/pointer/runme.go branches/gsoc2009-matevz/Examples/go/reference/ branches/gsoc2009-matevz/Examples/go/reference/Makefile branches/gsoc2009-matevz/Examples/go/reference/example.cxx branches/gsoc2009-matevz/Examples/go/reference/example.go branches/gsoc2009-matevz/Examples/go/reference/example.h branches/gsoc2009-matevz/Examples/go/reference/example.i branches/gsoc2009-matevz/Examples/go/reference/index.html branches/gsoc2009-matevz/Examples/go/reference/runme.go branches/gsoc2009-matevz/Examples/go/simple/ branches/gsoc2009-matevz/Examples/go/simple/Makefile branches/gsoc2009-matevz/Examples/go/simple/example.c branches/gsoc2009-matevz/Examples/go/simple/example.go branches/gsoc2009-matevz/Examples/go/simple/example.i branches/gsoc2009-matevz/Examples/go/simple/index.html branches/gsoc2009-matevz/Examples/go/simple/runme.go branches/gsoc2009-matevz/Examples/go/template/ branches/gsoc2009-matevz/Examples/go/template/Makefile branches/gsoc2009-matevz/Examples/go/template/example.go branches/gsoc2009-matevz/Examples/go/template/example.h branches/gsoc2009-matevz/Examples/go/template/example.i branches/gsoc2009-matevz/Examples/go/template/index.html branches/gsoc2009-matevz/Examples/go/template/runme.go branches/gsoc2009-matevz/Examples/go/variables/ branches/gsoc2009-matevz/Examples/go/variables/Makefile branches/gsoc2009-matevz/Examples/go/variables/example.c branches/gsoc2009-matevz/Examples/go/variables/example.go branches/gsoc2009-matevz/Examples/go/variables/example.h branches/gsoc2009-matevz/Examples/go/variables/example.i branches/gsoc2009-matevz/Examples/go/variables/index.html branches/gsoc2009-matevz/Examples/go/variables/runme.go branches/gsoc2009-matevz/Examples/test-suite/constructor_rename.i branches/gsoc2009-matevz/Examples/test-suite/csharp/li_boost_shared_ptr_bits_runme.cs branches/gsoc2009-matevz/Examples/test-suite/csharp/li_std_combinations_runme.cs branches/gsoc2009-matevz/Examples/test-suite/csharp/nspace_extend_runme.cs branches/gsoc2009-matevz/Examples/test-suite/csharp/nspace_runme.cs branches/gsoc2009-matevz/Examples/test-suite/enum_rename.i branches/gsoc2009-matevz/Examples/test-suite/expressions.i branches/gsoc2009-matevz/Examples/test-suite/funcptr_cpp.i branches/gsoc2009-matevz/Examples/test-suite/go/ branches/gsoc2009-matevz/Examples/test-suite/go/Makefile.in branches/gsoc2009-matevz/Examples/test-suite/go/abstract_access_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/abstract_typedef2_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/abstract_typedef_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/abstract_virtual_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/array_member_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/arrays_global_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/class_ignore_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/class_scope_weird_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/compactdefaultargs_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/constover_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/constructor_copy_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/contract_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/cpp_enum_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/cpp_namespace_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/cpp_static_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/default_args_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/default_constructor_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/director_abstract_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/director_basic_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/director_classic_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/director_default_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/director_detect_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/director_enum_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/director_exception_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/director_extend_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/director_finalizer_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/director_frob_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/director_nested_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/director_profile_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/director_protected_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/director_string_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/director_thread_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/director_unroll_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/disown_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/dynamic_cast_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/empty_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/enum_template_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/enums_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/exception_order_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/extend_placement_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/extend_template_ns_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/extend_template_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/extend_variable_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/extern_c_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/friends_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/fvirtual_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/global_ns_arg_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/grouping_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/import_nomodule_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/imports_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/inctest_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/inherit_missing_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/input_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/keyword_rename_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/li_attribute_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/li_carrays_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/li_cdata_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/li_cmalloc_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/li_cpointer_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/li_std_map_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/li_std_vector_ptr_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/member_pointer_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/memberin_extend_c_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/minherit_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/mod_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/multi_import_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/namespace_class_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/namespace_typemap_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/namespace_virtual_method_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/naturalvar_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/nested_workaround_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/overload_complicated_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/overload_copy_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/overload_extend_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/overload_extendc_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/overload_rename_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/overload_simple_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/overload_subtype_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/overload_template_fast_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/overload_template_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/preproc_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/primitive_ref_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/profiletest_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/refcount_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/reference_global_vars_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/rename_scope_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/rename_strip_encoder_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/ret_by_value_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/return_const_value_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/smart_pointer_extend_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/smart_pointer_member_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/smart_pointer_multi_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/smart_pointer_multi_typedef_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/smart_pointer_overload_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/smart_pointer_rename_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/smart_pointer_simple_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/smart_pointer_templatevariables_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/smart_pointer_typedef_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/sneaky1_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/special_variable_macros_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/static_const_member_2_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/struct_initialization_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/struct_rename_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/struct_value_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/template_default_arg_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/template_extend1_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/template_extend2_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/template_inherit_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/template_ns4_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/template_ns_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/template_opaque_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/template_ref_type_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/template_rename_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/template_static_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/template_tbase_template_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/template_type_namespace_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/template_typedef_cplx3_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/template_typedef_cplx4_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/template_typedef_import_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/threads_exception_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/typedef_class_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/typedef_inherit_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/typedef_scope_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/typemap_namespace_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/typemap_ns_using_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/typemap_out_optimal_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/typename_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/unions_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/using1_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/using2_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/using_composition_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/using_extend_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/using_inherit_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/using_private_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/using_protected_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/varargs_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/virtual_derivation_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/virtual_poly_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/voidtest_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/wrapmacro_runme.go branches/gsoc2009-matevz/Examples/test-suite/java/li_boost_shared_ptr_bits_runme.java branches/gsoc2009-matevz/Examples/test-suite/java/nspace_extend_runme.java branches/gsoc2009-matevz/Examples/test-suite/java/nspace_runme.java branches/gsoc2009-matevz/Examples/test-suite/lua/char_strings_runme.lua branches/gsoc2009-matevz/Examples/test-suite/nspace.i branches/gsoc2009-matevz/Examples/test-suite/nspace_extend.i branches/gsoc2009-matevz/Examples/test-suite/octave/octave_empty.c branches/gsoc2009-matevz/Examples/test-suite/php/exception_order_runme.php branches/gsoc2009-matevz/Examples/test-suite/php/threads_exception_runme.php branches/gsoc2009-matevz/Examples/test-suite/python/constructor_rename_runme.py branches/gsoc2009-matevz/Examples/test-suite/python/funcptr_cpp_runme.py branches/gsoc2009-matevz/Examples/test-suite/python/threads_exception_runme.py branches/gsoc2009-matevz/Examples/test-suite/python/typemap_delete_runme.py branches/gsoc2009-matevz/Examples/test-suite/python/typemap_qualifier_strip_runme.py branches/gsoc2009-matevz/Examples/test-suite/threads_exception.i branches/gsoc2009-matevz/Examples/test-suite/typemap_delete.i branches/gsoc2009-matevz/Examples/test-suite/typemap_qualifier_strip.i branches/gsoc2009-matevz/Lib/csharp/std_shared_ptr.i branches/gsoc2009-matevz/Lib/go/ branches/gsoc2009-matevz/Lib/go/cdata.i branches/gsoc2009-matevz/Lib/go/exception.i branches/gsoc2009-matevz/Lib/go/go.swg branches/gsoc2009-matevz/Lib/go/gokw.swg branches/gsoc2009-matevz/Lib/go/goruntime.swg branches/gsoc2009-matevz/Lib/go/std_common.i branches/gsoc2009-matevz/Lib/go/std_deque.i branches/gsoc2009-matevz/Lib/go/std_except.i branches/gsoc2009-matevz/Lib/go/std_map.i branches/gsoc2009-matevz/Lib/go/std_pair.i branches/gsoc2009-matevz/Lib/go/std_string.i branches/gsoc2009-matevz/Lib/go/std_vector.i branches/gsoc2009-matevz/Lib/go/stl.i branches/gsoc2009-matevz/Lib/go/typemaps.i branches/gsoc2009-matevz/Lib/java/std_shared_ptr.i branches/gsoc2009-matevz/Lib/python/std_shared_ptr.i branches/gsoc2009-matevz/RELEASENOTES branches/gsoc2009-matevz/Source/Modules/go.cxx Removed Paths: ------------- branches/gsoc2009-matevz/Examples/go/callback/ branches/gsoc2009-matevz/Examples/go/callback/Makefile branches/gsoc2009-matevz/Examples/go/callback/example.cxx branches/gsoc2009-matevz/Examples/go/callback/example.go branches/gsoc2009-matevz/Examples/go/callback/example.h branches/gsoc2009-matevz/Examples/go/callback/example.i branches/gsoc2009-matevz/Examples/go/callback/index.html branches/gsoc2009-matevz/Examples/go/callback/runme.go branches/gsoc2009-matevz/Examples/go/check.list branches/gsoc2009-matevz/Examples/go/class/ branches/gsoc2009-matevz/Examples/go/class/Makefile branches/gsoc2009-matevz/Examples/go/class/example.cxx branches/gsoc2009-matevz/Examples/go/class/example.go branches/gsoc2009-matevz/Examples/go/class/example.h branches/gsoc2009-matevz/Examples/go/class/example.i branches/gsoc2009-matevz/Examples/go/class/index.html branches/gsoc2009-matevz/Examples/go/class/runme.go branches/gsoc2009-matevz/Examples/go/constants/ branches/gsoc2009-matevz/Examples/go/constants/Makefile branches/gsoc2009-matevz/Examples/go/constants/example.go branches/gsoc2009-matevz/Examples/go/constants/example.i branches/gsoc2009-matevz/Examples/go/constants/index.html branches/gsoc2009-matevz/Examples/go/constants/runme.go branches/gsoc2009-matevz/Examples/go/enum/ branches/gsoc2009-matevz/Examples/go/enum/Makefile branches/gsoc2009-matevz/Examples/go/enum/example.cxx branches/gsoc2009-matevz/Examples/go/enum/example.go branches/gsoc2009-matevz/Examples/go/enum/example.h branches/gsoc2009-matevz/Examples/go/enum/example.i branches/gsoc2009-matevz/Examples/go/enum/index.html branches/gsoc2009-matevz/Examples/go/enum/runme.go branches/gsoc2009-matevz/Examples/go/extend/ branches/gsoc2009-matevz/Examples/go/extend/Makefile branches/gsoc2009-matevz/Examples/go/extend/example.cxx branches/gsoc2009-matevz/Examples/go/extend/example.go branches/gsoc2009-matevz/Examples/go/extend/example.h branches/gsoc2009-matevz/Examples/go/extend/example.i branches/gsoc2009-matevz/Examples/go/extend/index.html branches/gsoc2009-matevz/Examples/go/extend/runme.go branches/gsoc2009-matevz/Examples/go/funcptr/ branches/gsoc2009-matevz/Examples/go/funcptr/Makefile branches/gsoc2009-matevz/Examples/go/funcptr/example.c branches/gsoc2009-matevz/Examples/go/funcptr/example.go branches/gsoc2009-matevz/Examples/go/funcptr/example.h branches/gsoc2009-matevz/Examples/go/funcptr/example.i branches/gsoc2009-matevz/Examples/go/funcptr/index.html branches/gsoc2009-matevz/Examples/go/funcptr/runme.go branches/gsoc2009-matevz/Examples/go/index.html branches/gsoc2009-matevz/Examples/go/multimap/ branches/gsoc2009-matevz/Examples/go/multimap/Makefile branches/gsoc2009-matevz/Examples/go/multimap/example.c branches/gsoc2009-matevz/Examples/go/multimap/example.go branches/gsoc2009-matevz/Examples/go/multimap/example.i branches/gsoc2009-matevz/Examples/go/multimap/runme.go branches/gsoc2009-matevz/Examples/go/pointer/ branches/gsoc2009-matevz/Examples/go/pointer/Makefile branches/gsoc2009-matevz/Examples/go/pointer/example.c branches/gsoc2009-matevz/Examples/go/pointer/example.go branches/gsoc2009-matevz/Examples/go/pointer/example.i branches/gsoc2009-matevz/Examples/go/pointer/index.html branches/gsoc2009-matevz/Examples/go/pointer/runme.go branches/gsoc2009-matevz/Examples/go/reference/ branches/gsoc2009-matevz/Examples/go/reference/Makefile branches/gsoc2009-matevz/Examples/go/reference/example.cxx branches/gsoc2009-matevz/Examples/go/reference/example.go branches/gsoc2009-matevz/Examples/go/reference/example.h branches/gsoc2009-matevz/Examples/go/reference/example.i branches/gsoc2009-matevz/Examples/go/reference/index.html branches/gsoc2009-matevz/Examples/go/reference/runme.go branches/gsoc2009-matevz/Examples/go/simple/ branches/gsoc2009-matevz/Examples/go/simple/Makefile branches/gsoc2009-matevz/Examples/go/simple/example.c branches/gsoc2009-matevz/Examples/go/simple/example.go branches/gsoc2009-matevz/Examples/go/simple/example.i branches/gsoc2009-matevz/Examples/go/simple/index.html branches/gsoc2009-matevz/Examples/go/simple/runme.go branches/gsoc2009-matevz/Examples/go/template/ branches/gsoc2009-matevz/Examples/go/template/Makefile branches/gsoc2009-matevz/Examples/go/template/example.go branches/gsoc2009-matevz/Examples/go/template/example.h branches/gsoc2009-matevz/Examples/go/template/example.i branches/gsoc2009-matevz/Examples/go/template/index.html branches/gsoc2009-matevz/Examples/go/template/runme.go branches/gsoc2009-matevz/Examples/go/variables/ branches/gsoc2009-matevz/Examples/go/variables/Makefile branches/gsoc2009-matevz/Examples/go/variables/example.c branches/gsoc2009-matevz/Examples/go/variables/example.go branches/gsoc2009-matevz/Examples/go/variables/example.h branches/gsoc2009-matevz/Examples/go/variables/example.i branches/gsoc2009-matevz/Examples/go/variables/index.html branches/gsoc2009-matevz/Examples/go/variables/runme.go branches/gsoc2009-matevz/Examples/php/reference/runme-proxy.php4 branches/gsoc2009-matevz/Examples/php/variables/runme.php4.old branches/gsoc2009-matevz/Examples/python/weave/ branches/gsoc2009-matevz/Examples/test-suite/go/Makefile.in branches/gsoc2009-matevz/Examples/test-suite/go/abstract_access_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/abstract_typedef2_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/abstract_typedef_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/abstract_virtual_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/array_member_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/arrays_global_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/class_ignore_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/class_scope_weird_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/compactdefaultargs_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/constover_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/constructor_copy_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/contract_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/cpp_enum_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/cpp_namespace_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/cpp_static_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/default_args_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/default_constructor_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/director_abstract_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/director_basic_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/director_classic_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/director_default_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/director_detect_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/director_enum_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/director_exception_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/director_extend_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/director_finalizer_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/director_frob_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/director_nested_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/director_profile_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/director_protected_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/director_string_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/director_thread_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/director_unroll_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/disown_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/dynamic_cast_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/empty_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/enum_template_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/enums_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/exception_order_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/extend_placement_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/extend_template_ns_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/extend_template_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/extend_variable_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/extern_c_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/friends_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/fvirtual_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/global_ns_arg_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/grouping_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/import_nomodule_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/imports_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/inctest_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/inherit_missing_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/input_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/keyword_rename_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/li_attribute_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/li_carrays_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/li_cdata_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/li_cmalloc_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/li_cpointer_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/li_std_map_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/li_std_vector_ptr_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/member_pointer_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/memberin_extend_c_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/minherit_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/mod_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/multi_import_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/namespace_class_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/namespace_typemap_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/namespace_virtual_method_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/naturalvar_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/nested_workaround_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/overload_complicated_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/overload_copy_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/overload_extend_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/overload_extendc_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/overload_rename_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/overload_simple_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/overload_subtype_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/overload_template_fast_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/overload_template_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/preproc_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/primitive_ref_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/profiletest_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/refcount_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/reference_global_vars_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/rename_scope_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/rename_strip_encoder_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/ret_by_value_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/return_const_value_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/smart_pointer_extend_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/smart_pointer_member_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/smart_pointer_multi_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/smart_pointer_multi_typedef_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/smart_pointer_overload_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/smart_pointer_rename_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/smart_pointer_simple_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/smart_pointer_templatevariables_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/smart_pointer_typedef_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/sneaky1_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/special_variable_macros_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/static_const_member_2_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/struct_initialization_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/struct_rename_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/struct_value_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/template_default_arg_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/template_extend1_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/template_extend2_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/template_inherit_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/template_ns4_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/template_ns_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/template_opaque_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/template_ref_type_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/template_rename_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/template_static_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/template_tbase_template_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/template_type_namespace_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/template_typedef_cplx3_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/template_typedef_cplx4_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/template_typedef_import_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/threads_exception_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/typedef_class_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/typedef_inherit_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/typedef_scope_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/typemap_namespace_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/typemap_ns_using_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/typemap_out_optimal_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/typename_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/unions_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/using1_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/using2_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/using_composition_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/using_extend_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/using_inherit_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/using_private_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/using_protected_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/varargs_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/virtual_derivation_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/virtual_poly_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/voidtest_runme.go branches/gsoc2009-matevz/Examples/test-suite/go/wrapmacro_runme.go branches/gsoc2009-matevz/Examples/test-suite/octave/li_boost_shared_ptr_runme.m branches/gsoc2009-matevz/Examples/test-suite/octave/li_std_map_runme.m branches/gsoc2009-matevz/FUTURE branches/gsoc2009-matevz/Lib/go/cdata.i branches/gsoc2009-matevz/Lib/go/exception.i branches/gsoc2009-matevz/Lib/go/go.swg branches/gsoc2009-matevz/Lib/go/gokw.swg branches/gsoc2009-matevz/Lib/go/goruntime.swg branches/gsoc2009-matevz/Lib/go/std_common.i branches/gsoc2009-matevz/Lib/go/std_deque.i branches/gsoc2009-matevz/Lib/go/std_except.i branches/gsoc2009-matevz/Lib/go/std_map.i branches/gsoc2009-matevz/Lib/go/std_pair.i branches/gsoc2009-matevz/Lib/go/std_string.i branches/gsoc2009-matevz/Lib/go/std_vector.i branches/gsoc2009-matevz/Lib/go/stl.i branches/gsoc2009-matevz/Lib/go/typemaps.i branches/gsoc2009-matevz/Misc/ branches/gsoc2009-matevz/NEW branches/gsoc2009-matevz/Tools/WAD/ branches/gsoc2009-matevz/Tools/swig.spec.1 Property Changed: ---------------- branches/gsoc2009-matevz/ branches/gsoc2009-matevz/Examples/php/extend/ branches/gsoc2009-matevz/Examples/test-suite/cpp0x_template_double_brackets.i branches/gsoc2009-matevz/Examples/test-suite/csharp/special_variable_macros_runme.cs branches/gsoc2009-matevz/Examples/test-suite/java/special_variable_macros_runme.java branches/gsoc2009-matevz/Examples/test-suite/li_reference.i branches/gsoc2009-matevz/Examples/test-suite/perl5/li_reference_runme.pl branches/gsoc2009-matevz/Examples/test-suite/php/ branches/gsoc2009-matevz/Examples/test-suite/python/iadd_runme.py branches/gsoc2009-matevz/Examples/test-suite/python/overload_complicated_runme.py branches/gsoc2009-matevz/Examples/test-suite/python/special_variable_macros_runme.py branches/gsoc2009-matevz/Examples/test-suite/special_variable_macros.i branches/gsoc2009-matevz/LICENSE-GPL branches/gsoc2009-matevz/LICENSE-UNIVERSITIES Property changes on: branches/gsoc2009-matevz ___________________________________________________________________ Modified: svn:mergeinfo - /branches/swig-2.0:11085-11086,11088-11089 /trunk:11243-11876 + /branches/swig-2.0:11085-11086,11088-11089 /trunk:11243-12162 Modified: branches/gsoc2009-matevz/ANNOUNCE =================================================================== --- branches/gsoc2009-matevz/ANNOUNCE 2010-07-20 22:58:37 UTC (rev 12163) +++ branches/gsoc2009-matevz/ANNOUNCE 2010-07-20 23:35:40 UTC (rev 12164) @@ -1,14 +1,11 @@ -*** ANNOUNCE: SWIG 2.0.0 (in progress) *** +*** ANNOUNCE: SWIG 2.0.1 (in progress) *** http://www.swig.org +We're pleased to announce SWIG-2.0.1, the latest SWIG release. -We're pleased to announce SWIG-2.0.0, the latest installment in the -SWIG development effort. SWIG-2.0.0 includes a number of bug fixes -and enhancements. - What is SWIG? -------------- +============= SWIG is a software development tool that reads C/C++ header files and generates the wrapper code needed to make C and C++ code accessible @@ -20,17 +17,17 @@ prototyping, testing, and user interface development for large C/C++ systems. -Availability: -------------- +Availability +============ The release is available for download on Sourceforge at - http://prdownloads.sourceforge.net/swig/swig-2.0.0.tar.gz + http://prdownloads.sourceforge.net/swig/swig-2.0.1.tar.gz A Windows version is also available at - http://prdownloads.sourceforge.net/swig/swigwin-2.0.0.zip + http://prdownloads.sourceforge.net/swig/swigwin-2.0.1.zip -Please report problems with this release to the swig-dev mailing list, +Please report problems with this release to the swig-devel mailing list, details at http://www.swig.org/mail.html. --- The SWIG Developers Modified: branches/gsoc2009-matevz/CCache/Makefile.in =================================================================== --- branches/gsoc2009-matevz/CCache/Makefile.in 2010-07-20 22:58:37 UTC (rev 12163) +++ branches/gsoc2009-matevz/CCache/Makefile.in 2010-07-20 23:35:40 UTC (rev 12164) @@ -40,8 +40,11 @@ yodl2html -o web/ccache-man.html ccache.yo install: $(PACKAGE_NAME)$(EXEEXT) $(PACKAGE_NAME).1 + @echo "Installing $(PACKAGE_NAME)" + @echo "Installing $(DESTDIR)${bindir}/`echo $(PACKAGE_NAME) | sed '$(transform)'`$(EXEEXT)" ${INSTALLCMD} -d $(DESTDIR)${bindir} ${INSTALLCMD} -m 755 $(PACKAGE_NAME)$(EXEEXT) $(DESTDIR)${bindir}/`echo $(PACKAGE_NAME) | sed '$(transform)'`$(EXEEXT) + @echo "Installing $(DESTDIR)${mandir}/man1/`echo $(PACKAGE_NAME) | sed '$(transform)'`.1" ${INSTALLCMD} -d $(DESTDIR)${mandir}/man1 ${INSTALLCMD} -m 644 ${srcdir}/$(PACKAGE_NAME).1 $(DESTDIR)${mandir}/man1/`echo $(PACKAGE_NAME) | sed '$(transform)'`.1 @@ -52,9 +55,6 @@ clean: /bin/rm -f $(OBJS) *~ $(PACKAGE_NAME)$(EXEEXT) -distclean-docs: - rm -f $(PACKAGE_NAME).1 web/ccache-man.html - check : test test: test.sh @@ -62,11 +62,13 @@ check: test -distclean: clean distclean-docs - /bin/rm -f Makefile config.h config.sub config.log build-stamp config.status config.h.in ccache_swig_config.h +distclean: clean + /bin/rm -f Makefile config.h config.sub config.log build-stamp config.status ccache_swig_config.h + /bin/rm -rf autom4te.cache maintainer-clean: distclean - /bin/rm -f configure + /bin/rm -f $(PACKAGE_NAME).1 web/ccache-man.html + # FIXME: To fix this, test.sh needs to be able to take ccache from the # installed prefix, not from the source dir. Modified: branches/gsoc2009-matevz/CHANGES =================================================================== --- branches/gsoc2009-matevz/CHANGES 2010-07-20 22:58:37 UTC (rev 12163) +++ branches/gsoc2009-matevz/CHANGES 2010-07-20 23:35:40 UTC (rev 12164) @@ -1,7 +1,669 @@ SWIG (Simplified Wrapper and Interface Generator) -See CHANGES.current for current version. +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.0 (2 June 2010) +=========================== + +2010-06-02: wsfulton + [C#] Fix SWIG_STD_VECTOR_ENHANCED macro used in std::vector to work with + types containing commas, for example: + + SWIG_STD_VECTOR_ENHANCED(std::pair< double, std::string >) + +2010-06-01: wsfulton + Add in std_shared_ptr.i for wrapping std::shared_ptr. Requires the %shared_ptr + macro like in the boost_shared_ptr.i library. std::tr1::shared_ptr can also be + wrapped if the following macro is defined: + + #define SWIG_SHARED_PTR_SUBNAMESPACE tr1 + %include <std_shared_ptr.i> + + shared_ptr is also documented in Library.html now. + +2010-05-27: wsfulton + Add the ability for $typemap special variable macros to call other $typemap + special variable macros, for example: + + %typemap(cstype) CC "CC" + %typemap(cstype) BB "$typemap(cstype, CC)" + %typemap(cstype) AA "$typemap(cstype, BB)" + void hah(AA aa); + + This also fixes C# std::vector containers of shared_ptr and %shared_ptr. + + Also added diagnostics for $typemap with -debug-tmsearch, for example, the + above displays additional diagnostic lines starting "Containing: ": + + example.i:34: Searching for a suitable 'cstype' typemap for: AA aa + Looking for: AA aa + Looking for: AA + Using: %typemap(cstype) AA + Containing: $typemap(cstype, BB) + example.i:31: Searching for a suitable 'cstype' typemap for: BB + Looking for: BB + Using: %typemap(cstype) BB + Containing: $typemap(cstype, CC) + example.i:29: Searching for a suitable 'cstype' typemap for: CC + Looking for: CC + Using: %typemap(cstype) CC + +2010-05-26: olly + Fix %attribute2ref not to produce a syntax error if the last + argument (AccessorMethod) is omitted. Patch from David Piepgras + in SF#2235756. + +2010-05-26: olly + [PHP] When using %throws or %catches, SWIG-generated PHP5 wrappers + now throw PHP Exception objects instead of giving a PHP error of + type E_ERROR. + + This change shouldn't cause incompatibility issues, since you can't + set an error handler for E_ERROR, so previously PHP would just exit + which also happens for unhandled exceptions. The benefit is you can + now catch them if you want to. + + Fixes SF#2545578 and SF#2955522. + +2010-05-25: olly + [PHP] Add missing directorin typemap for const std::string &. + Fixes SF#3006404 reported by t-Legiaw. + +2010-05-23: wsfulton + [C#] Fix #2957375 - SWIGStringHelper and SWIGExceptionHelper not always being + initialized before use in .NET 4 as the classes were not marked beforefieldinit. + A static constructor has been added to the intermediary class like this: + + %pragma(csharp) imclasscode=%{ + static $imclassname() { + } + %} + + If you had added your own custom static constructor to the intermediary class in + the same way as above, you will have to modify your approach to use static variable + initialization or define SWIG_CSHARP_NO_IMCLASS_STATIC_CONSTRUCTOR - See csharphead.swg. + + *** POTENTIAL INCOMPATIBILITY *** + +2010-05-23: wsfulton + Fix #2408232. Improve shared_ptr and intrusive_ptr wrappers for classes in an + inheritance hierarchy. No special treatment is needed for derived classes. + The proxy class also no longer needs to be specified, it is automatically + deduced. The following macros are deprecated: + SWIG_SHARED_PTR(PROXYCLASS, TYPE) + SWIG_SHARED_PTR_DERIVED(PROXYCLASS, BASECLASSTYPE, TYPE) + and have been replaced by + %shared_ptr(TYPE) + Similarly for intrusive_ptr wrappers, the following macro is deprecated: + SWIG_INTRUSIVE_PTR(PROXYCLASS, TYPE) + SWIG_INTRUSIVE_PTR_DERIVED(PROXYCLASS, BASECLASSTYPE, TYPE) + and have been replaced by + %intrusive_ptr(TYPE) + +2010-05-21: olly + [PHP] Stop generating a bogus line of code in certain constructors. + This was mostly harmless, but caused a PHP notice to be issued, if + enabled (SF#2985684). + +2010-05-18: wsfulton + [Java] Fix member pointers on 64 bit platforms. + +2010-05-14: wsfulton + Fix wrapping of C++ enum boolean values reported by Torsten Landschoff: + typedef enum { PLAY = true, STOP = false } play_state; + +2010-05-14: olly + [PHP] Fix wrapping of global variables which was producing + uncompilable code in some cases. + +2010-05-12: drjoe + [R] Add two more changes from Wil Nolan. Get garbage + collection to work. Implement newfree + +2010-05-09: drjoe + Fix bug reported by Wil Nolan change creation of string so + that R 2.7.0+ can use char hashes + +2010-05-07: wsfulton + Apply patch #2955146 from Sergey Satskiy to fix expressions containing divide by + operator in constructor initialization lists. + +2010-05-05: wsfulton + [R] Memory leak fix handling const std::string & inputs, reported by Will Nolan. + +2010-05-01: wsfulton + Typemap matching enhancement for non-default typemaps. Previously all + qualifiers were stripped in one step, now they are stripped one at a time + starting with the left most qualifier. For example, int const*const + is first stripped to int *const then int *. + + *** POTENTIAL INCOMPATIBILITY *** + +2010-04-25: bhy + [Python] Fix #2985655 - broken constructor renaming. + +2010-04-14: wsfulton + Typemap fragments are now official and documented in Typemaps.html. + +2010-04-09: wsfulton + [Ruby] Fix #2048064 and #2408020. + Apply Ubuntu patch to fix Ruby and std::vector wrappers with -minherit. + https://bugs.launchpad.net/ubuntu/+source/swig1.3/+bug/522874 + +2010-04-09: wsfulton + ... [truncated message content] |
From: <wsf...@us...> - 2012-04-20 20:26:20
|
Revision: 13010 http://swig.svn.sourceforge.net/swig/?rev=13010&view=rev Author: wsfulton Date: 2012-04-20 20:26:13 +0000 (Fri, 20 Apr 2012) Log Message: ----------- Fix parsing of forward declaration of C++0x enums Modified Paths: -------------- branches/gsoc2009-matevz/Examples/test-suite/cpp0x_strongly_typed_enumerations.i branches/gsoc2009-matevz/Source/CParse/parser.y Modified: branches/gsoc2009-matevz/Examples/test-suite/cpp0x_strongly_typed_enumerations.i =================================================================== --- branches/gsoc2009-matevz/Examples/test-suite/cpp0x_strongly_typed_enumerations.i 2012-04-19 21:30:06 UTC (rev 13009) +++ branches/gsoc2009-matevz/Examples/test-suite/cpp0x_strongly_typed_enumerations.i 2012-04-20 20:26:13 UTC (rev 13010) @@ -7,6 +7,12 @@ %warnfilter(302) Val3; %warnfilter(302) Val4; +/* Forward declarations (illegally accepted by SWIG - oh well!) */ +enum Enum1 : short; +enum Enum3; +enum ; +enum : unsigned short; + %inline %{ enum class Enum1 { Val1, @@ -21,14 +27,17 @@ Val3 = 100, Val4 }; +%} -/* Forward declarations. GCC doesn't support them */ -//enum Enum3; // Illegal in C++ and C++0x; no size is explicitly specified. -//enum Enum4 : unsigned int; // Legal in C++0x. -//enum class Enum5; // Legal in C++0x, because enum class declarations have a default type of "int". -//enum class Enum6 : unsigned int; // Legal C++0x. -//enum Enum2 : unsigned short; // Illegal in C++0x, because Enum2 was previously declared with a different type. +// SWIG should fail this one +enum Enum2 : unsigned short; // Illegal in C++0x, because Enum2 was previously declared with a different type. +%inline %{ +/* Forward declarations. */ +enum Enum4 : unsigned int; // Legal in C++0x. +enum class Enum5; // Legal in C++0x, because enum class declarations have a default type of "int". +enum class Enum6 : unsigned int; // Legal C++0x. + enum Enum4 : unsigned int { Val1, Val2, Val3 = 100, Val4 }; Modified: branches/gsoc2009-matevz/Source/CParse/parser.y =================================================================== --- branches/gsoc2009-matevz/Source/CParse/parser.y 2012-04-19 21:30:06 UTC (rev 13009) +++ branches/gsoc2009-matevz/Source/CParse/parser.y 2012-04-20 20:26:13 UTC (rev 13010) @@ -3326,14 +3326,15 @@ ; /* ------------------------------------------------------------ enum [class] Name; + enum [class] Name [: base_type]; ------------------------------------------------------------ */ -c_enum_forward_decl : storage_class c_enum_keyword c_enum_inherit ID SEMI { +c_enum_forward_decl : storage_class c_enum_keyword ename c_enum_inherit SEMI { SwigType *ty = 0; $$ = new_node("enumforward"); - ty = NewStringf("enum %s", $4); + ty = NewStringf("enum %s", $3); Setattr($$,"enumkeyword",$2); - Setattr($$,"name",$4); + Setattr($$,"name",$3); Setattr($$,"type",ty); Setattr($$,"sym:weak", "1"); add_symbols($$); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-04-21 10:06:49
|
Revision: 13012 http://swig.svn.sourceforge.net/swig/?rev=13012&view=rev Author: wsfulton Date: 2012-04-21 10:06:43 +0000 (Sat, 21 Apr 2012) Log Message: ----------- Add support for c++11 strongly typed enums inheriting from non standard primitive types Modified Paths: -------------- branches/gsoc2009-matevz/Examples/test-suite/cpp0x_strongly_typed_enumerations.i branches/gsoc2009-matevz/Source/CParse/parser.y Modified: branches/gsoc2009-matevz/Examples/test-suite/cpp0x_strongly_typed_enumerations.i =================================================================== --- branches/gsoc2009-matevz/Examples/test-suite/cpp0x_strongly_typed_enumerations.i 2012-04-20 23:32:48 UTC (rev 13011) +++ branches/gsoc2009-matevz/Examples/test-suite/cpp0x_strongly_typed_enumerations.i 2012-04-21 10:06:43 UTC (rev 13012) @@ -49,4 +49,33 @@ enum class Enum6 : unsigned int { Val1, Val2, Val3 = 300, Val4 }; + +typedef enum class Enum7 : unsigned int { + Val1, Val2, Val3 = 300, Val4 +} Enum7td; + +// enum inherits from non-primitive type +enum class Enum8 : size_t { + Val1, Val2, Val3 = 300, Val4 +}; + +template <typename T> struct TType { + typedef T type_name; +}; + +enum class Enum10 : TType<int>::type_name { + Val1, Val2, Val3 = 300, Val4 +}; + +/* +TODO +enum class MyClass {AAA, BBB, CCC}; +namespace Space { +enum MyEnum {XXX, YYY, ZZZ}; +} +struct SSS { + MyClass m; +}; +*/ %} + Modified: branches/gsoc2009-matevz/Source/CParse/parser.y =================================================================== --- branches/gsoc2009-matevz/Source/CParse/parser.y 2012-04-20 23:32:48 UTC (rev 13011) +++ branches/gsoc2009-matevz/Source/CParse/parser.y 2012-04-21 10:06:43 UTC (rev 13012) @@ -3319,7 +3319,7 @@ base enum type (eg. unsigned short) ------------------------------------------------------------ */ -c_enum_inherit : COLON primitive_type { +c_enum_inherit : COLON type_right { $$ = $2; } | empty { $$ = 0; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-04-23 22:15:43
|
Revision: 13013 http://swig.svn.sourceforge.net/swig/?rev=13013&view=rev Author: wsfulton Date: 2012-04-23 22:15:37 +0000 (Mon, 23 Apr 2012) Log Message: ----------- Using C++11 enum classes with just a forward reference. Modified Paths: -------------- branches/gsoc2009-matevz/Examples/test-suite/cpp0x_strongly_typed_enumerations.i branches/gsoc2009-matevz/Lib/csharp/enums.swg branches/gsoc2009-matevz/Lib/csharp/enumsimple.swg branches/gsoc2009-matevz/Lib/csharp/enumtypesafe.swg branches/gsoc2009-matevz/Lib/php/php.swg Modified: branches/gsoc2009-matevz/Examples/test-suite/cpp0x_strongly_typed_enumerations.i =================================================================== --- branches/gsoc2009-matevz/Examples/test-suite/cpp0x_strongly_typed_enumerations.i 2012-04-21 10:06:43 UTC (rev 13012) +++ branches/gsoc2009-matevz/Examples/test-suite/cpp0x_strongly_typed_enumerations.i 2012-04-23 22:15:37 UTC (rev 13013) @@ -67,6 +67,12 @@ Val1, Val2, Val3 = 300, Val4 }; +// forward declaration, no definition of enum +enum class Enum11 : int; +struct UseEnum11 { + Enum11 myenum11; +}; + /* TODO enum class MyClass {AAA, BBB, CCC}; Modified: branches/gsoc2009-matevz/Lib/csharp/enums.swg =================================================================== --- branches/gsoc2009-matevz/Lib/csharp/enums.swg 2012-04-21 10:06:43 UTC (rev 13012) +++ branches/gsoc2009-matevz/Lib/csharp/enums.swg 2012-04-23 22:15:37 UTC (rev 13013) @@ -13,12 +13,12 @@ %typemap(in) const enum SWIGTYPE & ($*1_ltype temp) %{ temp = ($*1_ltype)$input; $1 = &temp; %} -%typemap(out) const enum SWIGTYPE & %{ $result = *$1; %} +%typemap(out) const enum SWIGTYPE & %{ $result = (int)*$1; %} %typemap(directorout,warning=SWIGWARN_TYPEMAP_THREAD_UNSAFE_MSG) const enum SWIGTYPE & %{ static $*1_ltype temp = ($*1_ltype)$input; $result = &temp; %} -%typemap(directorin) const enum SWIGTYPE & "$input = $1_name;" +%typemap(directorin) const enum SWIGTYPE & "$input = $1_name;" %typemap(csdirectorin) const enum SWIGTYPE & "($*csclassname)$iminput" %typemap(csdirectorout) const enum SWIGTYPE & "(int)$cscall" @@ -48,10 +48,10 @@ %typemap(cstype) enum SWIGTYPE "$csclassname" %typemap(in) enum SWIGTYPE %{ $1 = ($1_ltype)$input; %} -%typemap(out) enum SWIGTYPE %{ $result = $1; %} +%typemap(out) enum SWIGTYPE %{ $result = (int)$1; %} %typemap(directorout) enum SWIGTYPE %{ $result = ($1_ltype)$input; %} -%typemap(directorin) enum SWIGTYPE "$input = $1;" +%typemap(directorin) enum SWIGTYPE "$input = $1;" %typemap(csdirectorin) enum SWIGTYPE "($csclassname)$iminput" %typemap(csdirectorout) enum SWIGTYPE "(int)$cscall" Modified: branches/gsoc2009-matevz/Lib/csharp/enumsimple.swg =================================================================== --- branches/gsoc2009-matevz/Lib/csharp/enumsimple.swg 2012-04-21 10:06:43 UTC (rev 13012) +++ branches/gsoc2009-matevz/Lib/csharp/enumsimple.swg 2012-04-23 22:15:37 UTC (rev 13013) @@ -15,12 +15,12 @@ %typemap(in) const enum SWIGTYPE & ($*1_ltype temp) %{ temp = ($*1_ltype)$input; $1 = &temp; %} -%typemap(out) const enum SWIGTYPE & %{ $result = *$1; %} +%typemap(out) const enum SWIGTYPE & %{ $result = (int)*$1; %} %typemap(directorout,warning=SWIGWARN_TYPEMAP_THREAD_UNSAFE_MSG) const enum SWIGTYPE & %{ static $*1_ltype temp = ($*1_ltype)$input; $result = &temp; %} -%typemap(directorin) const enum SWIGTYPE & "$input = $1_name;" +%typemap(directorin) const enum SWIGTYPE & "$input = $1_name;" %typemap(csdirectorin) const enum SWIGTYPE & "$iminput" %typemap(csdirectorout) const enum SWIGTYPE & "$cscall" @@ -50,10 +50,10 @@ %typemap(cstype) enum SWIGTYPE "int" %typemap(in) enum SWIGTYPE %{ $1 = ($1_ltype)$input; %} -%typemap(out) enum SWIGTYPE %{ $result = $1; %} +%typemap(out) enum SWIGTYPE %{ $result = (int)$1; %} %typemap(directorout) enum SWIGTYPE %{ $result = ($1_ltype)$input; %} -%typemap(directorin) enum SWIGTYPE "$input = $1;" +%typemap(directorin) enum SWIGTYPE "$input = $1;" %typemap(csdirectorin) enum SWIGTYPE "$iminput" %typemap(csdirectorout) enum SWIGTYPE "$cscall" Modified: branches/gsoc2009-matevz/Lib/csharp/enumtypesafe.swg =================================================================== --- branches/gsoc2009-matevz/Lib/csharp/enumtypesafe.swg 2012-04-21 10:06:43 UTC (rev 13012) +++ branches/gsoc2009-matevz/Lib/csharp/enumtypesafe.swg 2012-04-23 22:15:37 UTC (rev 13013) @@ -14,12 +14,12 @@ %typemap(in) const enum SWIGTYPE & ($*1_ltype temp) %{ temp = ($*1_ltype)$input; $1 = &temp; %} -%typemap(out) const enum SWIGTYPE & %{ $result = *$1; %} +%typemap(out) const enum SWIGTYPE & %{ $result = (int)*$1; %} %typemap(directorout,warning=SWIGWARN_TYPEMAP_THREAD_UNSAFE_MSG) const enum SWIGTYPE & %{ static $*1_ltype temp = ($*1_ltype)$input; $result = &temp; %} -%typemap(directorin) const enum SWIGTYPE & "$input = $1_name;" +%typemap(directorin) const enum SWIGTYPE & "$input = $1_name;" %typemap(csdirectorin) const enum SWIGTYPE & "$*csclassname.swigToEnum($iminput)" %typemap(csdirectorout) const enum SWIGTYPE & "$cscall.swigValue" @@ -49,10 +49,10 @@ %typemap(cstype) enum SWIGTYPE "$csclassname" %typemap(in) enum SWIGTYPE %{ $1 = ($1_ltype)$input; %} -%typemap(out) enum SWIGTYPE %{ $result = $1; %} +%typemap(out) enum SWIGTYPE %{ $result = (int)$1; %} %typemap(directorout) enum SWIGTYPE %{ $result = ($1_ltype)$input; %} -%typemap(directorin) enum SWIGTYPE "$input = $1;" +%typemap(directorin) enum SWIGTYPE "$input = $1;" %typemap(csdirectorin) enum SWIGTYPE "$csclassname.swigToEnum($iminput)" %typemap(csdirectorout) enum SWIGTYPE "$cscall.swigValue" Modified: branches/gsoc2009-matevz/Lib/php/php.swg =================================================================== --- branches/gsoc2009-matevz/Lib/php/php.swg 2012-04-21 10:06:43 UTC (rev 13012) +++ branches/gsoc2009-matevz/Lib/php/php.swg 2012-04-23 22:15:37 UTC (rev 13013) @@ -189,12 +189,16 @@ signed char, unsigned char, bool, - size_t, - enum SWIGTYPE + size_t { ZVAL_LONG(return_value,$1); } +%typemap(out) enum SWIGTYPE +{ + ZVAL_LONG(return_value, (long)$1); +} + %typemap(out) long long %{ if ((long long)LONG_MIN <= $1 && $1 <= (long long)LONG_MAX) { @@ -227,12 +231,16 @@ const signed char &, const unsigned char &, const bool &, - const size_t &, - const enum SWIGTYPE & + const size_t & { ZVAL_LONG(return_value,*$1); } +%typemap(out) const enum SWIGTYPE & +{ + ZVAL_LONG(return_value, (long)*$1); +} + %typemap(out) const long long & %{ if ((long long)LONG_MIN <= *$1 && *$1 <= (long long)LONG_MAX) { @@ -270,6 +278,11 @@ ZVAL_LONG($input,$1_name); } +%typemap(directorin) enum SWIGTYPE +{ + ZVAL_LONG($input, (long)$1_name); +} + %typemap(out) bool { ZVAL_BOOL(return_value,($1)?1:0); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-09-20 19:09:44
|
Revision: 13842 http://swig.svn.sourceforge.net/swig/?rev=13842&view=rev Author: wsfulton Date: 2012-09-20 19:09:38 +0000 (Thu, 20 Sep 2012) Log Message: ----------- Improve nullptr constant wrapping Modified Paths: -------------- branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html branches/gsoc2009-matevz/Examples/test-suite/cpp0x_null_pointer_constant.i branches/gsoc2009-matevz/Source/Modules/octave.cxx branches/gsoc2009-matevz/Source/Modules/php.cxx branches/gsoc2009-matevz/Source/Modules/python.cxx branches/gsoc2009-matevz/Source/Modules/ruby.cxx Modified: branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html =================================================================== --- branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html 2012-09-20 18:17:52 UTC (rev 13841) +++ branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html 2012-09-20 19:09:38 UTC (rev 13842) @@ -282,8 +282,7 @@ <H3><a name="Cpp0x_Null_pointer_constant"></a>7.2.11 Null pointer constant</H3> -<p>SWIG correctly maps the std::nullptr constant to the null pointer -constant in the target language.</p> +<p>The <tt>nullptr</tt> constant is largely unimportant in wrappers. In the few places it has an effect, it is treated like <tt>NULL</tt>.</p> <H3><a name="Cpp0x_Strongly_typed_enumerations"></a>7.2.12 Strongly typed enumerations</H3> Modified: branches/gsoc2009-matevz/Examples/test-suite/cpp0x_null_pointer_constant.i =================================================================== --- branches/gsoc2009-matevz/Examples/test-suite/cpp0x_null_pointer_constant.i 2012-09-20 18:17:52 UTC (rev 13841) +++ branches/gsoc2009-matevz/Examples/test-suite/cpp0x_null_pointer_constant.i 2012-09-20 19:09:38 UTC (rev 13842) @@ -4,13 +4,19 @@ %module cpp0x_null_pointer_constant +%feature("autodoc") A::NullPtrMethod; // Triggers conversion of nullptr to None, nil etc in target language +%feature("compactdefaultargs") A::NullPtrMethod; + %inline %{ -#include <cstddef> +const int *const MyIntegerPtr = nullptr; + class A { public: - A() : _myA(std::nullptr) { } + A() : _myA(nullptr) { } A *_myA; + + void NullPtrMethod(double *ptr = nullptr) {} }; %} Modified: branches/gsoc2009-matevz/Source/Modules/octave.cxx =================================================================== --- branches/gsoc2009-matevz/Source/Modules/octave.cxx 2012-09-20 18:17:52 UTC (rev 13841) +++ branches/gsoc2009-matevz/Source/Modules/octave.cxx 2012-09-20 19:09:38 UTC (rev 13842) @@ -390,7 +390,7 @@ Append(decl_str, tex_name); if (value) { - if (Strcmp(value, "NULL") == 0) + if (Strcmp(value, "NULL") == 0 || Strcmp(value, "nullptr") == 0) value = NewString("nil"); else if (Strcmp(value, "true") == 0 || Strcmp(value, "TRUE") == 0) value = NewString("true"); Modified: branches/gsoc2009-matevz/Source/Modules/php.cxx =================================================================== --- branches/gsoc2009-matevz/Source/Modules/php.cxx 2012-09-20 18:17:52 UTC (rev 13841) +++ branches/gsoc2009-matevz/Source/Modules/php.cxx 2012-09-20 19:09:38 UTC (rev 13842) @@ -1345,6 +1345,7 @@ } } if (Strcmp(value, "NULL") == 0 || + Strcmp(value, "nullptr") == 0 || Strcmp(value, "0") == 0 || Strcmp(value, "0L") == 0) { Clear(value); Modified: branches/gsoc2009-matevz/Source/Modules/python.cxx =================================================================== --- branches/gsoc2009-matevz/Source/Modules/python.cxx 2012-09-20 18:17:52 UTC (rev 13841) +++ branches/gsoc2009-matevz/Source/Modules/python.cxx 2012-09-20 19:09:38 UTC (rev 13842) @@ -1444,7 +1444,7 @@ return NewString("True"); if (Strcmp(v, "false")==0 || Strcmp(v, "FALSE")==0) return NewString("False"); - if (Strcmp(v, "NULL")==0) + if (Strcmp(v, "NULL")==0 || Strcmp(v, "nullptr")==0) return NewString("None"); } return 0; Modified: branches/gsoc2009-matevz/Source/Modules/ruby.cxx =================================================================== --- branches/gsoc2009-matevz/Source/Modules/ruby.cxx 2012-09-20 18:17:52 UTC (rev 13841) +++ branches/gsoc2009-matevz/Source/Modules/ruby.cxx 2012-09-20 19:09:38 UTC (rev 13842) @@ -384,7 +384,7 @@ } if (value) { - if (Strcmp(value, "NULL") == 0) + if (Strcmp(value, "NULL") == 0 || Strcmp(value, "nullptr") == 0) value = NewString("nil"); else if (Strcmp(value, "true") == 0 || Strcmp(value, "TRUE") == 0) value = NewString("true"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-09-20 19:28:26
|
Revision: 13844 http://swig.svn.sourceforge.net/swig/?rev=13844&view=rev Author: wsfulton Date: 2012-09-20 19:28:20 +0000 (Thu, 20 Sep 2012) Log Message: ----------- Better clarify C++11 smart pointer support Modified Paths: -------------- branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html branches/gsoc2009-matevz/Examples/test-suite/common.mk Removed Paths: ------------- branches/gsoc2009-matevz/Examples/test-suite/cpp0x_smart_pointers.i Modified: branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html =================================================================== --- branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html 2012-09-20 19:14:27 UTC (rev 13843) +++ branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html 2012-09-20 19:28:20 UTC (rev 13844) @@ -590,7 +590,10 @@ <H3><a name="Cpp0x_General_purpose_smart_pointers"></a>7.3.4 General-purpose smart pointers</H3> -<p>SWIG does not wrap the new shared, weak and unique smart pointers, because the SWIG target languages offer their own garbage collectors.</p> +<p> +SWIG provides special smart pointer handling for <tt>std::tr1::shared_ptr</tt> in the same way it has support for <tt>boost::shared_ptr</tt>. +There is no special smart pointer handling available for <tt>std::weak_ptr</tt> and <tt>std::unique_ptr</tt>. +</p> <H3><a name="Cpp0x_Extensible_random_number_facility"></a>7.3.5 Extensible random number facility</H3> Modified: branches/gsoc2009-matevz/Examples/test-suite/common.mk =================================================================== --- branches/gsoc2009-matevz/Examples/test-suite/common.mk 2012-09-20 19:14:27 UTC (rev 13843) +++ branches/gsoc2009-matevz/Examples/test-suite/common.mk 2012-09-20 19:28:20 UTC (rev 13844) @@ -454,7 +454,6 @@ # cpp0x_constructors \ # not supported by any compiler yet # cpp0x_hash_tables \ # not fully implemented yet # cpp0x_lambda_functions \ # not supported by GCC or MSVC yet -# cpp0x_smart_pointers \ # not supported by standard library yet # cpp0x_template_typedefs \ # not supported by any compiler yet # cpp0x_thread_local \ # not supported by any compiler yet # cpp0x_unrestricted_unions \ # not supported by any compiler yet (now in gcc-4.6) Deleted: branches/gsoc2009-matevz/Examples/test-suite/cpp0x_smart_pointers.i =================================================================== --- branches/gsoc2009-matevz/Examples/test-suite/cpp0x_smart_pointers.i 2012-09-20 19:14:27 UTC (rev 13843) +++ branches/gsoc2009-matevz/Examples/test-suite/cpp0x_smart_pointers.i 2012-09-20 19:28:20 UTC (rev 13844) @@ -1,19 +0,0 @@ -/* This testcase checks whether SWIG correctly uses the new general-purpose - smart pointers introduced in C++0x: - - shared_ptr - - weak_ptr - - unique_ptr -*/ -%module cpp0x_smart_pointers - -%inline %{ -#include <tr1/shared_ptr.h> -#include <tr1/unique_ptr.h> -#include <tr1/weak_ptr.h> - -struct A { - std::shared_ptr<double> a1(new double); - std::unique_ptr<double> a2(new double); - std::weak_ptr<double> a3(a1); -}; -%} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-09-21 05:53:50
|
Revision: 13845 http://swig.svn.sourceforge.net/swig/?rev=13845&view=rev Author: wsfulton Date: 2012-09-21 05:53:44 +0000 (Fri, 21 Sep 2012) Log Message: ----------- Tidy up test and docs on template double brackets Modified Paths: -------------- branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html branches/gsoc2009-matevz/Examples/test-suite/cpp0x_template_double_brackets.i Modified: branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html =================================================================== --- branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html 2012-09-20 19:28:20 UTC (rev 13844) +++ branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html 2012-09-21 05:53:44 UTC (rev 13845) @@ -346,14 +346,6 @@ std::vector<std::vector<int>> myIntTable; </pre></div> -<p>The bit shifting operator using the parenthesis -around the expressions can be forced. For example</p> - -<div class="code"><pre> -template<(5>>3)> -class A {}; -</pre></div> - <H3><a name="Cpp0x_Explicit_conversion_operators"></a>7.2.14 Explicit conversion operators</H3> Modified: branches/gsoc2009-matevz/Examples/test-suite/cpp0x_template_double_brackets.i =================================================================== --- branches/gsoc2009-matevz/Examples/test-suite/cpp0x_template_double_brackets.i 2012-09-20 19:28:20 UTC (rev 13844) +++ branches/gsoc2009-matevz/Examples/test-suite/cpp0x_template_double_brackets.i 2012-09-21 05:53:44 UTC (rev 13845) @@ -5,14 +5,23 @@ %module cpp0x_template_double_brackets %inline %{ #include <map> -std::map<int,std::map<int, double>> m; -std::map< int,std::map<int, double> > n; +std::map<int,std::map<int, double>> map1; +std::map< int,std::map<int, double> > map2; +std::map<int,std::map<int, std::map<int, double>>> map3; +std::map<int,std::map<int, std::map<int, std::map<int, double>>>> map4; +%} + +// Check streaming operators are still okay +%rename(ExtractionOperator) operator>>; +%rename(InsertionOperator) operator<<; + +%inline %{ class ABC { public: int a; - int operator>>(ABC &); - int operator<<(ABC &); + int operator>>(ABC &) { return 0; } + int operator<<(ABC &) { return 0; } }; template<class T> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-09-21 18:04:22
|
Revision: 13847 http://swig.svn.sourceforge.net/swig/?rev=13847&view=rev Author: wsfulton Date: 2012-09-21 18:04:15 +0000 (Fri, 21 Sep 2012) Log Message: ----------- Some updates to c++11 warning messages and update docs on alias templates Modified Paths: -------------- branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html branches/gsoc2009-matevz/Examples/test-suite/common.mk branches/gsoc2009-matevz/Examples/test-suite/cpp0x_template_typedefs.i branches/gsoc2009-matevz/Source/CParse/parser.y Modified: branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html =================================================================== --- branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html 2012-09-21 06:37:30 UTC (rev 13846) +++ branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html 2012-09-21 18:04:15 UTC (rev 13847) @@ -27,7 +27,7 @@ <li><a href="#Cpp0x_Strongly_typed_enumerations">Strongly typed enumerations</a> <li><a href="#Cpp0x_Double_angle_brackets">Double angle brackets</a> <li><a href="#Cpp0x_Explicit_conversion_operators">Explicit conversion operators</a> -<li><a href="#Cpp0x_Template_typedefs">Template typedefs</a> +<li><a href="#Cpp0x_Alias_templates">Alias templates</a> <li><a href="#Cpp0x_Unrestricted_unions">Unrestricted unions</a> <li><a href="#Cpp0x_Variadic_templates">Variadic templates</a> <li><a href="#Cpp0x_New_string_literals">New string literals</a> @@ -382,18 +382,54 @@ to achieve particular copy and compare behaviours. </p> -<H3><a name="Cpp0x_Template_typedefs"></a>7.2.15 Template typedefs</H3> +<H3><a name="Cpp0x_Alias_templates"></a>7.2.15 Alias templates</H3> +<p> +The following is an example of an alias template: -<p>SWIG currently parses the new <tt>using name =</tt> syntax, but -ignores the definition:</p> +<div class="code"><pre> +template< typename T1, typename T2, int > +class SomeType { + T1 a; + T2 b; + int c; +}; +template< typename T2 > +using TypedefName = SomeType<char*, T2, 5>; +</pre></div> + +<p> +These are partially supported as SWIG will parse these and identify them, however, they are ignored as they are not added to the type system. A warning such as the following is issued: +</p> + +<div class="shell"> +<pre> +example.i:13: Warning 342: The 'using' keyword in template aliasing is not fully supported yet. +</pre> +</div> + +<p> +Similarly for non-template type aliasing: +</p> + <div class="code"><pre> using PFD = void (*)(double); // New introduced syntax </pre></div> -<p>You should still define the typedefs using the old syntax:</p> +<p> +A warning will be issued: +</p> +<div class="shell"> +<pre> +example.i:17: Warning 341: The 'using' keyword in type aliasing is not fully supported yet. +</pre> +</div> + + +<p>The equivalent old style typedefs can be used as a workaround:</p> + <div class="code"><pre> typedef void (*PFD)(double); // The old style </pre></div> Modified: branches/gsoc2009-matevz/Examples/test-suite/common.mk =================================================================== --- branches/gsoc2009-matevz/Examples/test-suite/common.mk 2012-09-21 06:37:30 UTC (rev 13846) +++ branches/gsoc2009-matevz/Examples/test-suite/common.mk 2012-09-21 18:04:15 UTC (rev 13847) @@ -454,7 +454,7 @@ # cpp0x_constructors \ # not supported by any compiler yet # cpp0x_hash_tables \ # not fully implemented yet # cpp0x_lambda_functions \ # not supported by GCC or MSVC yet -# cpp0x_template_typedefs \ # not supported by any compiler yet +# cpp0x_template_typedefs \ # not supported by any compiler yet (now in gcc-4.7) # cpp0x_thread_local \ # not supported by any compiler yet # cpp0x_unrestricted_unions \ # not supported by any compiler yet (now in gcc-4.6) Modified: branches/gsoc2009-matevz/Examples/test-suite/cpp0x_template_typedefs.i =================================================================== --- branches/gsoc2009-matevz/Examples/test-suite/cpp0x_template_typedefs.i 2012-09-21 06:37:30 UTC (rev 13846) +++ branches/gsoc2009-matevz/Examples/test-suite/cpp0x_template_typedefs.i 2012-09-21 18:04:15 UTC (rev 13847) @@ -1,4 +1,4 @@ -/* This testcase checks whether SWIG correctly parses the template aliasing. */ +/* This testcase checks whether SWIG correctly parses alias templates. */ %module cpp0x_template_typedefs %inline %{ @@ -12,6 +12,7 @@ template< typename T2 > using TypedefName = SomeType<char*, T2, 5>; +// type aliasing typedef void (*PFD)(double); // Old style using PF = void (*)(double); // New introduced syntax %} Modified: branches/gsoc2009-matevz/Source/CParse/parser.y =================================================================== --- branches/gsoc2009-matevz/Source/CParse/parser.y 2012-09-21 06:37:30 UTC (rev 13846) +++ branches/gsoc2009-matevz/Source/CParse/parser.y 2012-09-21 18:04:15 UTC (rev 13847) @@ -3098,9 +3098,9 @@ appendChild($$,firstChild($5)); } } - | c_lambda_decl { Swig_warning(WARN_CPP11_LAMBDA, cparse_file, cparse_line,"SWIG doesn't produce wrapper code for lambda expressions and closures yet.\n"); $$ = $1; } - | USING idcolon EQUAL { skip_decl(); Swig_warning(WARN_CPP11_ALIAS_DECLARATION, cparse_file, cparse_line,"SWIG doesn't support the 'using' keyword in type aliasing yet.\n"); $$ = 0; } - | TEMPLATE LESSTHAN template_parms GREATERTHAN USING idcolon EQUAL { skip_decl(); Swig_warning(WARN_CPP11_ALIAS_TEMPLATE, cparse_file, cparse_line,"SWIG doesn't support the 'using' keyword in template aliasing yet.\n"); $$ = 0; } + | c_lambda_decl { Swig_warning(WARN_CPP11_LAMBDA, cparse_file, cparse_line,"Lambda expressions and closures are not fully supported yet.\n"); $$ = $1; } + | USING idcolon EQUAL { skip_decl(); Swig_warning(WARN_CPP11_ALIAS_DECLARATION, cparse_file, cparse_line,"The 'using' keyword in type aliasing is not fully supported yet.\n"); $$ = 0; } + | TEMPLATE LESSTHAN template_parms GREATERTHAN USING idcolon EQUAL { skip_decl(); Swig_warning(WARN_CPP11_ALIAS_TEMPLATE, cparse_file, cparse_line,"The 'using' keyword in template aliasing is not fully supported yet.\n"); $$ = 0; } ; /* ------------------------------------------------------------ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-09-21 18:21:24
|
Revision: 13848 http://swig.svn.sourceforge.net/swig/?rev=13848&view=rev Author: wsfulton Date: 2012-09-21 18:21:15 +0000 (Fri, 21 Sep 2012) Log Message: ----------- Minor doc tweaks for unrestricted unions Modified Paths: -------------- branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html branches/gsoc2009-matevz/Examples/test-suite/common.mk Modified: branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html =================================================================== --- branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html 2012-09-21 18:04:15 UTC (rev 13847) +++ branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html 2012-09-21 18:21:15 UTC (rev 13848) @@ -438,7 +438,7 @@ <p>SWIG fully supports any type inside a union even if it does not -define the trivial constructor. For example, the wrapper for the following +define a trivial constructor. For example, the wrapper for the following code is correctly produced:</p> <div class="code"><pre> Modified: branches/gsoc2009-matevz/Examples/test-suite/common.mk =================================================================== --- branches/gsoc2009-matevz/Examples/test-suite/common.mk 2012-09-21 18:04:15 UTC (rev 13847) +++ branches/gsoc2009-matevz/Examples/test-suite/common.mk 2012-09-21 18:21:15 UTC (rev 13848) @@ -456,7 +456,7 @@ # cpp0x_lambda_functions \ # not supported by GCC or MSVC yet # cpp0x_template_typedefs \ # not supported by any compiler yet (now in gcc-4.7) # cpp0x_thread_local \ # not supported by any compiler yet -# cpp0x_unrestricted_unions \ # not supported by any compiler yet (now in gcc-4.6) +# cpp0x_unrestricted_unions \ # not supported by any compiler yet (now in gcc-4.6 but generates internal compiler error) # Broken C++0x test cases. CPP0X_TEST_BROKEN = This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-09-21 19:15:56
|
Revision: 13849 http://swig.svn.sourceforge.net/swig/?rev=13849&view=rev Author: wsfulton Date: 2012-09-21 19:15:44 +0000 (Fri, 21 Sep 2012) Log Message: ----------- Fix unrestricted unions testcase and add runtime example Modified Paths: -------------- branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html branches/gsoc2009-matevz/Examples/test-suite/common.mk branches/gsoc2009-matevz/Examples/test-suite/cpp0x_unrestricted_unions.i Added Paths: ----------- branches/gsoc2009-matevz/Examples/test-suite/python/cpp0x_unrestricted_unions_wrap.cxx Modified: branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html =================================================================== --- branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html 2012-09-21 18:21:15 UTC (rev 13848) +++ branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html 2012-09-21 19:15:44 UTC (rev 13849) @@ -439,19 +439,24 @@ <p>SWIG fully supports any type inside a union even if it does not define a trivial constructor. For example, the wrapper for the following -code is correctly produced:</p> +code correctly provides access to all members in the union:</p> <div class="code"><pre> struct point { point() {} - point(int x, int y): x_(x), y_(y) {} + point(int x, int y) : x_(x), y_(y) {} int x_, y_; }; +#include <new> // For placement 'new' in the constructor below union P { int z; double w; - point p; // Illegal in C++; point has a non-trivial constructor. However, this is legal in C++0x. + point p; // Illegal in C++03; legal in C++11. + // Due to the point member, a constructor definition is required. + P() { + new(&p) point(); + } } p1; </pre></div> Modified: branches/gsoc2009-matevz/Examples/test-suite/common.mk =================================================================== --- branches/gsoc2009-matevz/Examples/test-suite/common.mk 2012-09-21 18:21:15 UTC (rev 13848) +++ branches/gsoc2009-matevz/Examples/test-suite/common.mk 2012-09-21 19:15:44 UTC (rev 13849) @@ -448,6 +448,7 @@ cpp0x_template_double_brackets \ cpp0x_template_explicit \ cpp0x_uniform_initialization \ + cpp0x_unrestricted_unions \ cpp0x_userdefined_literals \ cpp0x_variadic_templates @@ -456,7 +457,6 @@ # cpp0x_lambda_functions \ # not supported by GCC or MSVC yet # cpp0x_template_typedefs \ # not supported by any compiler yet (now in gcc-4.7) # cpp0x_thread_local \ # not supported by any compiler yet -# cpp0x_unrestricted_unions \ # not supported by any compiler yet (now in gcc-4.6 but generates internal compiler error) # Broken C++0x test cases. CPP0X_TEST_BROKEN = Modified: branches/gsoc2009-matevz/Examples/test-suite/cpp0x_unrestricted_unions.i =================================================================== --- branches/gsoc2009-matevz/Examples/test-suite/cpp0x_unrestricted_unions.i 2012-09-21 18:21:15 UTC (rev 13848) +++ branches/gsoc2009-matevz/Examples/test-suite/cpp0x_unrestricted_unions.i 2012-09-21 19:15:44 UTC (rev 13849) @@ -9,10 +9,15 @@ int x_, y_; }; +#include <new> // For placement 'new' in the constructor below union P { int z; double w; - point p; + point p; // Illegal in C++03; legal in C++11. + // Due to the point member, a constructor definition is required. + P() { + new(&p) point(); + } } p1; %} Added: branches/gsoc2009-matevz/Examples/test-suite/python/cpp0x_unrestricted_unions_wrap.cxx =================================================================== --- branches/gsoc2009-matevz/Examples/test-suite/python/cpp0x_unrestricted_unions_wrap.cxx (rev 0) +++ branches/gsoc2009-matevz/Examples/test-suite/python/cpp0x_unrestricted_unions_wrap.cxx 2012-09-21 19:15:44 UTC (rev 13849) @@ -0,0 +1,4046 @@ +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.1 + * + * This file is not intended to be easily readable and contains a number of + * coding conventions designed to improve portability and efficiency. Do not make + * changes to this file unless you know what you are doing--modify the SWIG + * interface file instead. + * ----------------------------------------------------------------------------- */ + +#define SWIGPYTHON +#define SWIG_PYTHON_DIRECTOR_NO_VTABLE + + +#ifdef __cplusplus +/* SwigValueWrapper is described in swig.swg */ +template<typename T> class SwigValueWrapper { + struct SwigMovePointer { + T *ptr; + SwigMovePointer(T *p) : ptr(p) { } + ~SwigMovePointer() { delete ptr; } + SwigMovePointer& operator=(SwigMovePointer& rhs) { T* oldptr = ptr; ptr = 0; delete oldptr; ptr = rhs.ptr; rhs.ptr = 0; return *this; } + } pointer; + SwigValueWrapper& operator=(const SwigValueWrapper<T>& rhs); + SwigValueWrapper(const SwigValueWrapper<T>& rhs); +public: + SwigValueWrapper() : pointer(0) { } + SwigValueWrapper& operator=(const T& t) { SwigMovePointer tmp(new T(t)); pointer = tmp; return *this; } + operator T&() const { return *pointer.ptr; } + T *operator&() { return pointer.ptr; } +}; + +template <typename T> T SwigValueInit() { + return T(); +} +#endif + +/* ----------------------------------------------------------------------------- + * This section contains generic SWIG labels for method/variable + * declarations/attributes, and other compiler dependent labels. + * ----------------------------------------------------------------------------- */ + +/* template workaround for compilers that cannot correctly implement the C++ standard */ +#ifndef SWIGTEMPLATEDISAMBIGUATOR +# if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560) +# define SWIGTEMPLATEDISAMBIGUATOR template +# elif defined(__HP_aCC) +/* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */ +/* If we find a maximum version that requires this, the test would be __HP_aCC <= 35500 for A.03.55 */ +# define SWIGTEMPLATEDISAMBIGUATOR template +# else +# define SWIGTEMPLATEDISAMBIGUATOR +# endif +#endif + +/* inline attribute */ +#ifndef SWIGINLINE +# if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__)) +# define SWIGINLINE inline +# else +# define SWIGINLINE +# endif +#endif + +/* attribute recognised by some compilers to avoid 'unused' warnings */ +#ifndef SWIGUNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define SWIGUNUSED __attribute__ ((__unused__)) +# else +# define SWIGUNUSED +# endif +# elif defined(__ICC) +# define SWIGUNUSED __attribute__ ((__unused__)) +# else +# define SWIGUNUSED +# endif +#endif + +#ifndef SWIG_MSC_UNSUPPRESS_4505 +# if defined(_MSC_VER) +# pragma warning(disable : 4505) /* unreferenced local function has been removed */ +# endif +#endif + +#ifndef SWIGUNUSEDPARM +# ifdef __cplusplus +# define SWIGUNUSEDPARM(p) +# else +# define SWIGUNUSEDPARM(p) p SWIGUNUSED +# endif +#endif + +/* internal SWIG method */ +#ifndef SWIGINTERN +# define SWIGINTERN static SWIGUNUSED +#endif + +/* internal inline SWIG method */ +#ifndef SWIGINTERNINLINE +# define SWIGINTERNINLINE SWIGINTERN SWIGINLINE +#endif + +/* exporting methods */ +#if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) +# ifndef GCC_HASCLASSVISIBILITY +# define GCC_HASCLASSVISIBILITY +# endif +#endif + +#ifndef SWIGEXPORT +# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) +# if defined(STATIC_LINKED) +# define SWIGEXPORT +# else +# define SWIGEXPORT __declspec(dllexport) +# endif +# else +# if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY) +# define SWIGEXPORT __attribute__ ((visibility("default"))) +# else +# define SWIGEXPORT +# endif +# endif +#endif + +/* calling conventions for Windows */ +#ifndef SWIGSTDCALL +# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) +# define SWIGSTDCALL __stdcall +# else +# define SWIGSTDCALL +# endif +#endif + +/* Deal with Microsoft's attempt at deprecating C standard runtime functions */ +#if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) +# define _CRT_SECURE_NO_DEPRECATE +#endif + +/* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */ +#if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE) +# define _SCL_SECURE_NO_DEPRECATE +#endif + + + +/* Python.h has to appear first */ +#include <Python.h> + +/* ----------------------------------------------------------------------------- + * swigrun.swg + * + * This file contains generic C API SWIG runtime support for pointer + * type checking. + * ----------------------------------------------------------------------------- */ + +/* This should only be incremented when either the layout of swig_type_info changes, + or for whatever reason, the runtime changes incompatibly */ +#define SWIG_RUNTIME_VERSION "4" + +/* define SWIG_TYPE_TABLE_NAME as "SWIG_TYPE_TABLE" */ +#ifdef SWIG_TYPE_TABLE +# define SWIG_QUOTE_STRING(x) #x +# define SWIG_EXPAND_AND_QUOTE_STRING(x) SWIG_QUOTE_STRING(x) +# define SWIG_TYPE_TABLE_NAME SWIG_EXPAND_AND_QUOTE_STRING(SWIG_TYPE_TABLE) +#else +# define SWIG_TYPE_TABLE_NAME +#endif + +/* + You can use the SWIGRUNTIME and SWIGRUNTIMEINLINE macros for + creating a static or dynamic library from the SWIG runtime code. + In 99.9% of the cases, SWIG just needs to declare them as 'static'. + + But only do this if strictly necessary, ie, if you have problems + with your compiler or suchlike. +*/ + +#ifndef SWIGRUNTIME +# define SWIGRUNTIME SWIGINTERN +#endif + +#ifndef SWIGRUNTIMEINLINE +# define SWIGRUNTIMEINLINE SWIGRUNTIME SWIGINLINE +#endif + +/* Generic buffer size */ +#ifndef SWIG_BUFFER_SIZE +# define SWIG_BUFFER_SIZE 1024 +#endif + +/* Flags for pointer conversions */ +#define SWIG_POINTER_DISOWN 0x1 +#define SWIG_CAST_NEW_MEMORY 0x2 + +/* Flags for new pointer objects */ +#define SWIG_POINTER_OWN 0x1 + + +/* + Flags/methods for returning states. + + The SWIG conversion methods, as ConvertPtr, return an integer + that tells if the conversion was successful or not. And if not, + an error code can be returned (see swigerrors.swg for the codes). + + Use the following macros/flags to set or process the returning + states. + + In old versions of SWIG, code such as the following was usually written: + + if (SWIG_ConvertPtr(obj,vptr,ty.flags) != -1) { + // success code + } else { + //fail code + } + + Now you can be more explicit: + + int res = SWIG_ConvertPtr(obj,vptr,ty.flags); + if (SWIG_IsOK(res)) { + // success code + } else { + // fail code + } + + which is the same really, but now you can also do + + Type *ptr; + int res = SWIG_ConvertPtr(obj,(void **)(&ptr),ty.flags); + if (SWIG_IsOK(res)) { + // success code + if (SWIG_IsNewObj(res) { + ... + delete *ptr; + } else { + ... + } + } else { + // fail code + } + + I.e., now SWIG_ConvertPtr can return new objects and you can + identify the case and take care of the deallocation. Of course that + also requires SWIG_ConvertPtr to return new result values, such as + + int SWIG_ConvertPtr(obj, ptr,...) { + if (<obj is ok>) { + if (<need new object>) { + *ptr = <ptr to new allocated object>; + return SWIG_NEWOBJ; + } else { + *ptr = <ptr to old object>; + return SWIG_OLDOBJ; + } + } else { + return SWIG_BADOBJ; + } + } + + Of course, returning the plain '0(success)/-1(fail)' still works, but you can be + more explicit by returning SWIG_BADOBJ, SWIG_ERROR or any of the + SWIG errors code. + + Finally, if the SWIG_CASTRANK_MODE is enabled, the result code + allows to return the 'cast rank', for example, if you have this + + int food(double) + int fooi(int); + + and you call + + food(1) // cast rank '1' (1 -> 1.0) + fooi(1) // cast rank '0' + + just use the SWIG_AddCast()/SWIG_CheckState() +*/ + +#define SWIG_OK (0) +#define SWIG_ERROR (-1) +#define SWIG_IsOK(r) (r >= 0) +#define SWIG_ArgError(r) ((r != SWIG_ERROR) ? r : SWIG_TypeError) + +/* The CastRankLimit says how many bits are used for the cast rank */ +#define SWIG_CASTRANKLIMIT (1 << 8) +/* The NewMask denotes the object was created (using new/malloc) */ +#define SWIG_NEWOBJMASK (SWIG_CASTRANKLIMIT << 1) +/* The TmpMask is for in/out typemaps that use temporal objects */ +#define SWIG_TMPOBJMASK (SWIG_NEWOBJMASK << 1) +/* Simple returning values */ +#define SWIG_BADOBJ (SWIG_ERROR) +#define SWIG_OLDOBJ (SWIG_OK) +#define SWIG_NEWOBJ (SWIG_OK | SWIG_NEWOBJMASK) +#define SWIG_TMPOBJ (SWIG_OK | SWIG_TMPOBJMASK) +/* Check, add and del mask methods */ +#define SWIG_AddNewMask(r) (SWIG_IsOK(r) ? (r | SWIG_NEWOBJMASK) : r) +#define SWIG_DelNewMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_NEWOBJMASK) : r) +#define SWIG_IsNewObj(r) (SWIG_IsOK(r) && (r & SWIG_NEWOBJMASK)) +#define SWIG_AddTmpMask(r) (SWIG_IsOK(r) ? (r | SWIG_TMPOBJMASK) : r) +#define SWIG_DelTmpMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_TMPOBJMASK) : r) +#define SWIG_IsTmpObj(r) (SWIG_IsOK(r) && (r & SWIG_TMPOBJMASK)) + +/* Cast-Rank Mode */ +#if defined(SWIG_CASTRANK_MODE) +# ifndef SWIG_TypeRank +# define SWIG_TypeRank unsigned long +# endif +# ifndef SWIG_MAXCASTRANK /* Default cast allowed */ +# define SWIG_MAXCASTRANK (2) +# endif +# define SWIG_CASTRANKMASK ((SWIG_CASTRANKLIMIT) -1) +# define SWIG_CastRank(r) (r & SWIG_CASTRANKMASK) +SWIGINTERNINLINE int SWIG_AddCast(int r) { + return SWIG_IsOK(r) ? ((SWIG_CastRank(r) < SWIG_MAXCASTRANK) ? (r + 1) : SWIG_ERROR) : r; +} +SWIGINTERNINLINE int SWIG_CheckState(int r) { + return SWIG_IsOK(r) ? SWIG_CastRank(r) + 1 : 0; +} +#else /* no cast-rank mode */ +# define SWIG_AddCast +# define SWIG_CheckState(r) (SWIG_IsOK(r) ? 1 : 0) +#endif + + +#include <string.h> + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void *(*swig_converter_func)(void *, int *); +typedef struct swig_type_info *(*swig_dycast_func)(void **); + +/* Structure to store information on one type */ +typedef struct swig_type_info { + const char *name; /* mangled name of this type */ + const char *str; /* human readable name of this type */ + swig_dycast_func dcast; /* dynamic cast function down a hierarchy */ + struct swig_cast_info *cast; /* linked list of types that can cast into this type */ + void *clientdata; /* language specific type data */ + int owndata; /* flag if the structure owns the clientdata */ +} swig_type_info; + +/* Structure to store a type and conversion function used for casting */ +typedef struct swig_cast_info { + swig_type_info *type; /* pointer to type that is equivalent to this type */ + swig_converter_func converter; /* function to cast the void pointers */ + struct swig_cast_info *next; /* pointer to next cast in linked list */ + struct swig_cast_info *prev; /* pointer to the previous cast */ +} swig_cast_info; + +/* Structure used to store module information + * Each module generates one structure like this, and the runtime collects + * all of these structures and stores them in a circularly linked list.*/ +typedef struct swig_module_info { + swig_type_info **types; /* Array of pointers to swig_type_info structures that are in this module */ + size_t size; /* Number of types in this module */ + struct swig_module_info *next; /* Pointer to next element in circularly linked list */ + swig_type_info **type_initial; /* Array of initially generated type structures */ + swig_cast_info **cast_initial; /* Array of initially generated casting structures */ + void *clientdata; /* Language specific module data */ +} swig_module_info; + +/* + Compare two type names skipping the space characters, therefore + "char*" == "char *" and "Class<int>" == "Class<int >", etc. + + Return 0 when the two name types are equivalent, as in + strncmp, but skipping ' '. +*/ +SWIGRUNTIME int +SWIG_TypeNameComp(const char *f1, const char *l1, + const char *f2, const char *l2) { + for (;(f1 != l1) && (f2 != l2); ++f1, ++f2) { + while ((*f1 == ' ') && (f1 != l1)) ++f1; + while ((*f2 == ' ') && (f2 != l2)) ++f2; + if (*f1 != *f2) return (*f1 > *f2) ? 1 : -1; + } + return (int)((l1 - f1) - (l2 - f2)); +} + +/* + Check type equivalence in a name list like <name1>|<name2>|... + Return 0 if not equal, 1 if equal +*/ +SWIGRUNTIME int +SWIG_TypeEquiv(const char *nb, const char *tb) { + int equiv = 0; + const char* te = tb + strlen(tb); + const char* ne = nb; + while (!equiv && *ne) { + for (nb = ne; *ne; ++ne) { + if (*ne == '|') break; + } + equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0; + if (*ne) ++ne; + } + return equiv; +} + +/* + Check type equivalence in a name list like <name1>|<name2>|... + Return 0 if equal, -1 if nb < tb, 1 if nb > tb +*/ +SWIGRUNTIME int +SWIG_TypeCompare(const char *nb, const char *tb) { + int equiv = 0; + const char* te = tb + strlen(tb); + const char* ne = nb; + while (!equiv && *ne) { + for (nb = ne; *ne; ++ne) { + if (*ne == '|') break; + } + equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0; + if (*ne) ++ne; + } + return equiv; +} + + +/* + Check the typename +*/ +SWIGRUNTIME swig_cast_info * +SWIG_TypeCheck(const char *c, swig_type_info *ty) { + if (ty) { + swig_cast_info *iter = ty->cast; + while (iter) { + if (strcmp(iter->type->name, c) == 0) { + if (iter == ty->cast) + return iter; + /* Move iter to the top of the linked list */ + iter->prev->next = iter->next; + if (iter->next) + iter->next->prev = iter->prev; + iter->next = ty->cast; + iter->prev = 0; + if (ty->cast) ty->cast->prev = iter; + ty->cast = iter; + return iter; + } + iter = iter->next; + } + } + return 0; +} + +/* + Identical to SWIG_TypeCheck, except strcmp is replaced with a pointer comparison +*/ +SWIGRUNTIME swig_cast_info * +SWIG_TypeCheckStruct(swig_type_info *from, swig_type_info *ty) { + if (ty) { + swig_cast_info *iter = ty->cast; + while (iter) { + if (iter->type == from) { + if (iter == ty->cast) + return iter; + /* Move iter to the top of the linked list */ + iter->prev->next = iter->next; + if (iter->next) + iter->next->prev = iter->prev; + iter->next = ty->cast; + iter->prev = 0; + if (ty->cast) ty->cast->prev = iter; + ty->cast = iter; + return iter; + } + iter = iter->next; + } + } + return 0; +} + +/* + Cast a pointer up an inheritance hierarchy +*/ +SWIGRUNTIMEINLINE void * +SWIG_TypeCast(swig_cast_info *ty, void *ptr, int *newmemory) { + return ((!ty) || (!ty->converter)) ? ptr : (*ty->converter)(ptr, newmemory); +} + +/* + Dynamic pointer casting. Down an inheritance hierarchy +*/ +SWIGRUNTIME swig_type_info * +SWIG_TypeDynamicCast(swig_type_info *ty, void **ptr) { + swig_type_info *lastty = ty; + if (!ty || !ty->dcast) return ty; + while (ty && (ty->dcast)) { + ty = (*ty->dcast)(ptr); + if (ty) lastty = ty; + } + return lastty; +} + +/* + Return the name associated with this type +*/ +SWIGRUNTIMEINLINE const char * +SWIG_TypeName(const swig_type_info *ty) { + return ty->name; +} + +/* + Return the pretty name associated with this type, + that is an unmangled type name in a form presentable to the user. +*/ +SWIGRUNTIME const char * +SWIG_TypePrettyName(const swig_type_info *type) { + /* The "str" field contains the equivalent pretty names of the + type, separated by vertical-bar characters. We choose + to print the last name, as it is often (?) the most + specific. */ + if (!type) return NULL; + if (type->str != NULL) { + const char *last_name = type->str; + const char *s; + for (s = type->str; *s; s++) + if (*s == '|') last_name = s+1; + return last_name; + } + else + return type->name; +} + +/* + Set the clientdata field for a type +*/ +SWIGRUNTIME void +SWIG_TypeClientData(swig_type_info *ti, void *clientdata) { + swig_cast_info *cast = ti->cast; + /* if (ti->clientdata == clientdata) return; */ + ti->clientdata = clientdata; + + while (cast) { + if (!cast->converter) { + swig_type_info *tc = cast->type; + if (!tc->clientdata) { + SWIG_TypeClientData(tc, clientdata); + } + } + cast = cast->next; + } +} +SWIGRUNTIME void +SWIG_TypeNewClientData(swig_type_info *ti, void *clientdata) { + SWIG_TypeClientData(ti, clientdata); + ti->owndata = 1; +} + +/* + Search for a swig_type_info structure only by mangled name + Search is a O(log #types) + + We start searching at module start, and finish searching when start == end. + Note: if start == end at the beginning of the function, we go all the way around + the circular list. +*/ +SWIGRUNTIME swig_type_info * +SWIG_MangledTypeQueryModule(swig_module_info *start, + swig_module_info *end, + const char *name) { + swig_module_info *iter = start; + do { + if (iter->size) { + register size_t l = 0; + register size_t r = iter->size - 1; + do { + /* since l+r >= 0, we can (>> 1) instead (/ 2) */ + register size_t i = (l + r) >> 1; + const char *iname = iter->types[i]->name; + if (iname) { + register int compare = strcmp(name, iname); + if (compare == 0) { + return iter->types[i]; + } else if (compare < 0) { + if (i) { + r = i - 1; + } else { + break; + } + } else if (compare > 0) { + l = i + 1; + } + } else { + break; /* should never happen */ + } + } while (l <= r); + } + iter = iter->next; + } while (iter != end); + return 0; +} + +/* + Search for a swig_type_info structure for either a mangled name or a human readable name. + It first searches the mangled names of the types, which is a O(log #types) + If a type is not found it then searches the human readable names, which is O(#types). + + We start searching at module start, and finish searching when start == end. + Note: if start == end at the beginning of the function, we go all the way around + the circular list. +*/ +SWIGRUNTIME swig_type_info * +SWIG_TypeQueryModule(swig_module_info *start, + swig_module_info *end, + const char *name) { + /* STEP 1: Search the name field using binary search */ + swig_type_info *ret = SWIG_MangledTypeQueryModule(start, end, name); + if (ret) { + return ret; + } else { + /* STEP 2: If the type hasn't been found, do a complete search + of the str field (the human readable name) */ + swig_module_info *iter = start; + do { + register size_t i = 0; + for (; i < iter->size; ++i) { + if (iter->types[i]->str && (SWIG_TypeEquiv(iter->types[i]->str, name))) + return iter->types[i]; + } + iter = iter->next; + } while (iter != end); + } + + /* neither found a match */ + return 0; +} + +/* + Pack binary data into a string +*/ +SWIGRUNTIME char * +SWIG_PackData(char *c, void *ptr, size_t sz) { + static const char hex[17] = "0123456789abcdef"; + register const unsigned char *u = (unsigned char *) ptr; + register const unsigned char *eu = u + sz; + for (; u != eu; ++u) { + register unsigned char uu = *u; + *(c++) = hex[(uu & 0xf0) >> 4]; + *(c++) = hex[uu & 0xf]; + } + return c; +} + +/* + Unpack binary data from a string +*/ +SWIGRUNTIME const char * +SWIG_UnpackData(const char *c, void *ptr, size_t sz) { + register unsigned char *u = (unsigned char *) ptr; + register const unsigned char *eu = u + sz; + for (; u != eu; ++u) { + register char d = *(c++); + register unsigned char uu; + if ((d >= '0') && (d <= '9')) + uu = ((d - '0') << 4); + else if ((d >= 'a') && (d <= 'f')) + uu = ((d - ('a'-10)) << 4); + else + return (char *) 0; + d = *(c++); + if ((d >= '0') && (d <= '9')) + uu |= (d - '0'); + else if ((d >= 'a') && (d <= 'f')) + uu |= (d - ('a'-10)); + else + return (char *) 0; + *u = uu; + } + return c; +} + +/* + Pack 'void *' into a string buffer. +*/ +SWIGRUNTIME char * +SWIG_PackVoidPtr(char *buff, void *ptr, const char *name, size_t bsz) { + char *r = buff; + if ((2*sizeof(void *) + 2) > bsz) return 0; + *(r++) = '_'; + r = SWIG_PackData(r,&ptr,sizeof(void *)); + if (strlen(name) + 1 > (bsz - (r - buff))) return 0; + strcpy(r,name); + return buff; +} + +SWIGRUNTIME const char * +SWIG_UnpackVoidPtr(const char *c, void **ptr, const char *name) { + if (*c != '_') { + if (strcmp(c,"NULL") == 0) { + *ptr = (void *) 0; + return name; + } else { + return 0; + } + } + return SWIG_UnpackData(++c,ptr,sizeof(void *)); +} + +SWIGRUNTIME char * +SWIG_PackDataName(char *buff, void *ptr, size_t sz, const char *name, size_t bsz) { + char *r = buff; + size_t lname = (name ? strlen(name) : 0); + if ((2*sz + 2 + lname) > bsz) return 0; + *(r++) = '_'; + r = SWIG_PackData(r,ptr,sz); + if (lname) { + strncpy(r,name,lname+1); + } else { + *r = 0; + } + return buff; +} + +SWIGRUNTIME const char * +SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) { + if (*c != '_') { + if (strcmp(c,"NULL") == 0) { + memset(ptr,0,sz); + return name; + } else { + return 0; + } + } + return SWIG_UnpackData(++c,ptr,sz); +} + +#ifdef __cplusplus +} +#endif + +/* Errors in SWIG */ +#define SWIG_UnknownError -1 +#define SWIG_IOError -2 +#define SWIG_RuntimeError -3 +#define SWIG_IndexError -4 +#define SWIG_TypeError -5 +#define SWIG_DivisionByZero -6 +#define SWIG_OverflowError -7 +#define SWIG_SyntaxError -8 +#define SWIG_ValueError -9 +#define SWIG_SystemError -10 +#define SWIG_AttributeError -11 +#define SWIG_MemoryError -12 +#define SWIG_NullReferenceError -13 + + + +/* Compatibility macros for Python 3 */ +#if PY_VERSION_HEX >= 0x03000000 + +#define PyClass_Check(obj) PyObject_IsInstance(obj, (PyObject *)&PyType_Type) +#define PyInt_Check(x) PyLong_Check(x) +#define PyInt_AsLong(x) PyLong_AsLong(x) +#define PyInt_FromLong(x) PyLong_FromLong(x) +#define PyString_Format(fmt, args) PyUnicode_Format(fmt, args) + +#endif + +#ifndef Py_TYPE +# define Py_TYPE(op) ((op)->ob_type) +#endif + +/* SWIG APIs for compatibility of both Python 2 & 3 */ + +#if PY_VERSION_HEX >= 0x03000000 +# define SWIG_Python_str_FromFormat PyUnicode_FromFormat +#else +# define SWIG_Python_str_FromFormat PyString_FromFormat +#endif + + +/* Warning: This function will allocate a new string in Python 3, + * so please call SWIG_Python_str_DelForPy3(x) to free the space. + */ +SWIGINTERN char* +SWIG_Python_str_AsChar(PyObject *str) +{ +#if PY_VERSION_HEX >= 0x03000000 + char *cstr; + char *newstr; + Py_ssize_t len; + str = PyUnicode_AsUTF8String(str); + PyBytes_AsStringAndSize(str, &cstr, &len); + newstr = (char *) malloc(len+1); + memcpy(newstr, cstr, len+1); + Py_XDECREF(str); + return newstr; +#else + return PyString_AsString(str); +#endif +} + +#if PY_VERSION_HEX >= 0x03000000 +# define SWIG_Python_str_DelForPy3(x) free( (void*) (x) ) +#else +# define SWIG_Python_str_DelForPy3(x) +#endif + + +SWIGINTERN PyObject* +SWIG_Python_str_FromChar(const char *c) +{ +#if PY_VERSION_HEX >= 0x03000000 + return PyUnicode_FromString(c); +#else + return PyString_FromString(c); +#endif +} + +/* Add PyOS_snprintf for old Pythons */ +#if PY_VERSION_HEX < 0x02020000 +# if defined(_MSC_VER) || defined(__BORLANDC__) || defined(_WATCOM) +# define PyOS_snprintf _snprintf +# else +# define PyOS_snprintf snprintf +# endif +#endif + +/* A crude PyString_FromFormat implementation for old Pythons */ +#if PY_VERSION_HEX < 0x02020000 + +#ifndef SWIG_PYBUFFER_SIZE +# define SWIG_PYBUFFER_SIZE 1024 +#endif + +static PyObject * +PyString_FromFormat(const char *fmt, ...) { + va_list ap; + char buf[SWIG_PYBUFFER_SIZE * 2]; + int res; + va_start(ap, fmt); + res = vsnprintf(buf, sizeof(buf), fmt, ap); + va_end(ap); + return (res < 0 || res >= (int)sizeof(buf)) ? 0 : PyString_FromString(buf); +} +#endif + +/* Add PyObject_Del for old Pythons */ +#if PY_VERSION_HEX < 0x01060000 +# define PyObject_Del(op) PyMem_DEL((op)) +#endif +#ifndef PyObject_DEL +# define PyObject_DEL PyObject_Del +#endif + +/* A crude PyExc_StopIteration exception for old Pythons */ +#if PY_VERSION_HEX < 0x02020000 +# ifndef PyExc_StopIteration +# define PyExc_StopIteration PyExc_RuntimeError +# endif +# ifndef PyObject_GenericGetAttr +# define PyObject_GenericGetAttr 0 +# endif +#endif + +/* Py_NotImplemented is defined in 2.1 and up. */ +#if PY_VERSION_HEX < 0x02010000 +# ifndef Py_NotImplemented +# define Py_NotImplemented PyExc_RuntimeError +# endif +#endif + +/* A crude PyString_AsStringAndSize implementation for old Pythons */ +#if PY_VERSION_HEX < 0x02010000 +# ifndef PyString_AsStringAndSize +# define PyString_AsStringAndSize(obj, s, len) {*s = PyString_AsString(obj); *len = *s ? strlen(*s) : 0;} +# endif +#endif + +/* PySequence_Size for old Pythons */ +#if PY_VERSION_HEX < 0x02000000 +# ifndef PySequence_Size +# define PySequence_Size PySequence_Length +# endif +#endif + +/* PyBool_FromLong for old Pythons */ +#if PY_VERSION_HEX < 0x02030000 +static +PyObject *PyBool_FromLong(long ok) +{ + PyObject *result = ok ? Py_True : Py_False; + Py_INCREF(result); + return result; +} +#endif + +/* Py_ssize_t for old Pythons */ +/* This code is as recommended by: */ +/* http://www.python.org/dev/peps/pep-0353/#conversion-guidelines */ +#if PY_VERSION_HEX < 0x02050000 && !defined(PY_SSIZE_T_MIN) +typedef int Py_ssize_t; +# define PY_SSIZE_T_MAX INT_MAX +# define PY_SSIZE_T_MIN INT_MIN +#endif + +/* ----------------------------------------------------------------------------- + * error manipulation + * ----------------------------------------------------------------------------- */ + +SWIGRUNTIME PyObject* +SWIG_Python_ErrorType(int code) { + PyObject* type = 0; + switch(code) { + case SWIG_MemoryError: + type = PyExc_MemoryError; + break; + case SWIG_IOError: + type = PyExc_IOError; + break; + case SWIG_RuntimeError: + type = PyExc_RuntimeError; + break; + case SWIG_IndexError: + type = PyExc_IndexError; + break; + case SWIG_TypeError: + type = PyExc_TypeError; + break; + case SWIG_DivisionByZero: + type = PyExc_ZeroDivisionError; + break; + case SWIG_OverflowError: + type = PyExc_OverflowError; + break; + case SWIG_SyntaxError: + type = PyExc_SyntaxError; + break; + case SWIG_ValueError: + type = PyExc_ValueError; + break; + case SWIG_SystemError: + type = PyExc_SystemError; + break; + case SWIG_AttributeError: + type = PyExc_AttributeError; + break; + default: + type = PyExc_RuntimeError; + } + return type; +} + + +SWIGRUNTIME void +SWIG_Python_AddErrorMsg(const char* mesg) +{ + PyObject *type = 0; + PyObject *value = 0; + PyObject *traceback = 0; + + if (PyErr_Occurred()) PyErr_Fetch(&type, &value, &traceback); + if (value) { + char *tmp; + PyObject *old_str = PyObject_Str(value); + PyErr_Clear(); + Py_XINCREF(type); + + PyErr_Format(type, "%s %s", tmp = SWIG_Python_str_AsChar(old_str), mesg); + SWIG_Python_str_DelForPy3(tmp); + Py_DECREF(old_str); + Py_DECREF(value); + } else { + PyErr_SetString(PyExc_RuntimeError, mesg); + } +} + +#if defined(SWIG_PYTHON_NO_THREADS) +# if defined(SWIG_PYTHON_THREADS) +# undef SWIG_PYTHON_THREADS +# endif +#endif +#if defined(SWIG_PYTHON_THREADS) /* Threading support is enabled */ +# if !defined(SWIG_PYTHON_USE_GIL) && !defined(SWIG_PYTHON_NO_USE_GIL) +# if (PY_VERSION_HEX >= 0x02030000) /* For 2.3 or later, use the PyGILState calls */ +# define SWIG_PYTHON_USE_GIL +# endif +# endif +# if defined(SWIG_PYTHON_USE_GIL) /* Use PyGILState threads calls */ +# ifndef SWIG_PYTHON_INITIALIZE_THREADS +# define SWIG_PYTHON_INITIALIZE_THREADS PyEval_InitThreads() +# endif +# ifdef __cplusplus /* C++ code */ + class SWIG_Python_Thread_Block { + bool status; + PyGILState_STATE state; + public: + void end() { if (status) { PyGILState_Release(state); status = false;} } + SWIG_Python_Thread_Block() : status(true), state(PyGILState_Ensure()) {} + ~SWIG_Python_Thread_Block() { end(); } + }; + class SWIG_Python_Thread_Allow { + bool status; + PyThreadState *save; + public: + void end() { if (status) { PyEval_RestoreThread(save); status = false; }} + SWIG_Python_Thread_Allow() : status(true), save(PyEval_SaveThread()) {} + ~SWIG_Python_Thread_Allow() { end(); } + }; +# define SWIG_PYTHON_THREAD_BEGIN_BLOCK SWIG_Python_Thread_Block _swig_thread_block +# define SWIG_PYTHON_THREAD_END_BLOCK _swig_thread_block.end() +# define SWIG_PYTHON_THREAD_BEGIN_ALLOW SWIG_Python_Thread_Allow _swig_thread_allow +# define SWIG_PYTHON_THREAD_END_ALLOW _swig_thread_allow.end() +# else /* C code */ +# define SWIG_PYTHON_THREAD_BEGIN_BLOCK PyGILState_STATE _swig_thread_block = PyGILState_Ensure() +# define SWIG_PYTHON_THREAD_END_BLOCK PyGILState_Release(_swig_thread_block) +# define SWIG_PYTHON_THREAD_BEGIN_ALLOW PyThreadState *_swig_thread_allow = PyEval_SaveThread() +# define SWIG_PYTHON_THREAD_END_ALLOW PyEval_RestoreThread(_swig_thread_allow) +# endif +# else /* Old thread way, not implemented, user must provide it */ +# if !defined(SWIG_PYTHON_INITIALIZE_THREADS) +# define SWIG_PYTHON_INITIALIZE_THREADS +# endif +# if !defined(SWIG_PYTHON_THREAD_BEGIN_BLOCK) +# define SWIG_PYTHON_THREAD_BEGIN_BLOCK +# endif +# if !defined(SWIG_PYTHON_THREAD_END_BLOCK) +# define SWIG_PYTHON_THREAD_END_BLOCK +# endif +# if !defined(SWIG_PYTHON_THREAD_BEGIN_ALLOW) +# define SWIG_PYTHON_THREAD_BEGIN_ALLOW +# endif +# if !defined(SWIG_PYTHON_THREAD_END_ALLOW) +# define SWIG_PYTHON_THREAD_END_ALLOW +# endif +# endif +#else /* No thread support */ +# define SWIG_PYTHON_INITIALIZE_THREADS +# define SWIG_PYTHON_THREAD_BEGIN_BLOCK +# define SWIG_PYTHON_THREAD_END_BLOCK +# define SWIG_PYTHON_THREAD_BEGIN_ALLOW +# define SWIG_PYTHON_THREAD_END_ALLOW +#endif + +/* ----------------------------------------------------------------------------- + * Python API portion that goes into the runtime + * ----------------------------------------------------------------------------- */ + +#ifdef __cplusplus +extern "C" { +#if 0 +} /* cc-mode */ +#endif +#endif + +/* ----------------------------------------------------------------------------- + * Constant declarations + * ----------------------------------------------------------------------------- */ + +/* Constant Types */ +#define SWIG_PY_POINTER 4 +#define SWIG_PY_BINARY 5 + +/* Constant information structure */ +typedef struct swig_const_info { + int type; + char *name; + long lvalue; + double dvalue; + void *pvalue; + swig_type_info **ptype; +} swig_const_info; + + +/* ----------------------------------------------------------------------------- + * Wrapper of PyInstanceMethod_New() used in Python 3 + * It is exported to the generated module, used for -fastproxy + * ----------------------------------------------------------------------------- */ +SWIGRUNTIME PyObject* SWIG_PyInstanceMethod_New(PyObject *self, PyObject *func) +{ +#if PY_VERSION_HEX >= 0x03000000 + return PyInstanceMethod_New(func); +#else + return NULL; +#endif +} + +#ifdef __cplusplus +#if 0 +{ /* cc-mode */ +#endif +} +#endif + + +/* ----------------------------------------------------------------------------- + * pyrun.swg + * + * This file contains the runtime support for Python modules + * and includes code for managing global variables and pointer + * type checking. + * + * ----------------------------------------------------------------------------- */ + +/* Common SWIG API */ + +/* for raw pointers */ +#define SWIG_Python_ConvertPtr(obj, pptr, type, flags) SWIG_Python_ConvertPtrAndOwn(obj, pptr, type, flags, 0) +#define SWIG_ConvertPtr(obj, pptr, type, flags) SWIG_Python_ConvertPtr(obj, pptr, type, flags) +#define SWIG_ConvertPtrAndOwn(obj,pptr,type,flags,own) SWIG_Python_ConvertPtrAndOwn(obj, pptr, type, flags, own) +#define SWIG_NewPointerObj(ptr, type, flags) SWIG_Python_NewPointerObj(ptr, type, flags) +#define SWIG_CheckImplicit(ty) SWIG_Python_CheckImplicit(ty) +#define SWIG_AcquirePtr(ptr, src) SWIG_Python_AcquirePtr(ptr, src) +#define swig_owntype int + +/* for raw packed data */ +#define SWIG_ConvertPacked(obj, ptr, sz, ty) SWIG_Python_ConvertPacked(obj, ptr, sz, ty) +#define SWIG_NewPackedObj(ptr, sz, type) SWIG_Python_NewPackedObj(ptr, sz, type) + +/* for class or struct pointers */ +#define SWIG_ConvertInstance(obj, pptr, type, flags) SWIG_ConvertPtr(obj, pptr, type, flags) +#define SWIG_NewInstanceObj(ptr, type, flags) SWIG_NewPointerObj(ptr, type, flags) + +/* for C or C++ function pointers */ +#define SWIG_ConvertFunctionPtr(obj, pptr, type) SWIG_Python_ConvertFunctionPtr(obj, pptr, type) +#define SWIG_NewFunctionPtrObj(ptr, type) SWIG_Python_NewPointerObj(ptr, type, 0) + +/* for C++ member pointers, ie, member methods */ +#define SWIG_ConvertMember(obj, ptr, sz, ty) SWIG_Python_ConvertPacked(obj, ptr, sz, ty) +#define SWIG_NewMemberObj(ptr, sz, type) SWIG_Python_NewPackedObj(ptr, sz, type) + + +/* Runtime API */ + +#define SWIG_GetModule(clientdata) SWIG_Python_GetModule() +#define SWIG_SetModule(clientdata, pointer) SWIG_Python_SetModule(pointer) +#define SWIG_NewClientData(obj) SwigPyClientData_New(obj) + +#define SWIG_SetErrorObj SWIG_Python_SetErrorObj +#define SWIG_SetErrorMsg SWIG_Python_SetErrorMsg +#define SWIG_ErrorType(code) SWIG_Python_ErrorType(code) +#define SWIG_Error(code, msg) SWIG_Python_SetErrorMsg(SWIG_ErrorType(code), msg) +#define SWIG_fail goto fail + + +/* Runtime API implementation */ + +/* Error manipulation */ + +SWIGINTERN void +SWIG_Python_SetErrorObj(PyObject *errtype, PyObject *obj) { + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyErr_SetObject(errtype, obj); + Py_DECREF(obj); + SWIG_PYTHON_THREAD_END_BLOCK; +} + +SWIGINTERN void +SWIG_Python_SetErrorMsg(PyObject *errtype, const char *msg) { + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyErr_SetString(errtype, (char *) msg); + SWIG_PYTHON_THREAD_END_BLOCK; +} + +#define SWIG_Python_Raise(obj, type, desc) SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(desc), obj) + +/* Set a constant value */ + +SWIGINTERN void +SWIG_Python_SetConstant(PyObject *d, const char *name, PyObject *obj) { + PyDict_SetItemString(d, (char*) name, obj); + Py_DECREF(obj); +} + +/* Append a value to the result obj */ + +SWIGINTERN PyObject* +SWIG_Python_AppendOutput(PyObject* result, PyObject* obj) { +#if !defined(SWIG_PYTHON_OUTPUT_TUPLE) + if (!result) { + result = obj; + } else if (result == Py_None) { + Py_DECREF(result); + result = obj; + } else { + if (!PyList_Check(result)) { + PyObject *o2 = result; + result = PyList_New(1); + PyList_SetItem(result, 0, o2); + } + PyList_Append(result,obj); + Py_DECREF(obj); + } + return result; +#else + PyObject* o2; + PyObject* o3; + if (!result) { + result = obj; + } else if (result == Py_None) { + Py_DECREF(result); + result = obj; + } else { + if (!PyTuple_Check(result)) { + o2 = result; + result = PyTuple_New(1); + PyTuple_SET_ITEM(result, 0, o2); + } + o3 = PyTuple_New(1); + PyTuple_SET_ITEM(o3, 0, obj); + o2 = result; + result = PySequence_Concat(o2, o3); + Py_DECREF(o2); + Py_DECREF(o3); + } + return result; +#endif +} + +/* Unpack the argument tuple */ + +SWIGINTERN int +SWIG_Python_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t max, PyObject **objs) +{ + if (!args) { + if (!min && !max) { + return 1; + } else { + PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got none", + name, (min == max ? "" : "at least "), (int)min); + return 0; + } + } + if (!PyTuple_Check(args)) { + PyErr_SetString(PyExc_SystemError, "UnpackTuple() argument list is not a tuple"); + return 0; + } else { + register Py_ssize_t l = PyTuple_GET_SIZE(args); + if (l < min) { + PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got %d", + name, (min == max ? "" : "at least "), (int)min, (int)l); + return 0; + } else if (l > max) { + PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got %d", + name, (min == max ? "" : "at most "), (int)max, (int)l); + return 0; + } else { + register int i; + for (i = 0; i < l; ++i) { + objs[i] = PyTuple_GET_ITEM(args, i); + } + for (; l < max; ++l) { + objs[l] = 0; + } + return i + 1; + } + } +} + +/* A functor is a function object with one single object argument */ +#if PY_VERSION_HEX >= 0x02020000 +#define SWIG_Python_CallFunctor(functor, obj) PyObject_CallFunctionObjArgs(functor, obj, NULL); +#else +#define SWIG_Python_CallFunctor(functor, obj) PyObject_CallFunction(functor, "O", obj); +#endif + +/* + Helper for static pointer initialization for both C and C++ code, for example + static PyObject *SWIG_STATIC_POINTER(MyVar) = NewSomething(...); +*/ +#ifdef __cplusplus +#define SWIG_STATIC_POINTER(var) var +#else +#define SWIG_STATIC_POINTER(var) var = 0; if (!var) var +#endif + +/* ----------------------------------------------------------------------------- + * Pointer declarations + * ----------------------------------------------------------------------------- */ + +/* Flags for new pointer objects */ +#define SWIG_POINTER_NOSHADOW (SWIG_POINTER_OWN << 1) +#define SWIG_POINTER_NEW (SWIG_POINTER_NOSHADOW | SWIG_POINTER_OWN) + +#define SWIG_POINTER_IMPLICIT_CONV (SWIG_POINTER_DISOWN << 1) + +#ifdef __cplusplus +extern "C" { +#if 0 +} /* cc-mode */ +#endif +#endif + +/* How to access Py_None */ +#if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) +# ifndef SWIG_PYTHON_NO_BUILD_NONE +# ifndef SWIG_PYTHON_BUILD_NONE +# define SWIG_PYTHON_BUILD_NONE +# endif +# endif +#endif + +#ifdef SWIG_PYTHON_BUILD_NONE +# ifdef Py_None +# undef Py_None +# define Py_None SWIG_Py_None() +# endif +SWIGRUNTIMEINLINE PyObject * +_SWIG_Py_None(void) +{ + PyObject *none = Py_BuildValue((char*)""); + Py_DECREF(none); + return none; +} +SWIGRUNTIME PyObject * +SWIG_Py_None(void) +{ + static PyObject *SWIG_STATIC_POINTER(none) = _SWIG_Py_None(); + return none; +} +#endif + +/* The python void return value */ + +SWIGRUNTIMEINLINE PyObject * +SWIG_Py_Void(void) +{ + PyObject *none = Py_None; + Py_INCREF(none); + return none; +} + +/* SwigPyClientData */ + +typedef struct { + PyObject *klass; + PyObject *newraw; + PyObject *newargs; + PyObject *destroy; + int delargs; + int implicitconv; +} SwigPyClientData; + +SWIGRUNTIMEINLINE int +SWIG_Python_CheckImplicit(swig_type_info *ty) +{ + SwigPyClientData *data = (SwigPyClientData *)ty->clientdata; + return data ? data->implicitconv : 0; +} + +SWIGRUNTIMEINLINE PyObject * +SWIG_Python_ExceptionType(swig_type_info *desc) { + SwigPyClientData *data = desc ? (SwigPyClientData *) desc->clientdata : 0; + PyObject *klass = data ? data->klass : 0; + return (klass ? klass : PyExc_RuntimeError); +} + + +SWIGRUNTIME SwigPyClientData * +SwigPyClientData_New(PyObject* obj) +{ + if (!obj) { + return 0; + } else { + SwigPyClientData *data = (SwigPyClientData *)malloc(sizeof(SwigPyClientData)); + /* the klass element */ + data->klass = obj; + Py_INCREF(data->klass); + /* the newraw method and newargs arguments used to create a new raw instance */ + if (PyClass_Check(obj)) { + data->newraw = 0; + data->newargs = obj; + Py_INCREF(obj); + } else { +#if (PY_VERSION_HEX < 0x02020000) + data->newraw = 0; +#else + data->newraw = PyObject_GetAttrString(data->klass, (char *)"__new__"); +#endif + if (data->newraw) { + Py_INCREF(data->newraw); + data->newargs = PyTuple_New(1); + PyTuple_SetItem(data->newargs, 0, obj); + } else { + data->newargs = obj; + } + Py_INCREF(data->newargs); + } + /* the destroy method, aka as the C++ delete method */ + data->destroy = PyObject_GetAttrString(data->klass, (char *)"__swig_destroy__"); + if (PyErr_Occurred()) { + PyErr_Clear(); + data->destroy = 0; + } + if (data->destroy) { + int flags; + Py_INCREF(data->destroy); + flags = PyCFunction_GET_FLAGS(data->destroy); +#ifdef METH_O + data->delargs = !(flags & (METH_O)); +#else + data->delargs = 0; +#endif + } else { + data->delargs = 0; + } + data->implicitconv = 0; + return data; + } +} + +SWIGRUNTIME void +SwigPyClientData_Del(SwigPyClientData* data) +{ + Py_XDECREF(data->newraw); + Py_XDECREF(data->newargs); + Py_XDECREF(data->destroy); +} + +/* =============== SwigPyObject =====================*/ + +typedef struct { + PyObject_HEAD + void *ptr; + swig_type_info *ty; + int own; + PyObject *next; +} SwigPyObject; + +SWIGRUNTIME PyObject * +SwigPyObject_long(SwigPyObject *v) +{ + return PyLong_FromVoidPtr(v->ptr); +} + +SWIGRUNTIME PyObject * +SwigPyObject_format(const char* fmt, SwigPyObject *v) +{ + PyObject *res = NULL; + PyObject *args = PyTuple_New(1); + if (args) { + if (PyTuple_SetItem(args, 0, SwigPyObject_long(v)) == 0) { + PyObject *ofmt = SWIG_Python_str_FromChar(fmt); + if (ofmt) { +#if PY_VERSION_HEX >= 0x03000000 + res = PyUnicode_Format(ofmt,args); +#else + res = PyString_Format(ofmt,args); +#endif + Py_DECREF(ofmt); + } + Py_DECREF(args); + } + } + return res; +} + +SWIGRUNTIME PyObject * +SwigPyObject_oct(SwigPyObject *v) +{ + return SwigPyObject_format("%o",v); +} + +SWIGRUNTIME PyObject * +SwigPyObject_hex(SwigPyObject *v) +{ + return SwigPyObject_format("%x",v); +} + +SWIGRUNTIME PyObject * +#ifdef METH_NOARGS +SwigPyObject_repr(SwigPyObject *v) +#else +SwigPyObject_repr(SwigPyObject *v, PyObject *args) +#endif +{ + const char *name = SWIG_TypePrettyName(v->ty); + PyObject *repr = SWIG_Python_str_FromFormat("<Swig Object of type '%s' at %p>", name, v); + if (v->next) { +#ifdef METH_NOARGS + PyObject *nrep = SwigPyObject_repr((SwigPyObject *)v->next); +#else + PyObject *nrep = SwigPyObject_repr((SwigPyObject *)v->next, args); +#endif +#if PY_VERSION_HEX >= 0x03000000 + PyObject *joined = PyUnicode_Concat(repr, nrep); + Py_DecRef(repr); + Py_DecRef(nrep); + repr = joined; +#else + PyString_ConcatAndDel(&repr,nrep); +#endif + } + return repr; +} + +SWIGRUNTIME int +SwigPyObject_print(SwigPyObject *v, FILE *fp, int SWIGUNUSEDPARM(flags)) +{ + char *str; +#ifdef METH_NOARGS + PyObject *repr = SwigPyObject_repr(v); +#else + PyObject *repr = SwigPyObject_repr(v, NULL); +#endif + if (repr) { + str = SWIG_Python_str_AsChar(repr); + fputs(str, fp); + SWIG_Python_str_DelForPy3(str); + Py_DECREF(repr); + return 0; + } else { + return 1; + } +} + +SWIGRUNTIME PyObject * +SwigPyObject_str(SwigPyObject *v) +{ + char result[SWIG_BUFFER_SIZE]; + return SWIG_PackVoidPtr(result, v->ptr, v->ty->name, sizeof(result)) ? + SWIG_Python_str_FromChar(result) : 0; +} + +SWIGRUNTIME int +SwigPyObject_compare(SwigPyObject *v, SwigPyObject *w) +{ + void *i = v->ptr; + void *j = w->ptr; + return (i < j) ? -1 : ((i > j) ? 1 : 0); +} + +/* Added for Python 3.x, would it also be useful for Python 2.x? */ +SWIGRUNTIME PyObject* +SwigPyObject_richcompare(SwigPyObject *v, SwigPyObject *w, int op) +{ + PyObject* res; + if( op != Py_EQ && op != Py_NE ) { + Py_INCREF(Py_NotImplemented); + return Py_NotImplemented; + } + if( (SwigPyObject_compare(v, w)==0) == (op == Py_EQ) ) + res = Py_True; + else + res = Py_False; + Py_INCREF(res); + return res; +} + + +SWIGRUNTIME PyTypeObject* _PySwigObject_type(void); + +SWIGRUNTIME PyTypeObject* +SwigPyObject_type(void) { + static PyTypeObject *SWIG_STATIC_POINTER(type) = _PySwigObject_type(); + return type; +} + +SWIGRUNTIMEINLINE int +SwigPyObject_Check(PyObject *op) { + return (Py_TYPE(op) == SwigPyObject_type()) + || (strcmp(Py_TYPE(op)->tp_name,"SwigPyObject") == 0); +} + +SWIGRUNTIME PyObject * +SwigPyObject_New(void *ptr, swig_type_info *ty, int own); + +SWIGRUNTIME void +SwigPyObject_dealloc(PyObject *v) +{ + SwigPyObject *sobj = (SwigPyObject *) v; + PyObject *next = sobj->next; + if (sobj->own == SWIG_POINTER_OWN) { + swig_type_info *ty = sobj->ty; + SwigPyClientData *data = ty ? (SwigPyClientData *) ty->clientdata : 0; + PyObject *destroy = data ? data->destroy : 0; + if (destroy) { + /* destroy is always a VARARGS method */ + PyObject *res; + if (data->delargs) { + /* we need to create a temporary object to carry the destroy operation */ + PyObject *tmp = SwigPyObject_New(sobj->ptr, ty, 0); + res = SWIG_Python_CallFunctor(destroy, tmp); + Py_DECREF(tmp); + } else { + PyCFunction meth = PyCFunction_GET_FUNCTION(destroy); + PyObject *mself = PyCFunction_GET_SELF(destroy); + res = ((*meth)(mself, v)); + } + Py_XDECREF(res); + } +#if !defined(SWIG_PYTHON_SILENT_MEMLEAK) + else { + const char *name = SWIG_TypePrettyName(ty); + printf("swig/python detected a memory leak of type '%s', no destructor found.\n", (name ? name : "unknown")); + } +#endif + } + Py_XDECREF(next); + PyObject_DEL(v); +} + +SWIGRUNTIME PyObject* +SwigPyObject_append(PyObject* v, PyObject* next) +{ + SwigPyObject *sobj = (SwigPyObject *) v; +#ifndef METH_O + PyObject *tmp = 0; + if (!PyArg_ParseTuple(next,(char *)"O:append", &tmp)) return NULL; + next = tmp; +#endif + if (!SwigPyObject_Check(next)) { + return NULL; + } + sobj->next = next; + Py_INCREF(next); + return SWIG_Py_Void(); +} + +SWIGRUNTIME PyObject* +#ifdef METH_NOARGS +SwigPyObject_next(PyObject* v) +#else +SwigPyObject_next(PyObject* v, PyObject *SWIGUNUSEDPARM(args)) +#endif +{ + SwigPyObject *sobj = (SwigPyObject *) v; + if (sobj->next) { + Py_INCREF(sobj->next); + return sobj->next; + } else { + return SWIG_Py_Void(); + } +} + +SWIGINTERN PyObject* +#ifdef METH_NOARGS +SwigPyObject_disown(PyObject *v) +#else +SwigPyObject_disown(PyObject* v, PyObject *SWIGUNUSEDPARM(args)) +#endif +{ + SwigPyObject *sobj = (SwigPyObject *)v; + sobj->own = 0; + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject* +#ifdef METH_NOARGS +SwigPyObject_acquire(PyObject *v) +#else +SwigPyObject_acquire(PyObject* v, PyObject *SWIGUNUSEDPARM(args)) +#endif +{ + SwigPyObject *sobj = (SwigPyObject *)v; + sobj->own = SWIG_POINTER_OWN; + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject* +SwigPyObject_own(PyObject *v, PyObject *args) +{ + PyObject *val = 0; +#if (PY_VERSION_HEX < 0x02020000) + if (!PyArg_ParseTuple(args,(char *)"|O:own",&val)) +#else + if (!PyArg_UnpackTuple(args, (char *)"own", 0, 1, &val)) +#endif + { + return NULL; + } + else + { + SwigPyObject *sobj = (SwigPyObject *)v; + PyObject *obj = PyBool_FromLong(sobj->own); + if (val) { +#ifdef METH_NOARGS + if (PyObject_IsTrue(val)) { + SwigPyObject_acquire(v); + } else { + SwigPyObject_disown(v); + } +#else + if (PyObject_IsTrue(val)) { + SwigPyObject_acquire(v,args); + } else { + SwigPyObject_disown(v,args); + } +#endif + } + return obj; + } +} + +#ifdef METH_O +static PyMethodDef +swigobject_methods[] = { + {(char *)"disown", (PyCFunction)SwigPyObject_disown, METH_NOARGS, (char *)"releases ownership of the pointer"}, + {(char *)"acquire", (PyCFunction)SwigPyObject_acquire, METH_NOARGS, (char *)"aquires ownership of the pointer"}, + {(char *)"own", (PyCFunction)SwigPyObject_own, METH_VARARGS, (char *)"returns/sets ownership of the pointer"}, + {(char *)"append", (PyCFunction)SwigPyObject_append, METH_O, (char *)"appends another 'this' object"}, + {(char *)"next", (PyCFunction)SwigPyObject_next, METH_NOARGS, (char *)"returns the next 'this' object"}, + {(char *)"__repr__",(PyCFunction)SwigPyObject_repr, METH_NOARGS, (char *)"returns object representation"}, + {0, 0, 0, 0} +}; +#else +static PyMethodDef +swigobject_methods[] = { + {(char *)"disown", (PyCFunction)SwigPyObject_disown, METH_VARARGS, (char *)"releases ownership of the pointer"}, + {(char *)"acquire", (PyCFunction)SwigPyObject_acquire, METH_VARARGS, (char *)"aquires ownership of the pointer"}, + {(char *)"own", (PyCFunction)SwigPyObject_own, METH_VARARGS, (char *)"returns/sets ownership of the pointer"}, + {(char *)"append", (PyCFunction)SwigPyObject_append, METH_VARARGS, (char *)"appends another 'this' object"}, + {(char *)"next", (PyCFunction)SwigPyObject_next, METH_VARARGS, (char *)"returns the next 'this' object"}, + {(char *)"__repr__",(PyCFunction)SwigPyObject_repr, METH_VARARGS, (char *)"returns object representation"}, + {0, 0, 0, 0} +}; +#endif + +#if PY_VERSION_HEX < 0x02020000 +SWIGINTERN PyObject * +SwigPyObject_getattr(SwigPyObject *sobj,char *name) +{ + return Py_FindMethod(swigobject_methods, (PyObject *)sobj, name); +} +#endif + +SWIGRUNTIME PyTypeObject* +_PySwigObject_type(void) { + static char swigobject_doc[] = "Swig object carries a C/C++ instance pointer"; + + static PyNumberMethods SwigPyObject_as_number = { + (binaryfunc)0, /*nb_add*/ + (binaryfunc)0, /*nb_subtract*/ + (binaryfunc)0, /*nb_multiply*/ + /* nb_divide removed in Python 3 */ +#if PY_VERSION_HEX < 0x03000000 + (binaryfunc)0, /*nb_divide*/ +#endif + (binaryfunc)0, /*nb_remainder*/ + (binaryfunc)0, /*nb_divmod*/ + (ternaryfunc)0,/*nb_power*/ + (unaryfunc)0, /*nb_negative*/ + (unaryfunc)0, /*nb_positive*/ + (unaryfunc)0, /*nb_absolute*/ + (inquiry)0, /*nb_nonzero*/ + 0, /*nb_invert*/ + 0, /*nb_lshift*/ + 0, /*nb_rshift*/ + 0, /*nb_and*/ + 0, /*nb_xor*/ + 0, /*nb_or*/ +#if PY_VERSION_HEX < 0x03000000 + 0, /*nb_coerce*/ +#endif + (unaryfunc)SwigPyObject_long, /*nb_int*/ +#if PY_VERSION_HEX < 0x03000000 + (unaryfunc)SwigPyObject_long, /*nb_long*/ +#else + 0, /*nb_reserved*/ +#endif + (unaryfunc)0, /*nb_float*/ +#if PY_VERSION_HEX < 0x03000000 + (unaryfunc)SwigPyObject_oct, /*nb_oct*/ + (unaryfunc)SwigPyObject_hex, /*nb_hex*/ +#endif +#if PY_VERSION_HEX >= 0x03000000 /* 3.0 */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_index, nb_inplace_divide removed */ +#elif PY_VERSION_HEX >= 0x02050000 /* 2.5.0 */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_index */ +#elif PY_VERSION_HEX >= 0x02020000 /* 2.2.0 */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_inplace_true_divide */ +#elif PY_VERSION_HEX >= 0x02000000 /* 2.0.0 */ + 0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_inplace_or */ +#endif + }; + + static PyTypeObject swigpyobject_type; + static int type_init = 0; + if (!type_init) { + const PyTypeObject tmp + = { + /* PyObject header changed in Python 3 */ +#if PY_VERSION_HEX >= 0x03000000 + PyVarObject_HEAD_INIT(&PyType_Type, 0) +#else + PyObject_HEAD_INIT(NULL) + 0, /* ob_size */ +#endif + (char *)"SwigPyObject", /* tp_name */ + sizeof(SwigPyObject), /* tp_basicsize */ + 0, /* tp_itemsize */ + (destructor)SwigPyObject_dealloc, /* tp_dealloc */ + (printfunc)SwigPyObject_print, /* tp_print */ +#if PY_VERSION_HEX < 0x02020000 + (getattrfunc)SwigPyObject_getattr, /* tp_getattr */ +#else + (getattrfunc)0, /* tp_getattr */ +#endif + (setattrfunc)0, /* tp_setattr */ +#if PY_VERSION_HEX >= 0x03000000 + 0, /* tp_reserved in 3.0.1, tp_compare in 3.0.0 but not used */ +#else + (cmpfunc)SwigPyObject_compare, /* tp_compare */ +#endif + (reprfunc)SwigPyObject_repr, /* tp_repr */ + &SwigPyObject_as_number, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + (hashfunc)0, /* tp_hash */ + (ternaryfunc)0, /* tp_call */ + (reprfunc)SwigPyObject_str, /* tp_str */ + PyObject_GenericGetAttr, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT, /* tp_flags */ + swigobject_doc, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + (richcmpfunc)SwigPyObject_richcompare, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ +#if PY_VERSION_HEX >= 0x02020000 + 0, /* tp_iter */ + 0, /* tp_iternext */ + swigobject_methods, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + 0, /* tp_new */ + 0, /* tp_free */ + 0, /* tp_is_gc */ + 0, /* tp_bases */ + 0, /* tp_mro */ + 0, /* tp_cache */ + 0, /* tp_subclasses */ + 0, /* tp_weaklist */ +#endif +#if PY_VERSION_HEX >= 0x02030000 + 0, /* tp_del */ +#endif +#ifdef COUNT_ALLOCS + 0,0,0,0 /* tp_alloc -> tp_next */ +#endif + }; + swigpyobject_type = tmp; + /* for Python 3 we already assigned ob_type in PyVarObject_HEAD_INIT() */ +#if PY_VERSION_HEX < 0x03000000 + swigpyobject_type.ob_type = &PyType_Type; +#endif + type_init = 1; + } + return &swigpyobject_type; +} + +SWIGRUNTIME PyObject * +SwigPyObject_New(void *ptr, swig_type_info *ty, int own) +{ + SwigPyObject *sobj = PyObject_NEW(SwigPyObject, SwigPyObject_type()); + if (sobj) { + sobj->ptr = ptr; + sobj->ty = ty; + sobj->own = own; + sobj->next = 0; + } + return (PyObject *)sobj; +} + +/* ----------------------------------------------------------------------------- + * Implements a simple Swig Packed type, and use it instead of string + * ----------------------------------------------------------------------------- */ + +typedef struct { + PyObject_HEAD + void *pack; + swig_type_info *ty; + size_t size; +} SwigPyPacked; + +SWIGRUNTIME int +SwigPyPacked_print(SwigPyPacked *v, FILE *fp, int SWIGUNUSEDPARM(flags)) +{ + char result[SWIG_BUFFER_SIZE]; + fputs("<Swig Packed ", fp); + if (SWIG_PackDataName(result, v->pack, v->size, 0, sizeof(result))) { + fputs("at ", fp); + fputs(result, fp); + } + fputs(v->ty->name,fp); + fputs(">", fp); + return 0; +} + +SWIGRUNTIME PyObject * +SwigPyPacked_repr(SwigPyPacked *v) +{ + char result[SWIG_BUFFER_SIZE]; + if (SWIG_PackDataName(result, v->pack, v->size, 0, sizeof(result))) { + return SWIG_Python_str_FromFormat("<Swig Packed at %s%s>", result, v->ty->name); + } else { + return SWIG_Python_str_FromFormat("<Swig Packed %s>", v->ty->name); + } +} + +SWIGRUNT... [truncated message content] |
From: <wsf...@us...> - 2012-09-25 19:25:21
|
Revision: 13850 http://swig.svn.sourceforge.net/swig/?rev=13850&view=rev Author: wsfulton Date: 2012-09-25 19:25:14 +0000 (Tue, 25 Sep 2012) Log Message: ----------- Update on C++11 user-defined literal status Modified Paths: -------------- branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html branches/gsoc2009-matevz/Examples/test-suite/cpp0x_userdefined_literals.i Modified: branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html =================================================================== --- branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html 2012-09-21 19:15:44 UTC (rev 13849) +++ branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html 2012-09-25 19:25:14 UTC (rev 13850) @@ -516,19 +516,50 @@ <H3><a name="Cpp0x_User_defined_literals"></a>7.2.19 User-defined literals</H3> -<p>SWIG correctly parses the new <tt>operator""_mysuffix()</tt> functions.</p> +<p> +SWIG parses the declaration of user-defined literals, that is, the <tt>operator "" _mysuffix()</tt> function syntax. +</p> +<p> +Some examples are the raw literal: +</p> <div class="code"><pre> +OutputType operator "" _myRawLiteral(const char * value); +</pre></div> + +<p> +numeric cooked literals: +</p> +<div class="code"><pre> +OutputType operator "" _mySuffixIntegral(unsigned long long); +OutputType operator "" _mySuffixFloat(long double); +</pre></div> + +<p> +and cooked string literals: +</p> +<div class="code"><pre> OutputType operator "" _mySuffix(const char * string_values, size_t num_chars); OutputType operator "" _mySuffix(const wchar_t * string_values, size_t num_chars); OutputType operator "" _mySuffix(const char16_t * string_values, size_t num_chars); OutputType operator "" _mySuffix(const char32_t * string_values, size_t num_chars); -OutputType operator "" _mySuffix(int value); </pre></div> -<p>The %rename currently doesn't parse the double quotes. Please -rename the functions in the code using the #define preprocessor directive.</p> +<p> +Note that the %rename directive currently does not parse the double quotes, so these can't be easily accessed from +target languages. +</p> +<p> +Use of user-defined literals such as the following still give a syntax error: +</p> + +<div class="code"><pre> +OutputType var1 = "1234"_suffix; +OutputType var2 = 1234_suffix; +OutputType var3 = 3.1416_suffix; +</pre></div> + <H3><a name="Cpp0x_Thread_local_storage"></a>7.2.20 Thread-local storage</H3> Modified: branches/gsoc2009-matevz/Examples/test-suite/cpp0x_userdefined_literals.i =================================================================== --- branches/gsoc2009-matevz/Examples/test-suite/cpp0x_userdefined_literals.i 2012-09-21 19:15:44 UTC (rev 13849) +++ branches/gsoc2009-matevz/Examples/test-suite/cpp0x_userdefined_literals.i 2012-09-25 19:25:14 UTC (rev 13850) @@ -1,5 +1,5 @@ /* This testcase checks whether SWIG correctly parses the user-defined literals - for the string introduced in C++0x. */ + introduced in C++0x. */ %module cpp0x_userdefined_literals %inline %{ @@ -7,18 +7,20 @@ struct OutputType { int val; - - OutputType(int v) { v=val; } + OutputType(int v) : val(v) {} }; -/* Note: GCC doesn't support user-defined literals yet! */ -struct TT { -OutputType operator "" (const char * string_values, size_t num_chars) { return OutputType(100); } +// Raw literal +OutputType operator "" _myRawLiteral(const char * value) { return OutputType(10); } + +// Cooked numeric literals +OutputType operator "" _mySuffixIntegral(unsigned long long) { return OutputType(20); } +OutputType operator "" _mySuffixFloat(long double) { return OutputType(30); } + +// Cooked string literals OutputType operator "" _mySuffix1(const char * string_values, size_t num_chars) { return OutputType(100); } OutputType operator "" _mySuffix2(const wchar_t * string_values, size_t num_chars) { return OutputType(200); } OutputType operator "" _mySuffix3(const char16_t * string_values, size_t num_chars) { return OutputType(300); } OutputType operator "" _mySuffix4(const char32_t * string_values, size_t num_chars) { return OutputType(400); } -OutputType operator "" _mySuffix5(int value) /* cooked version - ie. atoi() of string */ { return OutputType(500); } -}; %} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-09-25 20:22:22
|
Revision: 13852 http://swig.svn.sourceforge.net/swig/?rev=13852&view=rev Author: wsfulton Date: 2012-09-25 20:22:15 +0000 (Tue, 25 Sep 2012) Log Message: ----------- Delegating constructors and inheriting constructors clarification and split of tests Modified Paths: -------------- branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html branches/gsoc2009-matevz/Examples/test-suite/common.mk Added Paths: ----------- branches/gsoc2009-matevz/Examples/test-suite/cpp0x_delegating_constructors.i branches/gsoc2009-matevz/Examples/test-suite/cpp0x_inheriting_constructors.i Removed Paths: ------------- branches/gsoc2009-matevz/Examples/test-suite/cpp0x_constructors.i Modified: branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html =================================================================== --- branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html 2012-09-25 19:29:13 UTC (rev 13851) +++ branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html 2012-09-25 20:22:15 UTC (rev 13852) @@ -263,11 +263,33 @@ <H3><a name="Cpp0x_Object_construction_improvement"></a>7.2.10 Object construction improvement</H3> -<p>SWIG correctly parses and includes the external functions -(constructor delegation and constructor inheritance) into the class -using the <tt>using</tt> keyword.</p> +<p> +SWIG is able to handle constructor delegation, such as: +</p> <div class="code"><pre> +class A { +public: + int a; + int b; + int c; + + A() : A( 10 ) {} + A(int aa) : A(aa, 20) {} + A(int aa, int bb) : A(aa, bb, 30) {} + A(int aa, int bb, int cc) { a=aa; b=bb; c=cc; } +}; +</pre></div> + +<p> +Constructor inheritance is parsed correctly, but the additional constructors are not currently added to the derived proxy class in the target language. Example is shown below: +<!-- +The extra constructors provided by the <tt>using</tt> syntax will add the appropriate constructors into the target language proxy derived classes. +In the example below a wrapper for the <tt>DerivedClass(int)</tt> is added to <tt>DerivedClass</tt>: +--> +</p> + +<div class="code"><pre> class BaseClass { public: BaseClass(int iValue); Modified: branches/gsoc2009-matevz/Examples/test-suite/common.mk =================================================================== --- branches/gsoc2009-matevz/Examples/test-suite/common.mk 2012-09-25 19:29:13 UTC (rev 13851) +++ branches/gsoc2009-matevz/Examples/test-suite/common.mk 2012-09-25 20:22:15 UTC (rev 13852) @@ -434,6 +434,7 @@ cpp0x_constexpr \ cpp0x_decltype \ cpp0x_default_delete \ + cpp0x_delegating_constructors \ cpp0x_explicit_conversion_operators \ cpp0x_function_objects \ cpp0x_initializer_list \ @@ -453,7 +454,7 @@ cpp0x_userdefined_literals \ cpp0x_variadic_templates -# cpp0x_constructors \ # not supported by any compiler yet +# cpp0x_inheriting_constructors \ # not supported by gcc-4.7 # cpp0x_hash_tables \ # not fully implemented yet # cpp0x_lambda_functions \ # not supported by GCC or MSVC yet # cpp0x_thread_local \ # not supported by any compiler yet Deleted: branches/gsoc2009-matevz/Examples/test-suite/cpp0x_constructors.i =================================================================== --- branches/gsoc2009-matevz/Examples/test-suite/cpp0x_constructors.i 2012-09-25 19:29:13 UTC (rev 13851) +++ branches/gsoc2009-matevz/Examples/test-suite/cpp0x_constructors.i 2012-09-25 20:22:15 UTC (rev 13852) @@ -1,30 +0,0 @@ -/* This test checks whether SWIG correctly parses the new delegating - constructors and constructor inheritance. -*/ -%module cpp0x_constructors - -%inline %{ -class BaseClass { -private: - int _val; -public: - BaseClass(int iValue) { _val = iValue; } -}; - -class DerivedClass: public BaseClass { -public: - using BaseClass::BaseClass; // Adds DerivedClass(int) constructor -}; - -class A { -public: - int a; - int b; - int c; - - A() : A( 10 ) {} - A(int aa) : A(aa, 20) {} - A(int aa, int bb) : A(aa, bb, 30) {} - A(int aa, int bb, int cc) { a=aa; b=bb; c=cc; } -}; -%} Copied: branches/gsoc2009-matevz/Examples/test-suite/cpp0x_delegating_constructors.i (from rev 12181, branches/gsoc2009-matevz/Examples/test-suite/cpp0x_constructors.i) =================================================================== --- branches/gsoc2009-matevz/Examples/test-suite/cpp0x_delegating_constructors.i (rev 0) +++ branches/gsoc2009-matevz/Examples/test-suite/cpp0x_delegating_constructors.i 2012-09-25 20:22:15 UTC (rev 13852) @@ -0,0 +1,18 @@ +/* This test checks whether SWIG correctly parses the new delegating + constructors. +*/ +%module cpp0x_delegating_constructors + +%inline %{ +class A { +public: + int a; + int b; + int c; + + A() : A( 10 ) {} + A(int aa) : A(aa, 20) {} + A(int aa, int bb) : A(aa, bb, 30) {} + A(int aa, int bb, int cc) { a=aa; b=bb; c=cc; } +}; +%} Added: branches/gsoc2009-matevz/Examples/test-suite/cpp0x_inheriting_constructors.i =================================================================== --- branches/gsoc2009-matevz/Examples/test-suite/cpp0x_inheriting_constructors.i (rev 0) +++ branches/gsoc2009-matevz/Examples/test-suite/cpp0x_inheriting_constructors.i 2012-09-25 20:22:15 UTC (rev 13852) @@ -0,0 +1,18 @@ +/* This test checks whether SWIG correctly parses the new constructor + inheritance. +*/ +%module cpp0x_inheriting_constructors + +%inline %{ +class BaseClass { +private: + int _val; +public: + BaseClass(int iValue) { _val = iValue; } +}; + +class DerivedClass: public BaseClass { +public: + using BaseClass::BaseClass; // Adds DerivedClass(int) constructor +}; +%} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-10-01 18:53:18
|
Revision: 13854 http://swig.svn.sourceforge.net/swig/?rev=13854&view=rev Author: wsfulton Date: 2012-10-01 18:53:12 +0000 (Mon, 01 Oct 2012) Log Message: ----------- Lambda expressions: parse exception specification in lambda functions. Fix lambda testcase for gcc-4.7. Modified Paths: -------------- branches/gsoc2009-matevz/Examples/test-suite/cpp0x_lambda_functions.i branches/gsoc2009-matevz/Source/CParse/parser.y Modified: branches/gsoc2009-matevz/Examples/test-suite/cpp0x_lambda_functions.i =================================================================== --- branches/gsoc2009-matevz/Examples/test-suite/cpp0x_lambda_functions.i 2012-10-01 17:18:27 UTC (rev 13853) +++ branches/gsoc2009-matevz/Examples/test-suite/cpp0x_lambda_functions.i 2012-10-01 18:53:12 UTC (rev 13854) @@ -19,8 +19,24 @@ auto lambda3 = [&](int x, int y) { return x+y; }; auto lambda4 = [=](int x, int y) { return x+y; }; int thing = 0; +#ifdef SWIG +// Not strictly correct as captured variables should have non-automatic storage duration, ie shouldn't capture globals. gcc-4.7 warns about this, but we check that SWIG can parse this anyway. auto lambda5 = [=,&thing]() { return thing;}; +#else +auto lambda5 = [=]() { return thing;}; +#endif +void fn() { + int stuff = 0; + auto lambdaxxxx = [=,&stuff]() { return thing;}; +} +auto lambda6 = [] (int a, int b) mutable { return a + b; }; +auto lambda7 = [] (int x, int y) -> int { return x+y; }; +auto lambda8 = [] (int x, int y) throw() -> int { return x+y; }; +auto lambda9 = [] (int x, int y) mutable throw() -> int { return x+y; }; +auto lambda10 = [] (int x, int y) throw(int) { return x+y; }; +auto lambda11 = [] (int x, int y) mutable throw(int) { return x+y; }; + int runLambda1() { return lambda1(5,6); } @@ -49,3 +65,16 @@ } %} +%{ +// TODO +struct LambdaStruct { + static constexpr auto lambda_struct1 = [=]() { return thing;}; +}; +auto lambda100 = [] { return thing;}; +int lambda101 = [] (int a, int b) { return a + b; }(1, 2); +int lambda102 = [] (int a, int b) mutable { return a + b; }(1, 2); +auto lambda103 = [] () throw () { /* does not throw */ }; +auto lambda104 = [] () mutable throw () { /* does not throw */ }; +void lambda_init(int = ([=]{ return 0; })()); +%} + Modified: branches/gsoc2009-matevz/Source/CParse/parser.y =================================================================== --- branches/gsoc2009-matevz/Source/CParse/parser.y 2012-10-01 17:18:27 UTC (rev 13853) +++ branches/gsoc2009-matevz/Source/CParse/parser.y 2012-10-01 18:53:12 UTC (rev 13854) @@ -3295,8 +3295,9 @@ OR auto myFunc = [](int x, int y) { return x+y; } */ -c_lambda_decl : c_lambda_decl_front LPAREN parms RPAREN LBRACE { skip_balanced('{','}'); } SEMI { $$ = 0; } - | c_lambda_decl_front LPAREN parms RPAREN ARROW type LBRACE { skip_balanced('{','}'); } SEMI { $$ = 0; } +c_lambda_decl : c_lambda_decl_front LPAREN parms RPAREN cpp_const LBRACE { skip_balanced('{','}'); } SEMI { $$ = 0; } + | c_lambda_decl_front LPAREN parms RPAREN cpp_const ARROW type LBRACE { skip_balanced('{','}'); } SEMI { $$ = 0; } + ; c_lambda_decl_front : storage_class AUTO idcolon EQUAL LBRACKET { skip_balanced('[',']'); $$ = 0; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-10-02 21:12:42
|
Revision: 13858 http://swig.svn.sourceforge.net/swig/?rev=13858&view=rev Author: wsfulton Date: 2012-10-02 21:12:36 +0000 (Tue, 02 Oct 2012) Log Message: ----------- Add in support for initialising auto variables from lambda expressions Modified Paths: -------------- branches/gsoc2009-matevz/Examples/test-suite/cpp0x_lambda_functions.i branches/gsoc2009-matevz/Source/CParse/parser.y Modified: branches/gsoc2009-matevz/Examples/test-suite/cpp0x_lambda_functions.i =================================================================== --- branches/gsoc2009-matevz/Examples/test-suite/cpp0x_lambda_functions.i 2012-10-02 14:54:28 UTC (rev 13857) +++ branches/gsoc2009-matevz/Examples/test-suite/cpp0x_lambda_functions.i 2012-10-02 21:12:36 UTC (rev 13858) @@ -36,6 +36,10 @@ auto lambda9 = [] (int x, int y) mutable throw() -> int { return x+y; }; auto lambda10 = [] (int x, int y) throw(int) { return x+y; }; auto lambda11 = [] (int x, int y) mutable throw(int) { return x+y; }; +auto lambda12 = [] (int a, int b) { return a + b; }(1, 2); +auto lambda13 = [] (int a, int b) mutable { return a + b; }(1, 2); +auto lambda14 = [] () throw () {}; +auto lambda15 = [] () mutable throw () {}; int runLambda1() { return lambda1(5,6); @@ -70,11 +74,9 @@ struct LambdaStruct { static constexpr auto lambda_struct1 = [=]() { return thing;}; }; +int(*lambda101notauto)(int, int) = [] (int a, int b) { return a + b; }; auto lambda100 = [] { return thing;}; -int lambda101 = [] (int a, int b) { return a + b; }(1, 2); int lambda102 = [] (int a, int b) mutable { return a + b; }(1, 2); -auto lambda103 = [] () throw () { /* does not throw */ }; -auto lambda104 = [] () mutable throw () { /* does not throw */ }; void lambda_init(int = ([=]{ return 0; })()); %} Modified: branches/gsoc2009-matevz/Source/CParse/parser.y =================================================================== --- branches/gsoc2009-matevz/Source/CParse/parser.y 2012-10-02 14:54:28 UTC (rev 13857) +++ branches/gsoc2009-matevz/Source/CParse/parser.y 2012-10-02 21:12:36 UTC (rev 13858) @@ -1690,7 +1690,7 @@ %type <node> types_directive template_directive warn_directive ; /* C declarations */ -%type <node> c_declaration c_decl c_decl_tail c_enum_key c_enum_inherit c_enum_decl c_enum_forward_decl c_constructor_decl c_lambda_decl c_lambda_decl_front ; +%type <node> c_declaration c_decl c_decl_tail c_enum_key c_enum_inherit c_enum_decl c_enum_forward_decl c_constructor_decl; %type <node> enumlist edecl; /* C++ declarations */ @@ -1698,7 +1698,7 @@ %type <node> cpp_members cpp_member; %type <node> cpp_constructor_decl cpp_destructor_decl cpp_protection_decl cpp_conversion_operator cpp_static_assert; %type <node> cpp_swig_directive cpp_temp_possible cpp_nested cpp_opt_declarators ; -%type <node> cpp_using_decl cpp_namespace_decl cpp_catch_decl ; +%type <node> cpp_using_decl cpp_namespace_decl cpp_catch_decl cpp_lambda_decl; %type <node> kwargs options; /* Misc */ @@ -1735,6 +1735,8 @@ %type <ptype> type_specifier primitive_type_list ; %type <node> fname stringtype; %type <node> featattr; +%type <node> lambda_introducer lambda_body; +%type <pl> lambda_tail; %% @@ -3098,7 +3100,7 @@ appendChild($$,firstChild($5)); } } - | c_lambda_decl { Swig_warning(WARN_CPP11_LAMBDA, cparse_file, cparse_line,"Lambda expressions and closures are not fully supported yet.\n"); $$ = $1; } + | cpp_lambda_decl { Swig_warning(WARN_CPP11_LAMBDA, cparse_file, cparse_line,"Lambda expressions and closures are not fully supported yet.\n"); $$ = $1; } | USING idcolon EQUAL { skip_decl(); Swig_warning(WARN_CPP11_ALIAS_DECLARATION, cparse_file, cparse_line,"The 'using' keyword in type aliasing is not fully supported yet.\n"); $$ = 0; } | TEMPLATE LESSTHAN template_parms GREATERTHAN USING idcolon EQUAL { skip_decl(); Swig_warning(WARN_CPP11_ALIAS_TEMPLATE, cparse_file, cparse_line,"The 'using' keyword in template aliasing is not fully supported yet.\n"); $$ = 0; } ; @@ -3290,18 +3292,41 @@ | decltype { $$ = $1; } ; -/* Lambda function syntax introduced in C++0x. - auto myFunc = [](int x, int y) -> int { return x+y; } - OR - auto myFunc = [](int x, int y) { return x+y; } +/* + Lambda functions and expressions, such as: + auto myFunc = [](int x, int y) -> int { return x+y; }; + auto myFunc = [](int x, int y) { return x+y; }; + auto myFunc = [](int x, int y) { return x+y; }(1, 2); */ -c_lambda_decl : c_lambda_decl_front LPAREN parms RPAREN cpp_const LBRACE { skip_balanced('{','}'); } SEMI { $$ = 0; } - | c_lambda_decl_front LPAREN parms RPAREN cpp_const ARROW type LBRACE { skip_balanced('{','}'); } SEMI { $$ = 0; } - ; +cpp_lambda_decl : storage_class AUTO idcolon EQUAL lambda_introducer LPAREN parms RPAREN cpp_const lambda_body lambda_tail { + $$ = 0; + } + | storage_class AUTO idcolon EQUAL lambda_introducer LPAREN parms RPAREN cpp_const ARROW type lambda_body lambda_tail { + $$ = 0; + } + ; -c_lambda_decl_front : storage_class AUTO idcolon EQUAL LBRACKET { skip_balanced('[',']'); $$ = 0; } +lambda_introducer : LBRACKET { + skip_balanced('[',']'); + $$ = 0; + } + ; +lambda_body : LBRACE { + skip_balanced('{','}'); + $$ = 0; + } +lambda_tail : SEMI { + $$ = 0; + } + | LPAREN { + skip_balanced('(',')'); + } SEMI { + $$ = 0; + } + ; + /* ------------------------------------------------------------ enum or This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-10-04 06:01:44
|
Revision: 13859 http://swig.svn.sourceforge.net/swig/?rev=13859&view=rev Author: wsfulton Date: 2012-10-04 06:01:38 +0000 (Thu, 04 Oct 2012) Log Message: ----------- More lambda support - for optional lambda declarators Modified Paths: -------------- branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html branches/gsoc2009-matevz/Examples/test-suite/cpp0x_lambda_functions.i branches/gsoc2009-matevz/Source/CParse/parser.y Modified: branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html =================================================================== --- branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html 2012-10-02 21:12:36 UTC (rev 13858) +++ branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html 2012-10-04 06:01:38 UTC (rev 13859) @@ -217,14 +217,29 @@ <H3><a name="Cpp0x_Lambda_functions_and_expressions"></a>7.2.8 Lambda functions and expressions</H3> -<p>SWIG correctly parses the Lambda functions syntax. For example:</p> +<p>SWIG correctly parses most of the Lambda functions syntax. For example:</p> <div class="code"><pre> +auto val = [] { return something; }; +auto sum = [](int x, int y) { return x+y; }; auto sum = [](int x, int y) -> int { return x+y; }; </pre></div> <p>The lambda functions are removed from the wrapper class for now, because of the lack of support for closures (scope of the lambda functions) in the target languages.</p> +<p> +Lambda functions used to create variables can also be parsed, but due to limited support of <tt>auto</tt> when +the type is deduced from the expression, the variables are simply ignored. +</p> + +<div class="code"><pre> +auto six = [](int x, int y) { return x+y; }(4, 2); +</pre></div> + +<p> +Better support should be available in a later release. +</p> + <H3><a name="Cpp0x_Alternate_function_syntax"></a>7.2.9 Alternate function syntax</H3> Modified: branches/gsoc2009-matevz/Examples/test-suite/cpp0x_lambda_functions.i =================================================================== --- branches/gsoc2009-matevz/Examples/test-suite/cpp0x_lambda_functions.i 2012-10-02 21:12:36 UTC (rev 13858) +++ branches/gsoc2009-matevz/Examples/test-suite/cpp0x_lambda_functions.i 2012-10-04 06:01:38 UTC (rev 13859) @@ -21,14 +21,14 @@ int thing = 0; #ifdef SWIG // Not strictly correct as captured variables should have non-automatic storage duration, ie shouldn't capture globals. gcc-4.7 warns about this, but we check that SWIG can parse this anyway. -auto lambda5 = [=,&thing]() { return thing;}; +auto lambda5 = [=,&thing]() { return thing; }; #else -auto lambda5 = [=]() { return thing;}; +auto lambda5 = [=]() { return thing; }; #endif void fn() { int stuff = 0; - auto lambdaxxxx = [=,&stuff]() { return thing;}; + auto lambdaxxxx = [=,&stuff]() { return thing; }; } auto lambda6 = [] (int a, int b) mutable { return a + b; }; auto lambda7 = [] (int x, int y) -> int { return x+y; }; @@ -40,6 +40,8 @@ auto lambda13 = [] (int a, int b) mutable { return a + b; }(1, 2); auto lambda14 = [] () throw () {}; auto lambda15 = [] () mutable throw () {}; +auto lambda16 = [] { return thing; }; +auto lambda17 = [] { return thing; }(); int runLambda1() { return lambda1(5,6); @@ -72,10 +74,9 @@ %{ // TODO struct LambdaStruct { - static constexpr auto lambda_struct1 = [=]() { return thing;}; + static constexpr auto lambda_struct1 = [=]() { return thing; }; }; int(*lambda101notauto)(int, int) = [] (int a, int b) { return a + b; }; -auto lambda100 = [] { return thing;}; int lambda102 = [] (int a, int b) mutable { return a + b; }(1, 2); void lambda_init(int = ([=]{ return 0; })()); %} Modified: branches/gsoc2009-matevz/Source/CParse/parser.y =================================================================== --- branches/gsoc2009-matevz/Source/CParse/parser.y 2012-10-02 21:12:36 UTC (rev 13858) +++ branches/gsoc2009-matevz/Source/CParse/parser.y 2012-10-04 06:01:38 UTC (rev 13859) @@ -3292,18 +3292,23 @@ | decltype { $$ = $1; } ; -/* - Lambda functions and expressions, such as: - auto myFunc = [](int x, int y) -> int { return x+y; }; - auto myFunc = [](int x, int y) { return x+y; }; - auto myFunc = [](int x, int y) { return x+y; }(1, 2); -*/ +/* ------------------------------------------------------------ + Lambda functions and expressions, such as: + auto myFunc = [] { return something; }; + auto myFunc = [](int x, int y) { return x+y; }; + auto myFunc = [](int x, int y) -> int { return x+y; }; + auto myFunc = [](int x, int y) throw() -> int { return x+y; }; + auto six = [](int x, int y) { return x+y; }(4, 2); + ------------------------------------------------------------ */ cpp_lambda_decl : storage_class AUTO idcolon EQUAL lambda_introducer LPAREN parms RPAREN cpp_const lambda_body lambda_tail { $$ = 0; } | storage_class AUTO idcolon EQUAL lambda_introducer LPAREN parms RPAREN cpp_const ARROW type lambda_body lambda_tail { $$ = 0; } + | storage_class AUTO idcolon EQUAL lambda_introducer lambda_body lambda_tail { + $$ = 0; + } ; lambda_introducer : LBRACKET { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-10-04 20:52:57
|
Revision: 13863 http://swig.svn.sourceforge.net/swig/?rev=13863&view=rev Author: wsfulton Date: 2012-10-04 20:52:51 +0000 (Thu, 04 Oct 2012) Log Message: ----------- Update variadic templates Modified Paths: -------------- branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html branches/gsoc2009-matevz/Examples/test-suite/cpp0x_variadic_templates.i Modified: branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html =================================================================== --- branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html 2012-10-04 20:31:40 UTC (rev 13862) +++ branches/gsoc2009-matevz/Doc/Manual/Cpp0x.html 2012-10-04 20:52:51 UTC (rev 13863) @@ -500,7 +500,7 @@ <H3><a name="Cpp0x_Variadic_templates"></a>7.2.17 Variadic templates</H3> -<p>SWIG fully supports the variadic templates syntax (inside the <> +<p>SWIG supports the variadic templates syntax (inside the <> block, variadic class inheritance and variadic constructor and initializers) with some limitations. The following code is correctly parsed:</p> @@ -517,11 +517,13 @@ const int SIZE = sizeof...(ClassName<int, int>); </pre></div> -<p>For now however, the <tt>%template</tt> directive only accepts at most the number of -arguments defined in the original template<> block:</p> +<p> +For now however, the <tt>%template</tt> directive only accepts one parameter substitution +for the variable template parameters. +</p> <div class="code"><pre> -%template(MyVariant1) ClassName<> // ok +%template(MyVariant1) ClassName<> // zero argument not supported %template(MyVariant2) ClassName<int> // ok %template(MyVariant3) ClassName<int, int> // too many arguments </pre></div> Modified: branches/gsoc2009-matevz/Examples/test-suite/cpp0x_variadic_templates.i =================================================================== --- branches/gsoc2009-matevz/Examples/test-suite/cpp0x_variadic_templates.i 2012-10-04 20:31:40 UTC (rev 13862) +++ branches/gsoc2009-matevz/Examples/test-suite/cpp0x_variadic_templates.i 2012-10-04 20:52:51 UTC (rev 13863) @@ -4,9 +4,9 @@ using variadic number of classes. */ %module cpp0x_variadic_templates -%warnfilter(507) MultiArgs1; -%warnfilter(507) SizeOf1; -%warnfilter(507) MultiInherit1; +%warnfilter(SWIGWARN_CPP11_VARIADIC_TEMPLATE) MultiArgs; +%warnfilter(SWIGWARN_CPP11_VARIADIC_TEMPLATE) SizeOf; +%warnfilter(SWIGWARN_CPP11_VARIADIC_TEMPLATE) MultiInherit; //////////////////////// // Variadic templates // @@ -36,7 +36,6 @@ }; %} -// TODO %template (SizeOf1) SizeOf<int, int>; ////////////////////////// @@ -48,7 +47,7 @@ A() { a = 100; } - + virtual ~A() {} int a; }; @@ -57,14 +56,22 @@ B() { b = 200; } + virtual ~B() {} int b; }; template <typename... BaseClasses> class MultiInherit : public BaseClasses... { public: - MultiInherit(BaseClasses&... baseClasses) : BaseClasses(baseClasses)... {} + MultiInherit(BaseClasses&... baseClasses) : BaseClasses(baseClasses)... {} + int InstanceMethod() { return 123; } + static int StaticMethod() { return 456; } }; %} + // TODO -%template (MultiInherit1) MultiInherit<A,B>; +//%template (MultiInherit0) MultiInherit<>; +%template (MultiInherit1) MultiInherit<A>; +// TODO +%template (MultiInherit2) MultiInherit<A,B>; + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wsf...@us...> - 2012-10-07 18:56:55
|
Revision: 13867 http://swig.svn.sourceforge.net/swig/?rev=13867&view=rev Author: wsfulton Date: 2012-10-07 18:56:48 +0000 (Sun, 07 Oct 2012) Log Message: ----------- Improve detection of C++11 compiler and set appropriate flags to use C++11/C++0x features Modified Paths: -------------- branches/gsoc2009-matevz/Examples/Makefile.in branches/gsoc2009-matevz/Examples/guile/Makefile.in branches/gsoc2009-matevz/configure.in Modified: branches/gsoc2009-matevz/Examples/Makefile.in =================================================================== --- branches/gsoc2009-matevz/Examples/Makefile.in 2012-10-07 18:50:41 UTC (rev 13866) +++ branches/gsoc2009-matevz/Examples/Makefile.in 2012-10-07 18:56:48 UTC (rev 13867) @@ -24,7 +24,7 @@ TARGET = CC = @CC@ CXX = @CXX@ -CFLAGS = @PLATFLAGS@ +CFLAGS = @PLATCFLAGS@ CXXFLAGS = @PLATCXXFLAGS@ prefix = @prefix@ exec_prefix= @exec_prefix@ Modified: branches/gsoc2009-matevz/Examples/guile/Makefile.in =================================================================== --- branches/gsoc2009-matevz/Examples/guile/Makefile.in 2012-10-07 18:50:41 UTC (rev 13866) +++ branches/gsoc2009-matevz/Examples/guile/Makefile.in 2012-10-07 18:56:48 UTC (rev 13867) @@ -6,7 +6,7 @@ SWIG = ../$(top_srcdir)/preinst-swig CC = @CC@ CXX = @CXX@ -CFLAGS = @PLATFLAGS@ +CFLAGS = @PLATCFLAGS@ GUILEINCLUDE = @GUILEINCLUDE@ GUILELINK = @GUILELINK@ SWIGOPT = Modified: branches/gsoc2009-matevz/configure.in =================================================================== --- branches/gsoc2009-matevz/configure.in 2012-10-07 18:50:41 UTC (rev 13866) +++ branches/gsoc2009-matevz/configure.in 2012-10-07 18:56:48 UTC (rev 13867) @@ -314,16 +314,21 @@ esac # Optional CFLAGS used to silence compiler warnings on some platforms. +AC_SUBST(PLATCFLAGS) +PLATCFLAGS= -AC_SUBST(PLATFLAGS) -PLATFLAGS= - -# Add switch to enable C++0x support +# Add switch if necessary to enable C++11 support - just for tests +AC_LANG_PUSH([C++]) +CXXFLAGS_SAVED=$CXXFLAGS +AX_CXX_COMPILE_STDCXX_11([noext], [nostop]) +CXXFLAGS=$CXXFLAGS_SAVED +AC_LANG_POP([C++]) AC_SUBST(PLATCXXFLAGS) -if test "$GCC" = yes; then - PLATCXXFLAGS=$PLATFLAGS" -std=c++0x " +AC_SUBST(HAVE_CXX11_COMPILER) +if test x"$CXX11FLAGS" = x; then + PLATCXXFLAGS="$PLATCFLAGS" else - PLATCXXFLAGS=$PLATFLAGS + PLATCXXFLAGS="$CXX11FLAGS $PLATCFLAGS" fi # Check for specific libraries. Used for SWIG examples This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |