Mercurial > vim
diff src/vim9compile.c @ 24124:f4061617c438 v8.2.2603
patch 8.2.2603: Vim9: no effect if user command is also a function
Commit: https://github.com/vim/vim/commit/77b10ffad4ebad15022614be4db2745f6a90f405
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Mar 14 13:21:35 2021 +0100
patch 8.2.2603: Vim9: no effect if user command is also a function
Problem: Vim9: no effect if user command is also a function.
Solution: Check for paren following. (closes https://github.com/vim/vim/issues/7960)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 14 Mar 2021 13:30:03 +0100 |
parents | a028cb6898a2 |
children | c308076e225e |
line wrap: on
line diff
--- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -391,19 +391,29 @@ variable_exists(char_u *name, size_t len * imported or function. */ static int -item_exists(char_u *name, size_t len, cctx_T *cctx) +item_exists(char_u *name, size_t len, int cmd UNUSED, cctx_T *cctx) { int is_global; + char_u *p; if (variable_exists(name, len, cctx)) return TRUE; - // Find a function, so that a following "->" works. Skip "g:" before a - // function name. - // Do not check for an internal function, since it might also be a - // valid command, such as ":split" versuse "split()". - is_global = (name[0] == 'g' && name[1] == ':'); - return find_func(is_global ? name + 2 : name, is_global, cctx) != NULL; + // This is similar to what is in lookup_scriptitem(): + // Find a function, so that a following "->" works. + // Require "(" or "->" to follow, "Cmd" is a user command while "Cmd()" is + // a function call. + p = skipwhite(name + len); + + if (name[len] == '(' || (p[0] == '-' && p[1] == '>')) + { + // Do not check for an internal function, since it might also be a + // valid command, such as ":split" versuse "split()". + // Skip "g:" before a function name. + is_global = (name[0] == 'g' && name[1] == ':'); + return find_func(is_global ? name + 2 : name, is_global, cctx) != NULL; + } + return FALSE; } /* @@ -8429,8 +8439,8 @@ compile_def_function( } } } - p = find_ex_command(&ea, NULL, starts_with_colon ? NULL - : (int (*)(char_u *, size_t, cctx_T *))item_exists, &cctx); + p = find_ex_command(&ea, NULL, starts_with_colon + ? NULL : item_exists, &cctx); if (p == NULL) {