diff options
author | Ian Thompson <quornian@googlemail.com> | 2008-08-09 22:11:40 +0400 |
---|---|---|
committer | Ian Thompson <quornian@googlemail.com> | 2008-08-09 22:11:40 +0400 |
commit | 83bcb9deffb5eef2cbbb883c21f700840175d3fc (patch) | |
tree | 608a86dcbfc124ec5b8d18d357088be7b0079b24 /source/blender/python | |
parent | 4c89ee7838c3162bca9045db857593b05fb42419 (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.h | 1 | ||||
-rw-r--r-- | source/blender/python/BPY_interface.c | 28 |
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 ); } |