From: Bob H. <bh...@co...> - 2011-07-29 01:07:25
|
On 7/28/2011 2:07 PM, William S Fulton wrote: > On 26/07/11 00:27, Bob Hood wrote: >> This exhibits in 2.0.4, but I've also built and tried the trunk, and it has >> the same problem: >> >> arg1 = reinterpret_cast< myNamespace::myStructure *>(argp1); >> [...] >> { >> try { >> result = (int)(arg1)->check(arg2); >> } >> catch(Swig::DirectorException&e) { >> PyErr_SetString(PyExc_RuntimeError, e.getMessage()); >> } >> } >> >> ... error: expected primary-expression before 'int' >> ... error: expected ')' before 'int' >> >> Visual Studio 2008 compiles this without complaining (which is wrong). I had >> to compile on the Mac with gcc in order to discover it. >> > > How are we supposed to recreate this and help you without any source? You > must supply some cutdown standalone code to recreate. Sorry. Here's a test.i interface file: %module (naturalvar="1",directors="1") test # work around a bug in v2.0.4 #if SWIG_VERSION == 0x020004 %typemap(directorin) PyObject * "$input = $1_name;" #endif %include python.swg %include "TestClass.h" Here's the TestClass.h header I used to recreate it: typedef void* TypeID; class TestClass { public: // methods TestClass() {} virtual ~TestClass() {} int check(TypeID) { return 0; } }; SWIG command line: swig -python -c++ -outdir . -o ./test.cpp -naturalvar -noproxydel -I. test.i Here's the entire generated wrapper for the check() call that these two items create: SWIGINTERN PyObject *_wrap_TestClass_check(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; TestClass *arg1 = (TestClass *) 0 ; TypeID arg2 = (TypeID) 0 ; void *argp1 = 0 ; int res1 = 0 ; int res2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; int result; if (!PyArg_ParseTuple(args,(char *)"OO:TestClass_check",&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_TestClass, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TestClass_check" "', argument " "1"" of type '" "TestClass *""'"); } arg1 = reinterpret_cast< TestClass * >(argp1); res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2), 0, 0); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "TestClass_check" "', argument " "2"" of type '" "TypeID""'"); } result = (int)(arg1)->check(arg2); resultobj = SWIG_From_int(static_cast< int >(result)); return resultobj; fail: return NULL; } |