mirror of
https://github.com/wxWidgets/Phoenix.git
synced 2026-01-06 20:10:08 +01:00
Merge pull request #1655 from swt2c/fix_customobj_setdata
Fix stack overflow when overriding wx.CustomObject.SetData
This commit is contained in:
@@ -340,11 +340,11 @@ def run():
|
||||
body="return wxPyMakeBuffer(self->GetData(), self->GetSize());")
|
||||
|
||||
c.find('SetData').ignore()
|
||||
c.addCppMethod('bool', 'SetData', '(wxPyBuffer* buf)',
|
||||
c.addCppMethod_sip('bool', 'SetData', '(wxPyBuffer* buf)',
|
||||
cppSignature='bool (size_t len, const void* buf)',
|
||||
isVirtual=True,
|
||||
doc="Copies data from the provided buffer to this data object's buffer",
|
||||
body="return self->SetData(buf->m_len, buf->m_ptr);")
|
||||
body="sipRes = (sipSelfWasArg ? sipCpp-> ::wxCustomDataObject::SetData(buf->m_len, buf->m_ptr) : sipCpp->SetData(buf->m_len, buf->m_ptr));")
|
||||
|
||||
addGetAllFormats(c)
|
||||
addBaseVirtuals(c)
|
||||
|
||||
@@ -908,16 +908,30 @@ from .%s import *
|
||||
assert isinstance(method, extractors.CppMethodDef_sip)
|
||||
if method.ignored:
|
||||
return
|
||||
_needDocstring = getattr(method, '_needDocstring', True)
|
||||
cppSig = " [ %s ]" % method.cppSignature if method.cppSignature else ""
|
||||
if method.isCtor:
|
||||
stream.write('%s%s%s%s%s;\n' %
|
||||
(indent, method.name, method.argsString, self.annotate(method), cppSig))
|
||||
else:
|
||||
stream.write('%s%s %s%s%s%s;\n' %
|
||||
(indent, method.type, method.name, method.argsString,
|
||||
virtual = "virtual " if method.isVirtual else ""
|
||||
stream.write('%s%s%s %s%s%s%s;\n' %
|
||||
(indent, virtual, method.type, method.name, method.argsString,
|
||||
self.annotate(method), cppSig))
|
||||
# write the docstring
|
||||
if _needDocstring and not (method.isCtor or method.isDtor):
|
||||
self.generateDocstring(method, stream, indent)
|
||||
# We only write a docstring for the first overload, otherwise
|
||||
# SIP appends them all together.
|
||||
_needDocstring = False
|
||||
stream.write('%s%%MethodCode\n' % indent)
|
||||
if not (method.isCtor and method.isDtor):
|
||||
stream.write('%sPyErr_Clear();\n' % (indent+' '*4))
|
||||
stream.write('%sPy_BEGIN_ALLOW_THREADS\n' % (indent+' '*4))
|
||||
stream.write(nci(method.body, len(indent)+4))
|
||||
if not (method.isCtor and method.isDtor):
|
||||
stream.write('%sPy_END_ALLOW_THREADS\n' % (indent+' '*4))
|
||||
stream.write('%sif (PyErr_Occurred()) sipIsErr = 1;\n' % (indent+' '*4))
|
||||
stream.write('%s%%End\n\n' % indent)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user