[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [54595] branches/soc-2008-mxcurioni/source /blender/freestyle/intern/python: Fix for pointers to auto variables returned from Python wrapper class methods .

Tamito Kajiyama rd6t-kjym at asahi-net.or.jp
Sat Feb 16 18:13:59 CET 2013


Revision: 54595
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=54595
Author:   kjym3
Date:     2013-02-16 17:13:59 +0000 (Sat, 16 Feb 2013)
Log Message:
-----------
Fix for pointers to auto variables returned from Python wrapper class methods.
The previous implementation was a quick workaround of C++ const references.

Also removed the unused 'borrowed' flag from the Python wrapper of FrsMaterial.

Modified Paths:
--------------
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/BPy_Convert.cpp
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/BPy_Convert.h
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/BPy_FrsMaterial.cpp
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/BPy_FrsMaterial.h
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/Interface1D/FEdge/BPy_FEdgeSharp.cpp
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/Interface1D/FEdge/BPy_FEdgeSmooth.cpp

Modified: branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/BPy_Convert.cpp
===================================================================
--- branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/BPy_Convert.cpp	2013-02-16 16:17:45 UTC (rev 54594)
+++ branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/BPy_Convert.cpp	2013-02-16 17:13:59 UTC (rev 54595)
@@ -322,10 +322,9 @@
 	return py_vs;
 }
 
-PyObject * BPy_FrsMaterial_from_FrsMaterial( FrsMaterial& m ){
+PyObject * BPy_FrsMaterial_from_FrsMaterial(const FrsMaterial& m) {
 	PyObject *py_m = FrsMaterial_Type.tp_new( &FrsMaterial_Type, 0, 0 );
-	((BPy_FrsMaterial*) py_m)->m = &m;
-	((BPy_FrsMaterial*) py_m)->borrowed = 1;
+	((BPy_FrsMaterial*) py_m)->m = new FrsMaterial( m );
 
 	return py_m;
 }

Modified: branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/BPy_Convert.h
===================================================================
--- branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/BPy_Convert.h	2013-02-16 16:17:45 UTC (rev 54594)
+++ branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/BPy_Convert.h	2013-02-16 17:13:59 UTC (rev 54595)
@@ -88,7 +88,7 @@
 PyObject * BPy_Interface0D_from_Interface0D( Interface0D& if0D );
 PyObject * BPy_Interface1D_from_Interface1D( Interface1D& if1D );
 PyObject * BPy_IntegrationType_from_IntegrationType( IntegrationType i );
-PyObject * BPy_FrsMaterial_from_FrsMaterial( FrsMaterial& m );
+PyObject * BPy_FrsMaterial_from_FrsMaterial(const FrsMaterial& m);
 PyObject * BPy_Nature_from_Nature( unsigned short n );
 PyObject * BPy_MediumType_from_MediumType( Stroke::MediumType n );
 PyObject * BPy_SShape_from_SShape( SShape& ss );

Modified: branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/BPy_FrsMaterial.cpp
===================================================================
--- branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/BPy_FrsMaterial.cpp	2013-02-16 16:17:45 UTC (rev 54594)
+++ branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/BPy_FrsMaterial.cpp	2013-02-16 17:13:59 UTC (rev 54595)
@@ -75,7 +75,7 @@
 			PyErr_SetString(PyExc_RuntimeError, "invalid FrsMaterial object");
 			return -1;
 		}
-		self->m = new FrsMaterial( *m );
+		self->m = new FrsMaterial(*m);
 
 	} else if (float_array_from_PyObject(obj1, f1, 4) && obj2 &&
 		       float_array_from_PyObject(obj2, f2, 4) && obj3 &&
@@ -87,15 +87,13 @@
 		PyErr_SetString(PyExc_TypeError, "invalid argument(s)");
 		return -1;
 	}
-	self->borrowed = 0;
 
 	return 0;
 }
 
 static void FrsMaterial_dealloc(BPy_FrsMaterial* self)
 {
-	if (self->m && !self->borrowed)
-		delete self->m;
+	delete self->m;
 	Py_TYPE(self)->tp_free((PyObject*)self);
 }
 

Modified: branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/BPy_FrsMaterial.h
===================================================================
--- branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/BPy_FrsMaterial.h	2013-02-16 16:17:45 UTC (rev 54594)
+++ branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/BPy_FrsMaterial.h	2013-02-16 17:13:59 UTC (rev 54595)
@@ -19,7 +19,6 @@
 typedef struct {
 	PyObject_HEAD
 	FrsMaterial *m;
-	int borrowed; /* non-zero if *m is a borrowed object */
 } BPy_FrsMaterial;
 
 /*---------------------------Python BPy_FrsMaterial visible prototypes-----------*/

Modified: branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/Interface1D/FEdge/BPy_FEdgeSharp.cpp
===================================================================
--- branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/Interface1D/FEdge/BPy_FEdgeSharp.cpp	2013-02-16 16:17:45 UTC (rev 54594)
+++ branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/Interface1D/FEdge/BPy_FEdgeSharp.cpp	2013-02-16 17:13:59 UTC (rev 54595)
@@ -288,9 +288,7 @@
 
 static PyObject *FEdgeSharp_material_right_get(BPy_FEdgeSharp *self, void *UNUSED(closure))
 {
-	// FIXME aFrsMaterial() returns a const reference.
-	FrsMaterial m(self->fes->aFrsMaterial());
-	return BPy_FrsMaterial_from_FrsMaterial(m);
+	return BPy_FrsMaterial_from_FrsMaterial(self->fes->aFrsMaterial());
 }
 
 PyDoc_STRVAR(FEdgeSharp_material_left_doc,
@@ -300,9 +298,7 @@
 
 static PyObject *FEdgeSharp_material_left_get(BPy_FEdgeSharp *self, void *UNUSED(closure))
 {
-	// FIXME bFrsMaterial() returns a const reference.
-	FrsMaterial m(self->fes->bFrsMaterial());
-	return BPy_FrsMaterial_from_FrsMaterial(m);
+	return BPy_FrsMaterial_from_FrsMaterial(self->fes->bFrsMaterial());
 }
 
 PyDoc_STRVAR(FEdgeSharp_face_mark_right_doc,

Modified: branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/Interface1D/FEdge/BPy_FEdgeSmooth.cpp
===================================================================
--- branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/Interface1D/FEdge/BPy_FEdgeSmooth.cpp	2013-02-16 16:17:45 UTC (rev 54594)
+++ branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/Interface1D/FEdge/BPy_FEdgeSmooth.cpp	2013-02-16 17:13:59 UTC (rev 54595)
@@ -179,9 +179,7 @@
 
 static PyObject *FEdgeSmooth_material_get(BPy_FEdgeSmooth *self, void *UNUSED(closure))
 {
-	// FIXME frs_material() returns a const reference.
-	FrsMaterial m(self->fes->frs_material());
-	return BPy_FrsMaterial_from_FrsMaterial(m);
+	return BPy_FrsMaterial_from_FrsMaterial(self->fes->frs_material());
 }
 
 PyDoc_STRVAR(FEdgeSmooth_face_mark_doc,




More information about the Bf-blender-cvs mailing list