Commit: e3a18a890d794538f82ccce3d56c595b33f1a4d9
Author: Campbell Barton
Date:   Tue Feb 15 12:51:31 2022 +1100
Branches: master
https://developer.blender.org/rBe3a18a890d794538f82ccce3d56c595b33f1a4d9

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.

===================================================================

M       source/blender/python/intern/bpy_rna.c

===================================================================

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);

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to