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:
authorIan Thompson <quornian@googlemail.com>2008-08-09 22:11:40 +0400
committerIan Thompson <quornian@googlemail.com>2008-08-09 22:11:40 +0400
commit83bcb9deffb5eef2cbbb883c21f700840175d3fc (patch)
tree608a86dcbfc124ec5b8d18d357088be7b0079b24 /source/blender/python
parent4c89ee7838c3162bca9045db857593b05fb42419 (diff)
Python errors originating in the active text are now displayed at the top of the text area. Errors in other files/scripts still pop up a message as before and all errors are still printed to the console. This removes the need to switch to the console for local errors.
Diffstat (limited to 'source/blender/python')
-rw-r--r--source/blender/python/BPY_extern.h1
-rw-r--r--source/blender/python/BPY_interface.c28
2 files changed, 29 insertions, 0 deletions
diff --git a/source/blender/python/BPY_extern.h b/source/blender/python/BPY_extern.h
index 3d9b45051fb..a8b9cb48c16 100644
--- a/source/blender/python/BPY_extern.h
+++ b/source/blender/python/BPY_extern.h
@@ -89,6 +89,7 @@ extern "C" {
int BPY_Err_getLinenumber( void );
const char *BPY_Err_getFilename( void );
+ const char *BPY_Err_getMessage( void );
int BPY_txt_do_python_Text( struct Text *text );
int BPY_menu_do_python( short menutype, int event );
diff --git a/source/blender/python/BPY_interface.c b/source/blender/python/BPY_interface.c
index 05ea2d77ab9..635bdfe2d3c 100644
--- a/source/blender/python/BPY_interface.c
+++ b/source/blender/python/BPY_interface.c
@@ -145,9 +145,11 @@ static struct _inittab BPy_Inittab_Modules[] = {
* Structure definitions
**************************************************************************/
#define FILENAME_LENGTH 24
+#define MESSAGE_LENGTH 256
typedef struct _ScriptError {
char filename[FILENAME_LENGTH];
+ char message[MESSAGE_LENGTH+1];
int lineno;
} ScriptError;
@@ -508,6 +510,15 @@ const char *BPY_Err_getFilename( void )
}
/*****************************************************************************/
+/* Description: This function will return the short message of the error */
+/* that has occured in the python script. */
+/*****************************************************************************/
+const char *BPY_Err_getMessage( void )
+{
+ return g_script_error.message;
+}
+
+/*****************************************************************************/
/* Description: Return PyString filename from a traceback object */
/*****************************************************************************/
PyObject *traceback_getFilename( PyObject * tb )
@@ -566,6 +577,15 @@ void BPY_Err_Handle( char *script_name )
} else {
g_script_error.lineno = -1;
}
+ v = PyObject_GetAttrString( err, "text" );
+ if ( v && PyString_Check(v) ) {
+ strcpy(g_script_error.message, "Invalid syntax: ");
+ strncpy(g_script_error.message+16, PyString_AS_STRING( v ), MESSAGE_LENGTH-16);
+ g_script_error.message[MESSAGE_LENGTH]= '\0';
+ Py_DECREF( v );
+ } else {
+ strcpy(g_script_error.message, "Invalid Syntax");
+ }
/* this avoids an abort in Python 2.3's garbage collecting: */
PyErr_Clear( );
return;
@@ -612,6 +632,14 @@ void BPY_Err_Handle( char *script_name )
FILENAME_LENGTH );
Py_DECREF(v);
}
+ v = PyObject_GetAttrString( err, "message" );
+ if ( v && PyString_Check(v) ) {
+ strncpy(g_script_error.message, PyString_AS_STRING( v ), MESSAGE_LENGTH);
+ g_script_error.message[MESSAGE_LENGTH]= '\0';
+ Py_DECREF( v );
+ } else {
+ g_script_error.message[0] = '\0';
+ }
Py_DECREF( tb );
}