patch 8.2.4912: using execute() to define a lambda doesn't work

Problem:    Using execute() to define a lambda doesn't work. (Ernie Rael)
Solution:   Put the getline function in evalarg. (closes #10375)
diff --git a/src/eval.c b/src/eval.c
index 41094cd..4906fa6 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -140,7 +140,7 @@
     if (eap != NULL)
     {
 	evalarg->eval_cstack = eap->cstack;
-	if (sourcing_a_script(eap))
+	if (sourcing_a_script(eap) || eap->getline == get_list_line)
 	{
 	    evalarg->eval_getline = eap->getline;
 	    evalarg->eval_cookie = eap->cookie;
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 667d4f3..efade6c 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -3868,7 +3868,7 @@
  * Called by do_cmdline() to get the next line.
  * Returns allocated string, or NULL for end of function.
  */
-    static char_u *
+    char_u *
 get_list_line(
     int	    c UNUSED,
     void    *cookie,
diff --git a/src/proto/evalfunc.pro b/src/proto/evalfunc.pro
index 4e9ad5b..5103588 100644
--- a/src/proto/evalfunc.pro
+++ b/src/proto/evalfunc.pro
@@ -17,11 +17,12 @@
 win_T *get_optional_window(typval_T *argvars, int idx);
 void execute_redir_str(char_u *value, int value_len);
 void execute_cmds_from_string(char_u *str);
+char_u *get_list_line(int c, void *cookie, int indent, getline_opt_T options);
 void execute_common(typval_T *argvars, typval_T *rettv, int arg_off);
 void f_exists(typval_T *argvars, typval_T *rettv);
 void f_has(typval_T *argvars, typval_T *rettv);
-void f_len(typval_T *argvars, typval_T *rettv);
 int dynamic_feature(char_u *feature);
+void f_len(typval_T *argvars, typval_T *rettv);
 void mzscheme_call_vim(char_u *name, typval_T *args, typval_T *rettv);
 void range_list_materialize(list_T *list);
 long do_searchpair(char_u *spat, char_u *mpat, char_u *epat, int dir, typval_T *skip, int flags, pos_T *match_pos, linenr_T lnum_stop, long time_limit);
diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim
index 5f42c1c..14d0bce 100644
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -1615,6 +1615,26 @@
   v9.CheckScriptSuccess(lines)
 enddef
 
+def Test_define_lambda_in_execute()
+  var lines =<< trim [CODE]
+      vim9script
+
+      def BuildFuncMultiLine(): func
+          var x =<< trim END
+              g:SomeRandomFunc = (d: dict<any>) => {
+                  return d.k1 + d.k2
+              }
+          END
+          execute(x)
+          return g:SomeRandomFunc
+      enddef
+      var ResultPlus = BuildFuncMultiLine()
+      assert_equal(7, ResultPlus({k1: 3, k2: 4}))
+  [CODE]
+  v9.CheckScriptSuccess(lines)
+  unlet g:SomeRandomFunc
+enddef
+
 " Default arg and varargs
 def MyDefVarargs(one: string, two = 'foo', ...rest: list<string>): string
   var res = one .. ',' .. two
diff --git a/src/version.c b/src/version.c
index 6009972..ead455b 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    4912,
+/**/
     4911,
 /**/
     4910,