Opened 14 years ago
Last modified 13 years ago
#2909 new Bugs
[Fix in git] Wrong type signatures?
Reported by: | Haoyu Bai | Owned by: | troy d. straszheim |
---|---|---|---|
Milestone: | Boost 1.39.0 | Component: | python USE GITHUB |
Version: | Boost 1.38.0 | Severity: | Problem |
Keywords: | Cc: | divinekid@… |
Description
In python/converter/builtin_converters.hpp, I found these lines:
BOOST_PYTHON_TO_PYTHON_BY_VALUE(signed BOOST_PYTHON_LONG_LONG, ::PyLong_FromLongLong(x), &PyInt_Type) BOOST_PYTHON_TO_PYTHON_BY_VALUE(unsigned BOOST_PYTHON_LONG_LONG, ::PyLong_FromUnsignedLongLong(x), &PyInt_Type)
and,
BOOST_PYTHON_TO_PYTHON_BY_VALUE(std::wstring, ::PyUnicode_FromWideChar(x.data(),implicit_cast<ssize_t>(x.size())), &PyString_Type)
Seems it is a typo. Should the PyInt_Type be PyLong_Type, and the PyString_Type be PyUnicode_Type?
These macro argument is used for generate the return value of get_pytype(). And seems get_pytype() is only used to generate docstring. So there's accutally no problem caused by these.
But, should these be typo? If so, we'd better fix it.
Thanks!
Attachments (3)
Change History (8)
comment:1 by , 14 years ago
Cc: | added |
---|
comment:2 by , 14 years ago
comment:3 by , 14 years ago
Testcase and patch attached.
Without the patch, the test giving the following result:
Docstring say: return_longlong() -> int : C++ signature : long long return_longlong() But actually type of return value is: <type 'long'> Docstring say: return_wstring() -> str : C++ signature : std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > return_wstring() But actually type of return value is: <type 'unicode'>
Notice the "return_longlong() -> int" and "return_wstring() -> str".
With the patch, the result seems correct:
Docstring say: return_longlong() -> long : C++ signature : long long return_longlong() But actually type of return value is: <type 'long'> Docstring say: return_wstring() -> unicode : C++ signature : std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > return_wstring() But actually type of return value is: <type 'unicode'>
Also, this patch don't affect other test cases, as they are all passed. I think it is just related to the docstring and won't touch any other things.
comment:4 by , 13 years ago
Owner: | changed from | to
---|
Looks like the fix made it to the trunk, but not the test, and I notice:
print return_string.doc
return_string() -> str :
C++ signature :
std::string return_string()
print return_wstring.doc
return_wstring() -> unicode :
C++ signature :
std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > return_wstring()
that that basic_string<wchar... should be simplified to std::wstring for readability. Working on it.
comment:5 by , 13 years ago
Summary: | Wrong type signatures? → [Fix in git] Wrong type signatures? |
---|
Fix here:
http://gitorious.org/~straszheim/boost/straszheim/commit/aeefdf7abca8c33c25a98a5f7fc78e4e888f9c94
also clean up printing of std::wstring as the gcc demangler was being messy about it.
The best way to know if these are bugs that need to be fixed is to produce test cases (a .cpp and a matching .py file—see this directory for examples) that currently fail and would stop failing if the fixes were made. Can you do that and post an attachment?
Thanks!