diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index f4bdf7b..77a7a71 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -3307,7 +3307,7 @@
 find_ex_command(
 	exarg_T *eap,
 	int	*full UNUSED,
-	int	(*lookup)(char_u *, size_t, void *, cctx_T *) UNUSED,
+	int	(*lookup)(char_u *, size_t, cctx_T *) UNUSED,
 	cctx_T	*cctx UNUSED)
 {
     int		len;
@@ -3416,7 +3416,7 @@
 
 	    // Recognize an assignment if we recognize the variable name:
 	    // "g:var = expr"
-	    // "var = expr"  where "var" is a local var name.
+	    // "var = expr"  where "var" is a variable name.
 	    if (*eap->cmd == '@')
 		p = eap->cmd + 2;
 	    oplen = assignment_len(skipwhite(p), &heredoc);
@@ -3426,7 +3426,7 @@
 			|| *eap->cmd == '&'
 			|| *eap->cmd == '$'
 			|| *eap->cmd == '@'
-			|| lookup(eap->cmd, p - eap->cmd, NULL, cctx) == OK)
+			|| lookup(eap->cmd, p - eap->cmd, cctx) == OK)
 		{
 		    eap->cmdidx = CMD_var;
 		    return eap->cmd;
@@ -3445,7 +3445,7 @@
 	// If it is an ID it might be a variable with an operator on the next
 	// line, if the variable exists it can't be an Ex command.
 	if (p > eap->cmd && ends_excmd(*skipwhite(p))
-		&& (lookup(eap->cmd, p - eap->cmd, NULL, cctx) == OK
+		&& (lookup(eap->cmd, p - eap->cmd, cctx) == OK
 		    || (ASCII_ISALPHA(eap->cmd[0]) && eap->cmd[1] == ':')))
 	{
 	    eap->cmdidx = CMD_eval;
diff --git a/src/proto/ex_docmd.pro b/src/proto/ex_docmd.pro
index 94770f2..dcd9f39 100644
--- a/src/proto/ex_docmd.pro
+++ b/src/proto/ex_docmd.pro
@@ -13,9 +13,10 @@
 int parse_cmd_address(exarg_T *eap, char **errormsg, int silent);
 int checkforcmd(char_u **pp, char *cmd, int len);
 char_u *skip_option_env_lead(char_u *start);
-char_u *find_ex_command(exarg_T *eap, int *full, int (*lookup)(char_u *, size_t, void *, cctx_T *), cctx_T *cctx);
+char_u *find_ex_command(exarg_T *eap, int *full, int (*lookup)(char_u *, size_t, cctx_T *), cctx_T *cctx);
 int modifier_len(char_u *cmd);
 int cmd_exists(char_u *name);
+void f_fullcommand(typval_T *argvars, typval_T *rettv);
 cmdidx_T excmd_get_cmdidx(char_u *cmd, int len);
 long excmd_get_argt(cmdidx_T idx);
 char_u *skip_range(char_u *cmd, int skip_star, int *ctx);
diff --git a/src/testdir/test_vim9_cmd.vim b/src/testdir/test_vim9_cmd.vim
index 42c51b4..9a0460b 100644
--- a/src/testdir/test_vim9_cmd.vim
+++ b/src/testdir/test_vim9_cmd.vim
@@ -323,6 +323,11 @@
   CheckScriptSuccess(lines)
 enddef
 
+def MethodAfterLinebreak(arg: string)
+  arg
+    ->setline(1)
+enddef
+
 def Test_method_call_linebreak()
   var lines =<< trim END
       vim9script
@@ -361,6 +366,11 @@
   g:shortlist = [1, 2]
   CheckDefAndScriptSuccess(lines)
   unlet g:shortlist
+
+  new
+  MethodAfterLinebreak('foobar')
+  assert_equal('foobar', getline(1))
+  bwipe!
 enddef
 
 def Test_method_call_whitespace()
diff --git a/src/version.c b/src/version.c
index 26f80cc..ad11789 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2525,
+/**/
     2524,
 /**/
     2523,
diff --git a/src/vim9compile.c b/src/vim9compile.c
index 6d0a748..84c9108 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -373,6 +373,19 @@
 }
 
 /*
+ * Return TRUE if "name" is a local variable, argument, script variable or
+ * imported.
+ */
+    static int
+variable_exists(char_u *name, size_t len, cctx_T *cctx)
+{
+    return lookup_local(name, len, NULL, cctx) == OK
+	    || arg_exists(name, len, NULL, NULL, NULL, cctx) == OK
+	    || script_var_exists(name, len, FALSE, cctx) == OK
+	    || find_imported(name, len, cctx) != NULL;
+}
+
+/*
  * Check if "p[len]" is already defined, either in script "import_sid" or in
  * compilation context "cctx".  "cctx" is NULL at the script level.
  * Does not check the global namespace.
@@ -6444,10 +6457,7 @@
 		    || *eap->cmd == '$'
 		    || *eap->cmd == '@'
 		    || ((len) > 2 && eap->cmd[1] == ':')
-		    || lookup_local(eap->cmd, len, NULL, cctx) == OK
-		    || arg_exists(eap->cmd, len, NULL, NULL, NULL, cctx) == OK
-		    || script_var_exists(eap->cmd, len, FALSE, cctx) == OK
-		    || find_imported(eap->cmd, len, cctx) != NULL)
+		    || variable_exists(eap->cmd, len, cctx))
 	    {
 		*line = compile_assignment(eap->cmd, eap, CMD_SIZE, cctx);
 		if (*line == NULL || *line == eap->cmd)
@@ -8332,7 +8342,7 @@
 	    }
 	}
 	p = find_ex_command(&ea, NULL, starts_with_colon ? NULL
-		   : (int (*)(char_u *, size_t, void *, cctx_T *))lookup_local,
+		   : (int (*)(char_u *, size_t, cctx_T *))variable_exists,
 									&cctx);
 
 	if (p == NULL)
