Fix various Py::Object leak

This commit is contained in:
Zheng, Lei
2019-10-08 09:19:17 +08:00
committed by wwmayer
parent e764e6fee3
commit 8426ebe2ba
24 changed files with 40 additions and 40 deletions

View File

@@ -67,7 +67,7 @@ PyObject* ComplexGeoDataPy::getFacesFromSubelement(PyObject *args)
Py::List vertex;
for (std::vector<Base::Vector3d>::const_iterator it = points.begin();
it != points.end(); ++it)
vertex.append(Py::Object(new Base::VectorPy(*it)));
vertex.append(Py::asObject(new Base::VectorPy(*it)));
tuple.setItem(0, vertex);
Py::List facet;
for (std::vector<Data::ComplexGeoData::Facet>::const_iterator

View File

@@ -508,7 +508,7 @@ PyObject* DocumentObjectPy::getSubObject(PyObject *args, PyObject *keywds)
}
Py::Tuple rret(retType==1?2:3);
rret.setItem(0,ret[0].obj);
rret.setItem(1,Py::Object(new Base::MatrixPy(ret[0].mat)));
rret.setItem(1,Py::asObject(new Base::MatrixPy(ret[0].mat)));
if(retType!=1)
rret.setItem(2,ret[0].pyObj);
return Py::new_reference_to(rret);
@@ -534,7 +534,7 @@ PyObject* DocumentObjectPy::getSubObject(PyObject *args, PyObject *keywds)
} else {
Py::Tuple rret(retType==1?2:3);
rret.setItem(0,ret[i].obj);
rret.setItem(1,Py::Object(new Base::MatrixPy(ret[i].mat)));
rret.setItem(1,Py::asObject(new Base::MatrixPy(ret[i].mat)));
if(retType!=1)
rret.setItem(2,ret[i].pyObj);
tuple.setItem(i,rret);
@@ -601,7 +601,7 @@ PyObject* DocumentObjectPy::getLinkedObject(PyObject *args, PyObject *keywds)
if(mat) {
Py::Tuple ret(2);
ret.setItem(0,pyObj);
ret.setItem(1,Py::Object(new Base::MatrixPy(*mat)));
ret.setItem(1,Py::asObject(new Base::MatrixPy(*mat)));
return Py::new_reference_to(ret);
}
return Py::new_reference_to(pyObj);

View File

@@ -435,7 +435,7 @@ static Py::Object _pyObjectFromAny(const App::any &value, const Expression *e) {
else if (isAnyPyObject(value))
return __pyObjectFromAny(value);
if (is_type(value,typeid(Quantity)))
return Py::Object(new QuantityPy(new Quantity(cast<Quantity>(value))));
return Py::asObject(new QuantityPy(new Quantity(cast<Quantity>(value))));
else if (is_type(value,typeid(double)))
return Py::Float(cast<double>(value));
else if (is_type(value,typeid(float)))
@@ -543,7 +543,7 @@ static inline Quantity pyToQuantity(const Py::Object &pyobj,
Py::Object pyFromQuantity(const Quantity &quantity) {
if(!quantity.getUnit().isEmpty())
return Py::Object(new QuantityPy(new Quantity(quantity)));
return Py::asObject(new QuantityPy(new Quantity(quantity)));
double v = quantity.getValue();
long l;
int i;
@@ -2073,7 +2073,7 @@ Py::Object FunctionExpression::evaluate(const Expression *expr, int f, const std
else {
auto mat = static_cast<Base::MatrixPy*>(pymat.ptr())->value();
mat.scale(vec);
return Py::Object(new Base::MatrixPy(mat));
return Py::asObject(new Base::MatrixPy(mat));
}
}
_EXPR_THROW("Function requires arguments to be either "
@@ -2091,15 +2091,15 @@ Py::Object FunctionExpression::evaluate(const Expression *expr, int f, const std
if (fabs(m.determinant()) <= DBL_EPSILON)
_EXPR_THROW("Cannot invert singular matrix.",expr);
m.inverseGauss();
return Py::Object(new Base::MatrixPy(m));
return Py::asObject(new Base::MatrixPy(m));
} else if (PyObject_TypeCheck(pyobj.ptr(),&Base::PlacementPy::Type)) {
const auto &pla = *static_cast<Base::PlacementPy*>(pyobj.ptr())->getPlacementPtr();
return Py::Object(new Base::PlacementPy(pla.inverse()));
return Py::asObject(new Base::PlacementPy(pla.inverse()));
} else if (PyObject_TypeCheck(pyobj.ptr(),&Base::RotationPy::Type)) {
const auto &rot = *static_cast<Base::RotationPy*>(pyobj.ptr())->getRotationPtr();
return Py::Object(new Base::RotationPy(rot.inverse()));
return Py::asObject(new Base::RotationPy(rot.inverse()));
}
_EXPR_THROW("Function requires the first argument to be either Matrix, Placement or Rotation.",expr);
@@ -2110,13 +2110,13 @@ Py::Object FunctionExpression::evaluate(const Expression *expr, int f, const std
std::string type(pytype.as_string());
Py::Object res;
if(boost::iequals(type,"matrix"))
res = Py::Object(new Base::MatrixPy(Base::Matrix4D()));
res = Py::asObject(new Base::MatrixPy(Base::Matrix4D()));
else if(boost::iequals(type,"vector"))
res = Py::Object(new Base::VectorPy(Base::Vector3d()));
res = Py::asObject(new Base::VectorPy(Base::Vector3d()));
else if(boost::iequals(type,"placement"))
res = Py::Object(new Base::PlacementPy(Base::Placement()));
res = Py::asObject(new Base::PlacementPy(Base::Placement()));
else if(boost::iequals(type,"rotation"))
res = Py::Object(new Base::RotationPy(Base::Rotation()));
res = Py::asObject(new Base::RotationPy(Base::Rotation()));
else
_EXPR_THROW("Unknown type '" << type << "'.",expr);
if(args.size()>1) {
@@ -2342,7 +2342,7 @@ Py::Object FunctionExpression::evaluate(const Expression *expr, int f, const std
_EXPR_THROW("Unknown function: " << f,expr);
}
return Py::Object(new QuantityPy(new Quantity(scaler * output, unit)));
return Py::asObject(new QuantityPy(new Quantity(scaler * output, unit)));
}
Py::Object FunctionExpression::_getPyValue() const {

View File

@@ -236,7 +236,7 @@ bool FeaturePythonImp::getSubObject(DocumentObject *&ret, const char *subname,
args.setItem(2,Py::Int(pyObj?2:1));
Base::MatrixPy *pyMat = new Base::MatrixPy(new Base::Matrix4D);
if(_mat) *pyMat->getMatrixPtr() = *_mat;
args.setItem(3,Py::Object(pyMat));
args.setItem(3,Py::asObject(pyMat));
args.setItem(4,Py::Boolean(transform));
args.setItem(5,Py::Int(depth));
@@ -326,7 +326,7 @@ bool FeaturePythonImp::getLinkedObject(DocumentObject *&ret, bool recurse,
args.setItem(1,Py::Boolean(recurse));
Base::MatrixPy *pyMat = new Base::MatrixPy(new Base::Matrix4D);
if(_mat) *pyMat->getMatrixPtr() = *_mat;
args.setItem(2,Py::Object(pyMat));
args.setItem(2,Py::asObject(pyMat));
args.setItem(3,Py::Boolean(transform));
args.setItem(4,Py::Int(depth));

View File

@@ -1934,7 +1934,7 @@ PyObject *PropertyLinkSubList::getPyObject(void)
#endif
for (unsigned int i = 0; i<count; i++) {
Py::Tuple tup(2);
tup[0] = Py::Object(_lValueList[i]->getPyObject());
tup[0] = Py::asObject(_lValueList[i]->getPyObject());
std::string subItem;
if (_lSubList.size() > i)
subItem = _lSubList[i];

View File

@@ -560,7 +560,7 @@ void QuantityPy::setValue(Py::Float arg)
Py::Object QuantityPy::getUnit(void) const
{
return Py::Object(new UnitPy(new Unit(getQuantityPtr()->getUnit())));
return Py::asObject(new UnitPy(new Unit(getQuantityPtr()->getUnit())));
}
void QuantityPy::setUnit(Py::Object arg)

View File

@@ -394,7 +394,7 @@ Py::Object DocumentPy::getDocument(void) const
}
Py::Object DocumentPy::getEditingTransform(void) const {
return Py::Object(new Base::MatrixPy(new Base::Matrix4D(
return Py::asObject(new Base::MatrixPy(new Base::Matrix4D(
getDocumentPtr()->getEditingTransform())));
}

View File

@@ -655,7 +655,7 @@ Py::Object AbstractSplitViewPy::getViewer(const Py::Tuple& args)
Gui::View3DInventorViewer* view = _view->getViewer(viewIndex);
if (!view)
throw Py::IndexError("Index out of range");
return Py::Object(view->getPyObject());
return Py::asObject(view->getPyObject());
}
catch (const Base::Exception& e) {
throw Py::RuntimeError(e.what());
@@ -674,7 +674,7 @@ Py::Object AbstractSplitViewPy::sequence_item(ssize_t viewIndex)
if (viewIndex >= _view->getSize() || viewIndex < 0)
throw Py::IndexError("Index out of range");
PyObject* viewer = _view->getViewer(viewIndex)->getPyObject();
return Py::Object(viewer);
return Py::asObject(viewer);
}
int AbstractSplitViewPy::sequence_length()

View File

@@ -45,7 +45,7 @@ std::string ViewProviderLinkPy::representation(void) const
}
Py::Object ViewProviderLinkPy::getDraggingPlacement() const {
return Py::Object(new Base::PlacementPy(new Base::Placement(
return Py::asObject(new Base::PlacementPy(new Base::Placement(
getViewProviderLinkPtr()->currentDraggingPlacement())));
}

View File

@@ -1300,7 +1300,7 @@ Py::Tuple FemMeshPy::getGroups(void) const
Py::Object FemMeshPy::getVolume(void) const
{
return Py::Object(new Base::QuantityPy(new Base::Quantity(getFemMeshPtr()->getVolume())));
return Py::asObject(new Base::QuantityPy(new Base::Quantity(getFemMeshPtr()->getVolume())));
}

View File

@@ -425,7 +425,7 @@ PyObject* MeshPy::crossSections(PyObject *args)
for (MeshObject::TPolylines::const_iterator jt = it->begin(); jt != it->end(); ++jt) {
Py::List polyline;
for (std::vector<Base::Vector3f>::const_iterator kt = jt->begin(); kt != jt->end(); ++kt) {
polyline.append(Py::Object(new Base::VectorPy(*kt)));
polyline.append(Py::asObject(new Base::VectorPy(*kt)));
}
section.append(polyline);
}
@@ -1989,7 +1989,7 @@ Py::Tuple MeshPy::getTopology(void) const
Py::List vertex;
for (std::vector<Base::Vector3d>::const_iterator it = Points.begin();
it != Points.end(); ++it)
vertex.append(Py::Object(new Base::VectorPy(*it)));
vertex.append(Py::asObject(new Base::VectorPy(*it)));
tuple.setItem(0, vertex);
Py::List facet;
for (std::vector<Data::ComplexGeoData::Facet>::const_iterator

View File

@@ -2095,7 +2095,7 @@ private:
if(retType==0)
return sret;
return Py::TupleN(sret,Py::Object(new Base::MatrixPy(new Base::Matrix4D(mat))),
return Py::TupleN(sret,Py::asObject(new Base::MatrixPy(new Base::Matrix4D(mat))),
subObj?Py::Object(subObj->getPyObject(),true):Py::Object());
}

View File

@@ -466,7 +466,7 @@ PyObject* BSplineCurvePy::getPoles(PyObject * args)
gp_Pnt pnt = p(i);
Base::VectorPy* vec = new Base::VectorPy(Base::Vector3d(
pnt.X(), pnt.Y(), pnt.Z()));
poles.append(Py::Object(vec));
poles.append(Py::asObject(vec));
}
return Py::new_reference_to(poles);
}

View File

@@ -721,7 +721,7 @@ PyObject* BSplineSurfacePy::getPoles(PyObject *args)
Py::List row;
for (Standard_Integer j=p.LowerCol(); j<=p.UpperCol(); j++) {
const gp_Pnt& pole = p(i,j);
row.append(Py::Object(new Base::VectorPy(
row.append(Py::asObject(new Base::VectorPy(
Base::Vector3d(pole.X(),pole.Y(),pole.Z()))));
}
poles.append(row);

View File

@@ -233,7 +233,7 @@ PyObject* BezierCurvePy::getPoles(PyObject * args)
gp_Pnt pnt = p(i);
Base::VectorPy* vec = new Base::VectorPy(Base::Vector3d(
pnt.X(), pnt.Y(), pnt.Z()));
poles.append(Py::Object(vec));
poles.append(Py::asObject(vec));
}
return Py::new_reference_to(poles);
}

View File

@@ -510,7 +510,7 @@ PyObject* BezierSurfacePy::getPoles(PyObject *args)
Py::List row;
for (Standard_Integer j=p.LowerCol(); j<=p.UpperCol(); j++) {
const gp_Pnt& pole = p(i,j);
row.append(Py::Object(new Base::VectorPy(
row.append(Py::asObject(new Base::VectorPy(
Base::Vector3d(pole.X(),pole.Y(),pole.Z()))));
}
poles.append(row);

View File

@@ -769,7 +769,7 @@ PyObject* GeometryCurvePy::intersectCS(PyObject *args)
Py::List points;
for (int i = 1; i <= intersector.NbPoints(); i++) {
gp_Pnt p = intersector.Point(i);
points.append(Py::Object(new PointPy(new GeomPoint(Base::Vector3d(p.X(), p.Y(), p.Z())))));
points.append(Py::asObject(new PointPy(new GeomPoint(Base::Vector3d(p.X(), p.Y(), p.Z())))));
}
Py::List segments;
for (int i = 1; i <= intersector.NbSegments(); i++) {

View File

@@ -1920,7 +1920,7 @@ PyObject* TopoShapePy::tessellate(PyObject *args)
Py::List vertex;
for (std::vector<Base::Vector3d>::const_iterator it = Points.begin();
it != Points.end(); ++it)
vertex.append(Py::Object(new Base::VectorPy(*it)));
vertex.append(Py::asObject(new Base::VectorPy(*it)));
tuple.setItem(0, vertex);
Py::List facet;
for (std::vector<Data::ComplexGeoData::Facet>::const_iterator
@@ -2841,7 +2841,7 @@ Py::Object TopoShapePy::getLocation(void) const
mat[2][1] = trf.Value(3,2);
mat[2][2] = trf.Value(3,3);
mat[2][3] = trf.Value(3,4);
return Py::Object(new Base::MatrixPy(mat));
return Py::asObject(new Base::MatrixPy(mat));
}
void TopoShapePy::setLocation(Py::Object o)

View File

@@ -244,7 +244,7 @@ PyObject* CommandPy::setFromGCode(PyObject *args)
Py::Object CommandPy::getPlacement(void) const
{
return Py::Object(new Base::PlacementPy(new Base::Placement(getCommandPtr()->getPlacement())));
return Py::asObject(new Base::PlacementPy(new Base::Placement(getCommandPtr()->getPlacement())));
}
void CommandPy::setPlacement(Py::Object arg)

View File

@@ -90,7 +90,7 @@ Py::List PathPy::getCommands(void) const
{
Py::List list;
for(unsigned int i = 0; i < getToolpathPtr()->getSize(); i++)
list.append(Py::Object(new Path::CommandPy(new Path::Command(getToolpathPtr()->getCommand(i)))));
list.append(Py::asObject(new Path::CommandPy(new Path::Command(getToolpathPtr()->getCommand(i)))));
return list;
}

View File

@@ -237,7 +237,7 @@ Py::List PointsPy::getPoints(void) const
Py::List PointList;
const PointKernel* points = getPointKernelPtr();
for (PointKernel::const_point_iterator it = points->begin(); it != points->end(); ++it) {
PointList.append(Py::Object(new Base::VectorPy(*it)));
PointList.append(Py::asObject(new Base::VectorPy(*it)));
}
return PointList;
}

View File

@@ -140,7 +140,7 @@ void Robot6AxisPy::setAxis6(Py::Float arg)
Py::Object Robot6AxisPy::getTcp(void) const
{
return Py::Object(new Base::PlacementPy(new Base::Placement(getRobot6AxisPtr()->getTcp())));
return Py::asObject(new Base::PlacementPy(new Base::Placement(getRobot6AxisPtr()->getTcp())));
}
void Robot6AxisPy::setTcp(Py::Object value)

View File

@@ -154,7 +154,7 @@ Py::List TrajectoryPy::getWaypoints(void) const
{
Py::List list;
for(unsigned int i = 0; i < getTrajectoryPtr()->getSize(); i++)
list.append(Py::Object(new Robot::WaypointPy(new Robot::Waypoint(getTrajectoryPtr()->getWaypoint(i)))));
list.append(Py::asObject(new Robot::WaypointPy(new Robot::Waypoint(getTrajectoryPtr()->getWaypoint(i)))));
return list;
}

View File

@@ -200,7 +200,7 @@ Py::Tuple SketchPy::getGeometries(void) const
Py::Object SketchPy::getShape(void) const
{
return Py::Object(new TopoShapePy(new TopoShape(getSketchPtr()->toShape())));
return Py::asObject(new TopoShapePy(new TopoShape(getSketchPtr()->toShape())));
}