Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/gameengine/Expressions')
-rw-r--r--source/gameengine/Expressions/ListValue.cpp2
-rw-r--r--source/gameengine/Expressions/ListValue.h2
-rw-r--r--source/gameengine/Expressions/PyObjectPlus.cpp6
-rw-r--r--source/gameengine/Expressions/PyObjectPlus.h11
-rw-r--r--source/gameengine/Expressions/Value.cpp4
-rw-r--r--source/gameengine/Expressions/Value.h18
6 files changed, 29 insertions, 14 deletions
diff --git a/source/gameengine/Expressions/ListValue.cpp b/source/gameengine/Expressions/ListValue.cpp
index 380befa51bd..6984e5663db 100644
--- a/source/gameengine/Expressions/ListValue.cpp
+++ b/source/gameengine/Expressions/ListValue.cpp
@@ -205,7 +205,7 @@ PyMethodDef CListValue::Methods[] = {
-PyObject* CListValue::_getattr(char* attr) {
+PyObject* CListValue::_getattr(const STR_String& attr) {
_getattr_up(CValue);
}
diff --git a/source/gameengine/Expressions/ListValue.h b/source/gameengine/Expressions/ListValue.h
index 10c64a13177..431f8f558a9 100644
--- a/source/gameengine/Expressions/ListValue.h
+++ b/source/gameengine/Expressions/ListValue.h
@@ -59,7 +59,7 @@ public:
bool CheckEqual(CValue* first,CValue* second);
- virtual PyObject* _getattr(char *attr);
+ virtual PyObject* _getattr(const STR_String& attr);
KX_PYMETHOD(CListValue,append);
KX_PYMETHOD(CListValue,reverse);
diff --git a/source/gameengine/Expressions/PyObjectPlus.cpp b/source/gameengine/Expressions/PyObjectPlus.cpp
index f9801fe0f60..74468cf030d 100644
--- a/source/gameengine/Expressions/PyObjectPlus.cpp
+++ b/source/gameengine/Expressions/PyObjectPlus.cpp
@@ -100,15 +100,15 @@ PyParentObject PyObjectPlus::Parents[] = {&PyObjectPlus::Type, NULL};
/*------------------------------
* PyObjectPlus attributes -- attributes
------------------------------*/
-PyObject *PyObjectPlus::_getattr(char *attr)
+PyObject *PyObjectPlus::_getattr(const STR_String& attr)
{
//if (streq(attr, "type"))
// return Py_BuildValue("s", (*(GetParents()))->tp_name);
- return Py_FindMethod(Methods, this, attr);
+ return Py_FindMethod(Methods, this, const_cast<char *>(attr.ReadPtr()));
}
-int PyObjectPlus::_setattr(char *attr, PyObject *value)
+int PyObjectPlus::_setattr(const STR_String& attr, PyObject *value)
{
//return PyObject::_setattr(attr,value);
//cerr << "Unknown attribute" << endl;
diff --git a/source/gameengine/Expressions/PyObjectPlus.h b/source/gameengine/Expressions/PyObjectPlus.h
index 40d8ffb5903..7c5f531f35b 100644
--- a/source/gameengine/Expressions/PyObjectPlus.h
+++ b/source/gameengine/Expressions/PyObjectPlus.h
@@ -40,6 +40,7 @@
#endif
#include "KX_Python.h"
+#include "STR_String.h"
/*------------------------------
* Python defines
@@ -72,7 +73,7 @@ inline void Py_Fatal(char *M) {
// which allows attribute and method calls
// to be properly passed up the hierarchy.
#define _getattr_up(Parent) \
- PyObject *rvalue = Py_FindMethod(Methods, this, attr); \
+ PyObject *rvalue = Py_FindMethod(Methods, this, const_cast<char*>(attr.ReadPtr())); \
if (rvalue == NULL) \
{ \
PyErr_Clear(); \
@@ -107,15 +108,15 @@ class PyObjectPlus : public PyObject { // The PyObjectPlus abstract class
// Py_DECREF(this);
// }; // decref method
- virtual PyObject *_getattr(char *attr); // _getattr method
+ virtual PyObject *_getattr(const STR_String& attr); // _getattr method
static PyObject *__getattr(PyObject * PyObj, char *attr) // This should be the entry in Type.
- { return ((PyObjectPlus*) PyObj)->_getattr(attr); };
+ { return ((PyObjectPlus*) PyObj)->_getattr(STR_String(attr)); };
- virtual int _setattr(char *attr, PyObject *value); // _setattr method
+ virtual int _setattr(const STR_String& attr, PyObject *value); // _setattr method
static int __setattr(PyObject *PyObj, // This should be the entry in Type.
char *attr,
PyObject *value)
- { return ((PyObjectPlus*) PyObj)->_setattr(attr, value); };
+ { return ((PyObjectPlus*) PyObj)->_setattr(STR_String(attr), value); };
virtual PyObject *_repr(void); // _repr method
static PyObject *__repr(PyObject *PyObj) // This should be the entry in Type.
diff --git a/source/gameengine/Expressions/Value.cpp b/source/gameengine/Expressions/Value.cpp
index 58f07790f6a..55dd1f5c1dd 100644
--- a/source/gameengine/Expressions/Value.cpp
+++ b/source/gameengine/Expressions/Value.cpp
@@ -609,7 +609,7 @@ static PyMethodDef CValueMethods[] =
};
-PyObject* CValue::_getattr(char* attr)
+PyObject* CValue::_getattr(const STR_String& attr)
{
CValue* resultattr = FindIdentifier(attr);
STR_String text;
@@ -698,7 +698,7 @@ CValue* CValue::ConvertPythonToValue(PyObject* pyobj)
return vallie;
}
-int CValue::_setattr(char* attr,PyObject* pyobj)
+int CValue::_setattr(const STR_String& attr,PyObject* pyobj)
{
if (!pyobj) { // member deletion
diff --git a/source/gameengine/Expressions/Value.h b/source/gameengine/Expressions/Value.h
index 527dfa85d39..4656e2ca5ac 100644
--- a/source/gameengine/Expressions/Value.h
+++ b/source/gameengine/Expressions/Value.h
@@ -200,6 +200,20 @@ public:
static char method_name##_doc[]; \
/* The line above should remain empty */
+/**
+ * Method table macro (with doc)
+ */
+#define KX_PYMETHODTABLE(class_name, method_name) \
+ {#method_name , (PyCFunction) class_name::sPy##method_name, METH_VARARGS, class_name::method_name##_doc}
+
+/**
+ * Function implementation macro
+ */
+#define KX_PYMETHODDEF_DOC(class_name, method_name, doc_string) \
+char class_name::method_name##_doc[] = doc_string; \
+PyObject* class_name::Py##method_name(PyObject* self, PyObject* args, PyObject* kwds)
+
+
#ifndef NO_EXP_PYTHON_EMBEDDING
#include "PyObjectPlus.h"
@@ -239,7 +253,7 @@ public:
- PyObject* _getattr(char* attr);
+ virtual PyObject* _getattr(const STR_String& attr);
void SpecialRelease()
{
@@ -266,7 +280,7 @@ public:
virtual CValue* ConvertPythonToValue(PyObject* pyobj);
- int _setattr(char* attr,PyObject* value);
+ virtual int _setattr(const STR_String& attr,PyObject* value);
KX_PYMETHOD(CValue,GetName);