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)

typetypo.diff (1.6 KB ) - added by Haoyu Bai 14 years ago.
Patch to fix the typo
typetypo.cpp (325 bytes ) - added by Haoyu Bai 14 years ago.
Testcase showing the problem.
typetypo.py (305 bytes ) - added by Haoyu Bai 14 years ago.
Testcase showing the problem.

Download all attachments as: .zip

Change History (8)

comment:1 by Haoyu Bai, 14 years ago

Cc: divinekid@… added

comment:2 by Dave Abrahams, 14 years ago

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!

by Haoyu Bai, 14 years ago

Attachment: typetypo.diff added

Patch to fix the typo

by Haoyu Bai, 14 years ago

Attachment: typetypo.cpp added

Testcase showing the problem.

by Haoyu Bai, 14 years ago

Attachment: typetypo.py added

Testcase showing the problem.

comment:3 by Haoyu Bai, 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 troy d. straszheim, 13 years ago

Owner: changed from Dave Abrahams to troy d. straszheim

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 troy d. straszheim, 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.

Note: See TracTickets for help on using tickets.