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:
authorCampbell Barton <ideasman42@gmail.com>2016-07-31 04:22:02 +0300
committerCampbell Barton <ideasman42@gmail.com>2016-07-31 04:46:36 +0300
commit55f481d05296077e061c2ade989c702c0fd2a68d (patch)
tree9113dbc297d63704e102988f8e8fbbda4560b286 /source/blender/python/intern
parent873a623be445db6327358766de988f0d2510c619 (diff)
Py-Driver: use intern strings
Avoids managing strings inline
Diffstat (limited to 'source/blender/python/intern')
-rw-r--r--source/blender/python/intern/bpy_driver.c38
-rw-r--r--source/blender/python/intern/bpy_intern_string.c6
-rw-r--r--source/blender/python/intern/bpy_intern_string.h2
3 files changed, 16 insertions, 30 deletions
diff --git a/source/blender/python/intern/bpy_driver.c b/source/blender/python/intern/bpy_driver.c
index 2f0c054e381..82507dcba04 100644
--- a/source/blender/python/intern/bpy_driver.c
+++ b/source/blender/python/intern/bpy_driver.c
@@ -44,6 +44,8 @@
#include "bpy_rna_driver.h" /* for pyrna_driver_get_variable_value */
+#include "bpy_intern_string.h"
+
#include "bpy_driver.h"
extern void BPY_update_rna_module(void);
@@ -97,43 +99,25 @@ int bpy_pydriver_create_dict(void)
}
/* note, this function should do nothing most runs, only when changing frame */
-static PyObject *bpy_pydriver_InternStr__frame = NULL;
/* not thread safe but neither is python */
static float bpy_pydriver_evaltime_prev = FLT_MAX;
-static void bpy_pydriver_update_dict(const float evaltime)
+static void bpy_pydriver_namespace_update_frame(const float evaltime)
{
if (bpy_pydriver_evaltime_prev != evaltime) {
-
- /* currently only update the frame */
- if (bpy_pydriver_InternStr__frame == NULL) {
- bpy_pydriver_InternStr__frame = PyUnicode_FromString("frame");
- }
-
PyObject *item = PyFloat_FromDouble(evaltime);
- PyDict_SetItem(bpy_pydriver_Dict,
- bpy_pydriver_InternStr__frame,
- item);
+ PyDict_SetItem(bpy_pydriver_Dict, bpy_intern_str_frame, item);
Py_DECREF(item);
bpy_pydriver_evaltime_prev = evaltime;
}
}
-static PyObject *bpy_pydriver_InternStr__self = NULL;
-
-static void bpy_pydriver_update_dict_self(struct PathResolvedRNA *anim_rna)
+static void bpy_pydriver_namespace_update_self(struct PathResolvedRNA *anim_rna)
{
- if (bpy_pydriver_InternStr__self == NULL) {
- bpy_pydriver_InternStr__self = PyUnicode_FromString("self");
- }
-
PyObject *item = pyrna_driver_self_from_anim_rna(anim_rna);
- PyDict_SetItem(bpy_pydriver_Dict,
- bpy_pydriver_InternStr__self,
- item);
+ PyDict_SetItem(bpy_pydriver_Dict, bpy_intern_str_self, item);
Py_DECREF(item);
-
}
/* Update function, it gets rid of pydrivers global dictionary, forcing
@@ -155,11 +139,7 @@ void BPY_driver_reset(void)
bpy_pydriver_Dict = NULL;
}
- if (bpy_pydriver_InternStr__frame) {
- Py_DECREF(bpy_pydriver_InternStr__frame);
- bpy_pydriver_InternStr__frame = NULL;
- bpy_pydriver_evaltime_prev = FLT_MAX;
- }
+ bpy_pydriver_evaltime_prev = FLT_MAX;
if (use_gil)
PyGILState_Release(gilstate);
@@ -240,10 +220,10 @@ float BPY_driver_exec(struct PathResolvedRNA *anim_rna, ChannelDriver *driver, c
}
/* update global namespace */
- bpy_pydriver_update_dict(evaltime);
+ bpy_pydriver_namespace_update_frame(evaltime);
if (driver->flag & DRIVER_FLAG_USE_SELF) {
- bpy_pydriver_update_dict_self(anim_rna);
+ bpy_pydriver_namespace_update_self(anim_rna);
}
if (driver->expr_comp == NULL)
diff --git a/source/blender/python/intern/bpy_intern_string.c b/source/blender/python/intern/bpy_intern_string.c
index fd32c91a480..ac0100fa75d 100644
--- a/source/blender/python/intern/bpy_intern_string.c
+++ b/source/blender/python/intern/bpy_intern_string.c
@@ -34,7 +34,7 @@
#include "BLI_utildefines.h"
-static PyObject *bpy_intern_str_arr[11];
+static PyObject *bpy_intern_str_arr[13];
PyObject *bpy_intern_str_register;
PyObject *bpy_intern_str_unregister;
@@ -43,6 +43,8 @@ PyObject *bpy_intern_str_bl_property;
PyObject *bpy_intern_str_bpy_types;
PyObject *bpy_intern_str_order;
PyObject *bpy_intern_str_attr;
+PyObject *bpy_intern_str_self;
+PyObject *bpy_intern_str_frame;
PyObject *bpy_intern_str___slots__;
PyObject *bpy_intern_str___name__;
PyObject *bpy_intern_str___doc__;
@@ -62,6 +64,8 @@ void bpy_intern_string_init(void)
BPY_INTERN_STR(bpy_intern_str_bpy_types, "bpy.types");
BPY_INTERN_STR(bpy_intern_str_order, "order");
BPY_INTERN_STR(bpy_intern_str_attr, "attr");
+ BPY_INTERN_STR(bpy_intern_str_self, "self");
+ BPY_INTERN_STR(bpy_intern_str_frame, "frame");
BPY_INTERN_STR(bpy_intern_str___slots__, "__slots__");
BPY_INTERN_STR(bpy_intern_str___name__, "__name__");
BPY_INTERN_STR(bpy_intern_str___doc__, "__doc__");
diff --git a/source/blender/python/intern/bpy_intern_string.h b/source/blender/python/intern/bpy_intern_string.h
index f4f4560dbfd..394e84d89bd 100644
--- a/source/blender/python/intern/bpy_intern_string.h
+++ b/source/blender/python/intern/bpy_intern_string.h
@@ -37,6 +37,8 @@ extern PyObject *bpy_intern_str_bl_property;
extern PyObject *bpy_intern_str_bpy_types;
extern PyObject *bpy_intern_str_order;
extern PyObject *bpy_intern_str_attr;
+extern PyObject *bpy_intern_str_self;
+extern PyObject *bpy_intern_str_frame;
extern PyObject *bpy_intern_str___slots__;
extern PyObject *bpy_intern_str___name__;
extern PyObject *bpy_intern_str___doc__;