[PyQt] infinite recursion bug in SIP generated code
Gerard Vermeulen
gav451 at gmail.com
Sun Nov 2 09:46:21 GMT 2008
Hi,
I ran into an infinite recursion bug in SIP generated code.
The bug is present in the latest snapshot but also in the 4.7.7
release.
After enabling the sip tracing flags, I get:
...
RGBA sipStandardColor::operator()(double,double,double) const
(this=0x0158bef0) RGBA
sipStandardColor::operator()(double,double,double) const
(this=0x0158bef0) RGBA
sipStandardColor::operator()(double,double,double) const
(this=0x0158bef0) Exception RuntimeError: 'maximum recursion depth
exceeded in __subclasscheck__' in <type 'exceptions.RuntimeError'>
ignored Exception RuntimeError: 'maximum recursion depth exceeded in
__subclasscheck__' in <type 'exceptions.RuntimeError'> ignored Error in
sys.excepthook: RuntimeError: maximum recursion depth exceeded while
calling a Python object
Original exception was:
RuntimeError: maximum recursion depth exceeded while calling a Python
object Exception RuntimeError: 'maximum recursion depth exceeded while
calling a Python object' in <type 'exceptions.RuntimeError'> ignored
RuntimeError
dealloc_RGBA()
dealloc_RGBA()
dealloc_RGBA()
...
The sip file is:
class Color
{
%TypeHeaderCode
#include <qwt3d_color.h>
#include <sip_Qwt3DColorVector.h>
using namespace Qwt3D;
%End // %TypeHeaderCode
public:
virtual RGBA operator()(double, double, double) const = 0;
virtual RGBA operator()(const Triple &) const;
virtual ColorVector & createVector(ColorVector &);
void destroy() const;
protected:
virtual ~Color();
}; // class Color
class StandardColor: Color
{
%TypeHeaderCode
#include <qwt3d_color.h>
#include <sip_Qwt3DColorVector.h>
using namespace Qwt3D;
%End // %TypeHeaderCode
public:
StandardColor(Plot3D * /TransferThis/, unsigned = 100);
virtual RGBA operator()(double, double, double) const;
void setColorVector(const ColorVector &);
void reset(unsigned = 100);
void setAlpha(double);
ColorVector & createVector(ColorVector &);
//protected:
// ColorVector colors_ /PyName=colors/;
// Plot3D * data_ /PyName=data/;
}; // class StandardColor
and the Python snippet showing the bug:
def setColor(self):
i, step = 252, 4
colorVector = ColorVector()
while (i>=0):
colorVector.push_back(RGBA(i/255.0, max((i-60)/255.0, 0.0),
0.0)) step -= 1
if step == 0:
i -= 4
step = 4
# BUG: color = StandardColor(self.plot)
# BUG: color.setColorVector(colorVector)
# BUG: self.plot.setDataColor(color)
Uncommenting the "# BUG:" out-commented lines makes the bug show up.
Regards -- Gerard
More information about the PyQt
mailing list