Re: Build error "cast from âProfile* â to âintâ loses precision" - pa tch
Vadim Zeitlin <[email protected]> Wed, 6 Jun 2007 01:47:33 +0200
| Newsgroups | gmane.mail.mahogany.devel |
|---|---|
| Message-ID | <[email protected]> |
On Tue, 08 May 2007 17:15:53 +0200 Robert Cernansky <[email protected]> wrote: RC> Mahogany 0.67 does not build on my system if using --with-python=none RC> option. It cannot cast Profile* to int: RC> RC> mail/MailFolderCC.cpp: In member function `bool MailFolderCC::Open(MailFolder::OpenMode)': RC> mail/MailFolderCC.cpp:2478: error: cast from `Profile*' to `int' loses precision RC> mail/MailFolderCC.cpp: In member function `virtual void MailFolderCC::ExpungeMessages()': RC> mail/MailFolderCC.cpp:3314: error: cast from `Profile*' to `int' loses precision Thanks for reporting this and sorry for the delay with replying! RC> It probably affects only 64-bit systems. Change from int to long in RC> PY_CALLBACK stuff fixed it. Here is the patch: It doesn't seem right to cast pointers to longs (even if they're big enough) and, more importantly, this shouldn't be necessary at all and the cast only happens because the order of arguments in PY_CALLBACK is mixed up when !USE_PYTHON. Below is my version of the fix, for reference. Thanks, VZ Index: include/Mcommon.h =================================================================== --- include/Mcommon.h (revision 7273) +++ include/Mcommon.h (working copy) @@ -126,8 +126,9 @@ These macros do nothing and return the default returnvalue when Python is disabled. */ +#ifdef USE_PYTHON + //@{ -#ifdef USE_PYTHON /** This macro takes three arguments: the callback function name to look up in a profile, a default return value, and a profile pointer (can be NULL). @@ -135,7 +136,9 @@ object needs to support the GetClasName() method to get the Python class name for the argument. */ -# define PY_CALLBACK(name,default,profile) PythonCallback(name,default,this,this->GetClassName(),profile) +# define PY_CALLBACK(name, def, profile) \ + PythonCallback(name,def,this,this->GetClassName(),profile) + /** This macro takes multiple arguments. The last argument is the default return value. The first argument is a list of arguments in brackets, it must @@ -147,14 +150,15 @@ must follow the format string. */ -# define PY_CALLBACKVA(arg,default) PythonCallback arg -#else -# define PY_CALLBACK(name, profile, default) PythonCallback((int)default) - inline int PythonCallback(int def) { return def; } -# define PY_CALLBACKVA(arg,default) PythonCallback((int)default) -#endif +# define PY_CALLBACKVA(arg, def) PythonCallback arg //@} +#else // !USE_PYTHON +# define PY_CALLBACK(name, def, profile) (def) +# define PY_CALLBACKVA(arg, def) (def) +#endif // USE_PYTHON/!USE_PYTHON + + // ---------------------------------------------------------------------------- // misc types // ---------------------------------------------------------------------------- ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/