Part/Sketcher: [skip ci] fix build failures with gcc 10 on Fedora
When using gcc 10 and PyCXX 7.1.4 on Fedora there is an error because the conversion from size_t to Py_ssize_t is ambiguous See https://forum.freecadweb.org/viewtopic.php?f=4&t=52502 The class Py::Tuple is also incorrectly used here and causes a memory leak
This commit is contained in:
@@ -248,7 +248,8 @@ PyObject* GeometryPy::getExtensionOfType(PyObject *args)
|
||||
std::shared_ptr<const GeometryExtension> ext(this->getGeometryPtr()->getExtension(type));
|
||||
|
||||
// we create a copy and transfer this copy's memory management responsibility to Python
|
||||
PyObject* cpy = static_cast<GeometryExtensionPy *>(std::const_pointer_cast<GeometryExtension>(ext)->getPyObject())->copy(Py::new_reference_to(Py::Tuple(size_t(0))));
|
||||
Py::Tuple tuple;
|
||||
PyObject* cpy = static_cast<GeometryExtensionPy *>(std::const_pointer_cast<GeometryExtension>(ext)->getPyObject())->copy(tuple.ptr());
|
||||
|
||||
return cpy;
|
||||
}
|
||||
@@ -282,7 +283,8 @@ PyObject* GeometryPy::getExtensionOfName(PyObject *args)
|
||||
std::shared_ptr<const GeometryExtension> ext(this->getGeometryPtr()->getExtension(std::string(o)));
|
||||
|
||||
// we create a copy and transfer this copy's memory management responsibility to Python
|
||||
PyObject* cpy = static_cast<GeometryExtensionPy *>(std::const_pointer_cast<GeometryExtension>(ext)->getPyObject())->copy(Py::new_reference_to(Py::Tuple(size_t(0))));
|
||||
Py::Tuple tuple;
|
||||
PyObject* cpy = static_cast<GeometryExtensionPy *>(std::const_pointer_cast<GeometryExtension>(ext)->getPyObject())->copy(tuple.ptr());
|
||||
|
||||
return cpy;
|
||||
}
|
||||
@@ -408,8 +410,6 @@ PyObject* GeometryPy::getExtensions(PyObject *args)
|
||||
|
||||
PyObject* list = PyList_New(ext.size());
|
||||
|
||||
Py::Tuple tuple(ext.size());
|
||||
|
||||
for (std::size_t i=0; i<ext.size(); ++i) {
|
||||
|
||||
// const casting only to get the Python object to make a copy
|
||||
@@ -417,7 +417,8 @@ PyObject* GeometryPy::getExtensions(PyObject *args)
|
||||
|
||||
if(p) {
|
||||
// we create a python copy and add it to the list
|
||||
PyObject* cpy = static_cast<GeometryExtensionPy *>(p->getPyObject())->copy(Py::new_reference_to(Py::Tuple(size_t(0))));
|
||||
Py::Tuple tuple;
|
||||
PyObject* cpy = static_cast<GeometryExtensionPy *>(p->getPyObject())->copy(tuple.ptr());
|
||||
|
||||
PyList_SetItem( list, i, cpy);
|
||||
}
|
||||
|
||||
@@ -270,7 +270,8 @@ PyObject* ExternalGeometryFacadePy::getExtensionOfType(PyObject *args)
|
||||
std::shared_ptr<const Part::GeometryExtension> ext(this->getExternalGeometryFacadePtr()->getExtension(type));
|
||||
|
||||
// we create a copy and transfer this copy's memory management responsibility to Python
|
||||
PyObject* cpy = static_cast<Part::GeometryExtensionPy *>(std::const_pointer_cast<Part::GeometryExtension>(ext)->getPyObject())->copy(Py::new_reference_to(Py::Tuple(size_t(0))));
|
||||
Py::Tuple tuple;
|
||||
PyObject* cpy = static_cast<Part::GeometryExtensionPy *>(std::const_pointer_cast<Part::GeometryExtension>(ext)->getPyObject())->copy(tuple.ptr());
|
||||
|
||||
return cpy;
|
||||
}
|
||||
@@ -304,7 +305,8 @@ PyObject* ExternalGeometryFacadePy::getExtensionOfName(PyObject *args)
|
||||
std::shared_ptr<const Part::GeometryExtension> ext(this->getExternalGeometryFacadePtr()->getExtension(std::string(o)));
|
||||
|
||||
// we create a copy and transfer this copy's memory management responsibility to Python
|
||||
PyObject* cpy = static_cast<Part::GeometryExtensionPy *>(std::const_pointer_cast<Part::GeometryExtension>(ext)->getPyObject())->copy(Py::new_reference_to(Py::Tuple(size_t(0))));
|
||||
Py::Tuple tuple;
|
||||
PyObject* cpy = static_cast<Part::GeometryExtensionPy *>(std::const_pointer_cast<Part::GeometryExtension>(ext)->getPyObject())->copy(tuple.ptr());
|
||||
|
||||
return cpy;
|
||||
}
|
||||
@@ -430,15 +432,14 @@ PyObject* ExternalGeometryFacadePy::getExtensions(PyObject *args)
|
||||
|
||||
PyObject* list = PyList_New(ext.size());
|
||||
|
||||
Py::Tuple tuple(ext.size());
|
||||
|
||||
for (std::size_t i=0; i<ext.size(); ++i) {
|
||||
|
||||
std::shared_ptr<const Part::GeometryExtension> p = ext[i].lock();
|
||||
|
||||
if(p) {
|
||||
// we create a python copy and add it to the list
|
||||
PyObject* cpy = static_cast<Part::GeometryExtensionPy *>(std::const_pointer_cast<Part::GeometryExtension>(p)->getPyObject())->copy(Py::new_reference_to(Py::Tuple(size_t(0))));
|
||||
Py::Tuple tuple;
|
||||
PyObject* cpy = static_cast<Part::GeometryExtensionPy *>(std::const_pointer_cast<Part::GeometryExtension>(p)->getPyObject())->copy(tuple.ptr());
|
||||
|
||||
PyList_SetItem( list, i, cpy);
|
||||
}
|
||||
|
||||
@@ -209,7 +209,8 @@ PyObject* GeometryFacadePy::getExtensionOfType(PyObject *args)
|
||||
std::shared_ptr<const Part::GeometryExtension> ext(this->getGeometryFacadePtr()->getExtension(type));
|
||||
|
||||
// we create a copy and transfer this copy's memory management responsibility to Python
|
||||
PyObject* cpy = static_cast<Part::GeometryExtensionPy *>(std::const_pointer_cast<Part::GeometryExtension>(ext)->getPyObject())->copy(Py::new_reference_to(Py::Tuple(size_t(0))));
|
||||
Py::Tuple tuple;
|
||||
PyObject* cpy = static_cast<Part::GeometryExtensionPy *>(std::const_pointer_cast<Part::GeometryExtension>(ext)->getPyObject())->copy(tuple.ptr());
|
||||
|
||||
return cpy;
|
||||
}
|
||||
@@ -243,7 +244,8 @@ PyObject* GeometryFacadePy::getExtensionOfName(PyObject *args)
|
||||
std::shared_ptr<const Part::GeometryExtension> ext(this->getGeometryFacadePtr()->getExtension(std::string(o)));
|
||||
|
||||
// we create a copy and transfer this copy's memory management responsibility to Python
|
||||
PyObject* cpy = static_cast<Part::GeometryExtensionPy *>(std::const_pointer_cast<Part::GeometryExtension>(ext)->getPyObject())->copy(Py::new_reference_to(Py::Tuple(size_t(0))));
|
||||
Py::Tuple tuple;
|
||||
PyObject* cpy = static_cast<Part::GeometryExtensionPy *>(std::const_pointer_cast<Part::GeometryExtension>(ext)->getPyObject())->copy(tuple.ptr());
|
||||
|
||||
return cpy;
|
||||
}
|
||||
@@ -369,15 +371,14 @@ PyObject* GeometryFacadePy::getExtensions(PyObject *args)
|
||||
|
||||
PyObject* list = PyList_New(ext.size());
|
||||
|
||||
Py::Tuple tuple(ext.size());
|
||||
|
||||
for (std::size_t i=0; i<ext.size(); ++i) {
|
||||
|
||||
std::shared_ptr<const Part::GeometryExtension> p = ext[i].lock();
|
||||
|
||||
if(p) {
|
||||
// we create a python copy and add it to the list
|
||||
PyObject* cpy = static_cast<Part::GeometryExtensionPy *>(std::const_pointer_cast<Part::GeometryExtension>(p)->getPyObject())->copy(Py::new_reference_to(Py::Tuple(size_t(0))));
|
||||
Py::Tuple tuple;
|
||||
PyObject* cpy = static_cast<Part::GeometryExtensionPy *>(std::const_pointer_cast<Part::GeometryExtension>(p)->getPyObject())->copy(tuple.ptr());
|
||||
|
||||
PyList_SetItem( list, i, cpy);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user