diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index 358d4e8..da7c473 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -636,16 +636,16 @@
 
 def Test_import_absolute()
   let import_lines = [
-        \ 'vim9script',
-        \ 'import exported from "' .. escape(getcwd(), '\') .. '/Xexport_abs.vim"',
-        \ 'def UseExported()',
-        \ '  g:imported_abs = exported',
-        \ '  exported = 8888',
-        \ '  g:imported_after = exported',
-        \ 'enddef',
-        \ 'UseExported()',
-        \ 'g:import_disassembled = execute("disass UseExported")',
-        \ ]
+        'vim9script',
+        'import exported from "' .. escape(getcwd(), '\') .. '/Xexport_abs.vim"',
+        'def UseExported()',
+        '  g:imported_abs = exported',
+        '  exported = 8888',
+        '  g:imported_after = exported',
+        'enddef',
+        'UseExported()',
+        'g:import_disassembled = execute("disass UseExported")',
+        ]
   writefile(import_lines, 'Ximport_abs.vim')
   writefile(s:export_script_lines, 'Xexport_abs.vim')
 
@@ -661,8 +661,8 @@
         \ .. '3 STORESCRIPT exported in .*Xexport_abs.vim.*'
         \ .. 'g:imported_after = exported.*'
         \ .. '4 LOADSCRIPT exported from .*Xexport_abs.vim.*'
-        \ .. '5 STOREG g:imported_after.*'
-        \, g:import_disassembled)
+        \ .. '5 STOREG g:imported_after.*',
+        g:import_disassembled)
   unlet g:imported_abs
   unlet g:import_disassembled
 
@@ -672,10 +672,10 @@
 
 def Test_import_rtp()
   let import_lines = [
-        \ 'vim9script',
-        \ 'import exported from "Xexport_rtp.vim"',
-        \ 'g:imported_rtp = exported',
-        \ ]
+        'vim9script',
+        'import exported from "Xexport_rtp.vim"',
+        'g:imported_rtp = exported',
+        ]
   writefile(import_lines, 'Ximport_rtp.vim')
   mkdir('import')
   writefile(s:export_script_lines, 'import/Xexport_rtp.vim')
@@ -988,6 +988,11 @@
       three: 3  " comment
       }
   assert_equal(#{one: 1, two: 2, three: 3}, mydict)
+
+  assert_equal(
+        ['one', 'two', 'three'],
+        split('one two three')
+        )
 enddef
 
 " Keep this last, it messes up highlighting.
diff --git a/src/version.c b/src/version.c
index 3ef50fb..5bfc36a 100644
--- a/src/version.c
+++ b/src/version.c
@@ -739,6 +739,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    561,
+/**/
     560,
 /**/
     559,
diff --git a/src/vim9compile.c b/src/vim9compile.c
index 6abf95c..201b7b0 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -2049,6 +2049,27 @@
 }
 
 /*
+ * Get the next line of the function from "cctx".
+ * Returns NULL when at the end.
+ */
+    static char_u *
+next_line_from_context(cctx_T *cctx)
+{
+    char_u	*line = NULL;
+
+    do
+    {
+	++cctx->ctx_lnum;
+	if (cctx->ctx_lnum >= cctx->ctx_ufunc->uf_lines.ga_len)
+	    break;
+	line = ((char_u **)cctx->ctx_ufunc->uf_lines.ga_data)[cctx->ctx_lnum];
+	SOURCING_LNUM = cctx->ctx_ufunc->uf_script_ctx.sc_lnum
+							  + cctx->ctx_lnum + 1;
+    } while (line == NULL);
+    return line;
+}
+
+/*
  * Generate an instruction to load script-local variable "name", without the
  * leading "s:".
  * Also finds imported variables.
@@ -2284,8 +2305,21 @@
 {
     char_u *p = *arg;
 
-    while (*p != NUL && *p != ')')
+    for (;;)
     {
+	if (*p == NUL)
+	{
+	    p = next_line_from_context(cctx);
+	    if (p == NULL)
+		break;
+	    p = skipwhite(p);
+	}
+	if (*p == ')')
+	{
+	    *arg = p + 1;
+	    return OK;
+	}
+
 	if (compile_expr1(&p, cctx) == FAIL)
 	    return FAIL;
 	++*argcount;
@@ -2298,19 +2332,14 @@
 	if (*p == ',')
 	{
 	    ++p;
-	    if (!VIM_ISWHITE(*p))
+	    if (*p != NUL && !VIM_ISWHITE(*p))
 		semsg(_(e_white_after), ",");
 	}
 	p = skipwhite(p);
     }
-    p = skipwhite(p);
-    if (*p != ')')
-    {
-	emsg(_(e_missing_close));
-	return FAIL;
-    }
-    *arg = p + 1;
-    return OK;
+
+    emsg(_(e_missing_close));
+    return FAIL;
 }
 
 /*
@@ -2535,27 +2564,6 @@
 }
 
 /*
- * Get the next line of the function from "cctx".
- * Returns NULL when at the end.
- */
-    static char_u *
-next_line_from_context(cctx_T *cctx)
-{
-    char_u	*line = NULL;
-
-    do
-    {
-	++cctx->ctx_lnum;
-	if (cctx->ctx_lnum >= cctx->ctx_ufunc->uf_lines.ga_len)
-	    break;
-	line = ((char_u **)cctx->ctx_ufunc->uf_lines.ga_data)[cctx->ctx_lnum];
-	SOURCING_LNUM = cctx->ctx_ufunc->uf_script_ctx.sc_lnum
-							  + cctx->ctx_lnum + 1;
-    } while (line == NULL);
-    return line;
-}
-
-/*
  * parse a list: [expr, expr]
  * "*arg" points to the '['.
  */
