[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [44980] trunk/blender/source/blender/bmesh /intern/bmesh_operators.c: better error reporting when a bmesh operator fails.
Campbell Barton
ideasman42 at gmail.com
Mon Mar 19 00:38:38 CET 2012
Revision: 44980
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44980
Author: campbellbarton
Date: 2012-03-18 23:38:31 +0000 (Sun, 18 Mar 2012)
Log Message:
-----------
better error reporting when a bmesh operator fails. (give reason and show char number that fails)
Modified Paths:
--------------
trunk/blender/source/blender/bmesh/intern/bmesh_operators.c
Modified: trunk/blender/source/blender/bmesh/intern/bmesh_operators.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_operators.c 2012-03-18 22:21:29 UTC (rev 44979)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_operators.c 2012-03-18 23:38:31 UTC (rev 44980)
@@ -1250,9 +1250,15 @@
/* basic useful info to help find where bmop formatting strings fail */
+ const char *err_reason = "Unknown";
int lineno = -1;
-# define GOTO_ERROR { lineno = __LINE__; goto error; }
+#define GOTO_ERROR(reason) \
+ { \
+ err_reason = reason; \
+ lineno = __LINE__; \
+ goto error; \
+ } (void)0
/* we muck around in here, so dup i */
fmt = ofmt = BLI_strdup(_fmt);
@@ -1293,11 +1299,15 @@
* a little flexible, allowing "slot=%f",
* "slot %f", "slot%f", and "slot\t%f". */
i = strcspn(fmt, "= \t%");
- if (!fmt[i]) GOTO_ERROR;
+ if (!fmt[i]) {
+ GOTO_ERROR("could not match end of slot name");
+ }
fmt[i] = 0;
- if (bmo_name_to_slotcode_check(def, fmt) < 0) GOTO_ERROR;
+ if (bmo_name_to_slotcode_check(def, fmt) < 0) {
+ GOTO_ERROR("name to slot code check failed");
+ }
BLI_strncpy(slotname, fmt, sizeof(slotname));
@@ -1317,9 +1327,9 @@
c = NEXT_CHAR(fmt);
fmt++;
- if (c == '3') size = 3;
+ if (c == '3') size = 3;
else if (c == '4') size = 4;
- else GOTO_ERROR;
+ else GOTO_ERROR("matrix size was not 3 or 4");
BMO_slot_mat_set(op, slotname, va_arg(vlist, void *), size);
state = 1;
@@ -1416,9 +1426,24 @@
error:
/* non urgent todo - explain exactly what is failing */
- fprintf(stderr,
- "%s: error parsing formatting string, %d in '%s'\n see - %s:%d\n",
- __func__, (int)(fmt - ofmt), _fmt, __FILE__, lineno);
+ fprintf(stderr, "%s: error parsing formatting string\n", __func__);
+
+ fprintf(stderr, "string: '%s', position %d\n", _fmt, (int)(fmt - ofmt));
+ fprintf(stderr, " ");
+ {
+ int pos = (int)(fmt - ofmt);
+ int i;
+ for (i = 0; i < pos; i++) {
+ fprintf(stderr, " ");
+ }
+ fprintf(stderr, "^\n");
+ }
+
+ fprintf(stderr, "source code: %s:%d\n", __FILE__, lineno);
+
+ fprintf(stderr, "reason: %s\n", err_reason);
+
+
MEM_freeN(ofmt);
BMO_op_finish(bm, op);
More information about the Bf-blender-cvs
mailing list