diff src/vim9execute.c @ 26378:a926ccd92ae1 v8.2.3720

patch 8.2.3720: Vim9: Internal error when invoking closure in legacy context Commit: https://github.com/vim/vim/commit/69c76171f1a78b829196f72d7010fbe1d9ad2944 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Dec 2 16:38:52 2021 +0000 patch 8.2.3720: Vim9: Internal error when invoking closure in legacy context Problem: Vim9: Internal error when invoking closure in legacy context. Solution: Give a more appropriate error message. (closes https://github.com/vim/vim/issues/9251)
author Bram Moolenaar <Bram@vim.org>
date Thu, 02 Dec 2021 17:45:03 +0100
parents a3a0885d9dd8
children fcc57227e99b
line wrap: on
line diff
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -2733,7 +2733,13 @@ exec_instructions(ectx_T *ectx)
 		    if (outer == NULL)
 		    {
 			SOURCING_LNUM = iptr->isn_lnum;
-			iemsg("LOADOUTER depth more than scope levels");
+			if (ectx->ec_frame_idx == ectx->ec_initial_frame_idx
+						 || ectx->ec_outer_ref == NULL)
+			    // Possibly :def function called from legacy
+			    // context.
+			    emsg(_(e_closure_called_from_invalid_context));
+			else
+			    iemsg("LOADOUTER depth more than scope levels");
 			goto theend;
 		    }
 		    tv = ((typval_T *)outer->out_stack->ga_data)