Merge branch 'master' into blender2.8

This commit is contained in:
Campbell Barton 2018-05-04 07:30:14 +02:00
commit b3545ae373
4 changed files with 64 additions and 40 deletions

View File

@ -152,10 +152,9 @@ void IDP_Reset(IDProperty *prop, const IDProperty *reference);
# define IDP_Id(prop) ((ID *) (prop)->data.pointer)
#endif
#ifndef NDEBUG
/* for printout only */
void IDP_spit(IDProperty *prop);
#endif
/* for printout/logging only */
char *IDP_reprN(const struct IDProperty *prop);
void IDP_print(const struct IDProperty *prop);
#ifdef __cplusplus
}

View File

@ -859,9 +859,9 @@ bool IDP_EqualsProperties_ex(IDProperty *prop1, IDProperty *prop2, const bool is
if ((p1 != p2) && ((fabsf(p1 - p2) / max_ff(p1, p2)) < 0.001f)) {
printf("WARNING: Comparing two float properties that have nearly the same value (%f vs. %f)\n", p1, p2);
printf(" p1: ");
IDP_spit(prop1);
IDP_print(prop1);
printf(" p2: ");
IDP_spit(prop2);
IDP_print(prop2);
}
}
#endif
@ -1107,3 +1107,18 @@ void IDP_Reset(IDProperty *prop, const IDProperty *reference)
}
/** \} */
/* We could write a C version, see: idprop_py_api.c */
#ifndef WITH_PYTHON
char *IDP_reprN(IDProperty *UNUSED(prop))
{
return BLI_strdup("<unsupported>");
}
void IDP_print(IDProperty *prop)
{
char *repr = IDP_reprN(prop);
printf("IDProperty(%p): %s\n", prop, repr);
MEM_freeN(repr);
}
#endif /* WITH_PYTHON */

View File

@ -30,6 +30,7 @@
#include "MEM_guardedalloc.h"
#include "BLI_utildefines.h"
#include "BLI_string.h"
#include "idprop_py_api.h"
@ -1804,39 +1805,48 @@ PyObject *BPyInit_idprop(void)
return mod;
}
#ifndef NDEBUG
/* -------------------------------------------------------------------- */
/* debug only function */
void IDP_spit(IDProperty *prop)
char *IDP_reprN(const IDProperty *prop)
{
if (prop) {
PyGILState_STATE gilstate;
bool use_gil = true; /* !PyC_IsInterpreterActive(); */
PyObject *ret_dict;
PyObject *ret_str;
if (use_gil) {
gilstate = PyGILState_Ensure();
}
/* to_dict() */
ret_dict = BPy_IDGroup_MapDataToPy(prop);
ret_str = PyObject_Repr(ret_dict);
Py_DECREF(ret_dict);
printf("IDProperty(%p): %s\n", prop, _PyUnicode_AsString(ret_str));
Py_DECREF(ret_str);
if (use_gil) {
PyGILState_Release(gilstate);
}
if (prop == NULL) {
return BLI_strdup("None");
}
else {
printf("IDProperty: <NIL>\n");
PyGILState_STATE gilstate;
bool use_gil = true; /* !PyC_IsInterpreterActive(); */
PyObject *ret_dict;
PyObject *ret_str;
if (use_gil) {
gilstate = PyGILState_Ensure();
}
/* Note: non-const cast is safe here since we only repr the result. */
/* to_dict() */
ret_dict = BPy_IDGroup_MapDataToPy((IDProperty *)prop);
ret_str = PyObject_Repr(ret_dict);
Py_DECREF(ret_dict);
Py_ssize_t res_str_len = 0;
char *res_str_bytes = _PyUnicode_AsStringAndSize(ret_str, &res_str_len);
res_str_bytes = BLI_strdupn(res_str_bytes, res_str_len);
Py_DECREF(ret_str);
if (use_gil) {
PyGILState_Release(gilstate);
}
return res_str_bytes;
}
void IDP_print(const IDProperty *prop)
{
char *repr = IDP_reprN(prop);
printf("IDProperty(%p): %s\n", prop, repr);
MEM_freeN(repr);
}
#endif

View File

@ -1134,9 +1134,9 @@ static wmKeyMapItem *wm_keymap_item_find_handlers(
if (kmi->ptr) {
if (STREQ("MESH_OT_rip_move", opname)) {
printf("OPERATOR\n");
IDP_spit(properties);
IDP_print(properties);
printf("KEYMAP\n");
IDP_spit(kmi->ptr->data);
IDP_print(kmi->ptr->data);
}
}
#endif
@ -1167,9 +1167,9 @@ static wmKeyMapItem *wm_keymap_item_find_handlers(
#ifndef NDEBUG
#ifdef WITH_PYTHON
printf("OPERATOR\n");
IDP_spit(properties);
IDP_print(properties);
printf("KEYMAP\n");
IDP_spit(kmi->ptr->data);
IDP_print(kmi->ptr->data);
#endif
#endif
printf("\n");
@ -1316,9 +1316,9 @@ static wmKeyMapItem *wm_keymap_item_find(
#ifndef NDEBUG
#ifdef WITH_PYTHON
printf("OPERATOR\n");
IDP_spit(properties);
IDP_print(properties);
printf("KEYMAP\n");
IDP_spit(kmi->ptr->data);
IDP_print(kmi->ptr->data);
#endif
#endif
printf("\n");