From 694e20b14152d7b54af217b0d7abd07dae222670 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 28 Mar 2022 16:37:09 +1100 Subject: Fix text editor failure to move the cursor for syntax errors This broke between 3.0 and 3.1, upgrading to Python 3.10 seems the likely cause as this code didn't change. --- source/blender/python/intern/bpy_interface_run.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/source/blender/python/intern/bpy_interface_run.c b/source/blender/python/intern/bpy_interface_run.c index 79744090cc3..f05343ae2d8 100644 --- a/source/blender/python/intern/bpy_interface_run.c +++ b/source/blender/python/intern/bpy_interface_run.c @@ -49,11 +49,11 @@ /** \name Private Utilities * \{ */ -static void python_script_error_jump_text(Text *text) +static void python_script_error_jump_text(Text *text, const char *filepath) { int lineno; int offset; - python_script_error_jump(text->id.name + 2, &lineno, &offset); + python_script_error_jump(filepath, &lineno, &offset); if (lineno != -1) { /* select the line with the error */ txt_move_to(text, lineno - 1, INT_MAX, false); @@ -96,6 +96,10 @@ static bool python_script_exec( PyObject *py_dict = NULL, *py_result = NULL; PyGILState_STATE gilstate; + char fn_dummy[FILE_MAX]; + /** The `__file__` added into the name-space. */ + const char *fn_namespace = NULL; + BLI_assert(fn || text); if (fn == NULL && text == NULL) { @@ -107,8 +111,8 @@ static bool python_script_exec( PyC_MainModule_Backup(&main_mod); if (text) { - char fn_dummy[FILE_MAXDIR]; bpy_text_filename_get(fn_dummy, bmain_old, sizeof(fn_dummy), text); + fn_namespace = fn_dummy; if (text->compiled == NULL) { /* if it wasn't already compiled, do it now */ char *buf; @@ -124,7 +128,7 @@ static bool python_script_exec( if (PyErr_Occurred()) { if (do_jump) { - python_script_error_jump_text(text); + python_script_error_jump_text(text, fn_namespace); } BPY_text_free_code(text); } @@ -137,6 +141,7 @@ static bool python_script_exec( } else { FILE *fp = BLI_fopen(fn, "r"); + fn_namespace = fn; if (fp) { py_dict = PyC_DefaultNameSpace(fn); @@ -183,7 +188,7 @@ static bool python_script_exec( /* ensure text is valid before use, the script may have freed itself */ Main *bmain_new = CTX_data_main(C); if ((bmain_old == bmain_new) && (BLI_findindex(&bmain_new->texts, text) != -1)) { - python_script_error_jump_text(text); + python_script_error_jump_text(text, fn_namespace); } } } -- cgit v1.2.3