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
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <campbell@blender.org>2022-02-15 04:51:31 +0300
committerCampbell Barton <campbell@blender.org>2022-02-15 04:57:59 +0300
commite3a18a890d794538f82ccce3d56c595b33f1a4d9 (patch)
treef786516856ded136343c1d2045400afd72a9727f /source
parenta9a05d559798d9378f57d923dd18c9e63d7145ef (diff)
Cleanup: minor changes to Python argument parsing loop
- Increment the argument index at the end of the loop. Otherwise using the index after incrementing required subtracting 1. - Move error prefix creation into a function: `pyrna_func_error_prefix` so it's possible to create an error prefix without duplicate code. This simplifies further changes for argument parsing from D14047.
Diffstat (limited to 'source')
-rw-r--r--source/blender/python/intern/bpy_rna.c73
1 files changed, 44 insertions, 29 deletions
diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c
index 3654dbbcf29..2e0dfc515d1 100644
--- a/source/blender/python/intern/bpy_rna.c
+++ b/source/blender/python/intern/bpy_rna.c
@@ -6017,6 +6017,36 @@ static PyObject *small_dict_get_item_string(PyObject *dict, const char *key_look
return NULL;
}
+/**
+ * \param parm_index: The argument index or -1 for keyword arguments.
+ */
+static void pyrna_func_error_prefix(BPy_FunctionRNA *self,
+ PropertyRNA *parm,
+ const int parm_index,
+ char *error,
+ const size_t error_size)
+{
+ PointerRNA *self_ptr = &self->ptr;
+ FunctionRNA *self_func = self->func;
+ if (parm_index == -1) {
+ BLI_snprintf(error,
+ error_size,
+ "%.200s.%.200s(): error with keyword argument \"%.200s\" - ",
+ RNA_struct_identifier(self_ptr->type),
+ RNA_function_identifier(self_func),
+ RNA_property_identifier(parm));
+ }
+ else {
+ BLI_snprintf(error,
+ error_size,
+ "%.200s.%.200s(): error with argument %d, \"%.200s\" - ",
+ RNA_struct_identifier(self_ptr->type),
+ RNA_function_identifier(self_func),
+ parm_index + 1,
+ RNA_property_identifier(parm));
+ }
+}
+
static PyObject *pyrna_func_call(BPy_FunctionRNA *self, PyObject *args, PyObject *kw)
{
/* NOTE: both BPy_StructRNA and BPy_PropertyRNA can be used here. */
@@ -6143,8 +6173,6 @@ static PyObject *pyrna_func_call(BPy_FunctionRNA *self, PyObject *args, PyObject
kw_arg = true;
}
- i++; /* Current argument. */
-
if (item == NULL) {
if (flag_parameter & PARM_REQUIRED) {
PyErr_Format(PyExc_TypeError,
@@ -6156,46 +6184,33 @@ static PyObject *pyrna_func_call(BPy_FunctionRNA *self, PyObject *args, PyObject
break;
}
/* PyDict_GetItemString won't raise an error. */
- continue;
}
+ else {
#ifdef DEBUG_STRING_FREE
- if (item) {
- if (PyUnicode_Check(item)) {
- PyList_APPEND(string_free_ls, PyUnicode_FromString(PyUnicode_AsUTF8(item)));
+ if (item) {
+ if (PyUnicode_Check(item)) {
+ PyList_APPEND(string_free_ls, PyUnicode_FromString(PyUnicode_AsUTF8(item)));
+ }
}
- }
#endif
- err = pyrna_py_to_prop(&funcptr, parm, iter.data, item, "");
- if (err != 0) {
/* the error generated isn't that useful, so generate it again with a useful prefix
* could also write a function to prepend to error messages */
char error_prefix[512];
- PyErr_Clear(); /* Re-raise. */
- if (kw_arg == true) {
- BLI_snprintf(error_prefix,
- sizeof(error_prefix),
- "%.200s.%.200s(): error with keyword argument \"%.200s\" - ",
- RNA_struct_identifier(self_ptr->type),
- RNA_function_identifier(self_func),
- RNA_property_identifier(parm));
- }
- else {
- BLI_snprintf(error_prefix,
- sizeof(error_prefix),
- "%.200s.%.200s(): error with argument %d, \"%.200s\" - ",
- RNA_struct_identifier(self_ptr->type),
- RNA_function_identifier(self_func),
- i,
- RNA_property_identifier(parm));
- }
+ err = pyrna_py_to_prop(&funcptr, parm, iter.data, item, "");
- pyrna_py_to_prop(&funcptr, parm, iter.data, item, error_prefix);
+ if (err != 0) {
+ PyErr_Clear(); /* Re-raise. */
+ pyrna_func_error_prefix(self, parm, kw_arg ? -1 : i, error_prefix, sizeof(error_prefix));
+ pyrna_py_to_prop(&funcptr, parm, iter.data, item, error_prefix);
- break;
+ break;
+ }
}
+
+ i++; /* Current argument. */
}
RNA_parameter_list_end(&iter);