runtime(vim): Update base syntax, improve function call highlighting

Commit: 
https://github.com/vim/vim/commit/6ac2e4aa0a565dc8cac73b33c9c099cea77212a8
Author: Doug Kearns <dougkea...@gmail.com>
Date:   Thu Jul 10 20:50:06 2025 +0200

    runtime(vim): Update base syntax, improve function call highlighting
    
    - Match more function calls.
    - Contain function call syntax groups.
    - Improve differentiation between Ex commands and builtin functions with
      the same name.  Remove special cases.  Command modifiers are not
      currently well differentiated from functions.
    
    closes: #17712
    
    Signed-off-by: Doug Kearns <dougkea...@gmail.com>
    Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/runtime/syntax/generator/vim.vim.base 
b/runtime/syntax/generator/vim.vim.base
index 3c444da2d..debf2fb45 100644
--- a/runtime/syntax/generator/vim.vim.base
+++ b/runtime/syntax/generator/vim.vim.base
@@ -2,7 +2,7 @@
 " Language:       Vim script
 " Maintainer:     Hirohito Higashi <h.east.727 ATMARK gmail.com>
 "         Doug Kearns <dougkea...@gmail.com>
-" Last Change:    2025 Jul 05
+" Last Change:    2025 Jul 10
 " Former Maintainer: Charles E. Campbell
 
 " DO NOT CHANGE DIRECTLY.
@@ -232,7 +232,7 @@ syn case match
 " All vimCommands are contained by vimIsCommand. {{{2
 syn cluster vimCmdList 
contains=vimAbb,vimAddress,vimAutocmd,vimAugroup,vimBehave,vimCall,vimCatch,vimCommandModifier,vimConst,vimDoautocmd,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,vimDelFunction,@vimEcho,vimElse,vimEnddef,vimEndfunction,vimEndif,vimExecute,vimIsCommand,vimExtCmd,vimExFilter,vimExMark,vimFiletype,vimFor,vimFunction,vimFunctionFold,vimGrep,vimGrepAdd,vimGlobal,vimHelpgrep,vimHighlight,vimImport,vimLet,vimLoadkeymap,vimLockvar,vimMake,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimProfdel,vimProfile,vimRedir,vimSet,vimSleep,vimSort,vimSyntax,vimSynColor,vimSynLink,vimThrow,vimUniq,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimVimgrep,vimVimgrepadd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList,vimLua,vimMzScheme,vimPerl,vimPython,vimPython3,vimPythonX,vimRuby,vimTcl
 syn cluster vim9CmdList        
contains=vim9Abstract,vim9Class,vim9Const,vim9Enum,vim9Export,vim9Final,vim9For,vim9Interface,vim9Type,vim9Var
-syn match vimCmdSep    "\\@1<!|"       skipwhite 
nextgroup=@vimCmdList,vimSubst1,vimFunc
+syn match vimCmdSep    "\\@1<!|"       skipwhite 
nextgroup=@vimCmdList,vimSubst1,@vimFunc
 syn match vimCmdSep    ":\+"   skipwhite nextgroup=@vimCmdList,vimSubst1
 syn match vimCount     contained       "\d\+"
 syn match vimIsCommand "\<\%(\h\w*\|[23]mat\%[ch]\)\>"  nextgroup=vimBang 
contains=vimCommand
@@ -268,7 +268,7 @@ Vim9 syn match vim9LhsVariableList  
"\[\_[^]]\+]\ze\s\+\.\.="                       contains=vimVar,@
 
 Vim9 syn match vim9LhsRegister "@["0-9\-a-zA-Z#=*+_/]\ze\s\+\%(\.\.\)\=="
 
-syn cluster vimExprList        
contains=@vimSpecialVar,vimFunc,vimNumber,vimOper,vimOperParen,vimLambda,vimString,vimVar,@vim9ExprList
+syn cluster vimExprList        
contains=@vimSpecialVar,@vimFunc,vimNumber,vimOper,vimOperParen,vimLambda,vimString,vimVar,@vim9ExprList
 syn cluster vim9ExprList       contains=vim9Boolean,vim9LambdaParams,vim9Null
 
 " Insertions And Appends: insert append {{{2
@@ -291,7 +291,7 @@ syn keyword vimBehaveModel  contained       mswin   xterm
 
 " Call {{{2
 " ====
-syn match vimCall      "\<call\=\>"    skipwhite nextgroup=vimFunc
+syn match vimCall      "\<call\=\>"    skipwhite nextgroup=@vimFunc
 
 " Debuggreedy {{{2
 " ===========
@@ -361,7 +361,7 @@ syn match   vimImport               "\<imp\%[ort]\>"        
        skipwhite nextgroup=vimImportAutoload,vim
 
 " Augroup : vimAugroupError removed because long augroups caused sync'ing 
problems. {{{2
 " ======= : Trade-off: Increasing synclines with slower editing vs augroup END 
error checking.
-syn cluster vimAugroupList     
contains=@vimCmdList,vimFilter,vimFunc,vimLineComment,vimSpecFile,vimOper,vimNumber,vimOperParen,@vimComment,vimString,vimSubst,vimRegister,vimCmplxRepeat,vimNotation,vimCtrlChar,vimContinue
+syn cluster vimAugroupList     
contains=@vimCmdList,vimFilter,@vimFunc,vimLineComment,vimSpecFile,vimOper,vimNumber,vimOperParen,@vimComment,vimString,vimSubst,vimRegister,vimCmplxRepeat,vimNotation,vimCtrlChar,vimContinue
 
 " define
 VimFolda syn region vimAugroup
@@ -436,9 +436,9 @@ syn match   vim9LambdaOperatorComment contained "#.*" 
skipwhite skipempty nextgrou
 
 " Functions: Tag is provided for those who wish to highlight tagged functions 
{{{2
 " =========
-syn cluster    vimFunctionBodyCommon   
contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimFBVar,vimFunc,vimFunction,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegister,vimSpecFile,vimString,vimSubst,vimFunctionFold,vimDefFold,vimCmdSep
+syn cluster    vimFunctionBodyCommon   
contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimFBVar,vimFunction,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegister,vimSpecFile,vimString,vimSubst,vimFunctionFold,vimDefFold,vimCmdSep
 syn cluster    vimFunctionBodyList     
contains=@vimFunctionBodyCommon,vimComment,vimLineComment,vimInsert,vimConst,vimLet,vimSearch
-syn cluster    vimDefBodyList          
contains=@vimFunctionBodyCommon,vim9Comment,vim9LineComment,vim9Block,vim9Const,vim9Final,vim9Var,vim9Null,vim9Boolean,vim9For,vim9LhsVariable,vim9LhsVariableList,vim9LhsRegister,vim9Search,@vimSpecialVar
+syn cluster    vimDefBodyList          
contains=@vimFunctionBodyCommon,vim9Comment,vim9LineComment,vim9Block,vim9Const,vim9Final,vim9Var,vim9Null,vim9Boolean,vim9For,vim9LhsVariable,vim9LhsVariableList,vim9LhsRegister,vim9Search,@vimSpecialVar,@vim9Func
 
 syn region     vimFunctionPattern      contained
       \ matchgroup=vimOper
@@ -751,7 +751,7 @@ syn match   vimSpecFileMod  "\(:[phtre]\)\+"        
contained
 
 " User-Specified Commands: {{{2
 " =======================
-syn cluster    vimUserCmdList  
contains=@vimCmdList,vimCmplxRepeat,@vimComment,vimCtrlChar,vimEscapeBrace,vimFunc,vimNotation,vimNumber,vimOper,vimRegister,vimSpecFile,vimString,vimSubst,vimSubstRep,vimSubstRange
+syn cluster    vimUserCmdList  
contains=@vimCmdList,vimCmplxRepeat,@vimComment,vimCtrlChar,vimEscapeBrace,@vimFunc,vimNotation,vimNumber,vimOper,vimRegister,vimSpecFile,vimString,vimSubst,vimSubstRep,vimSubstRange
 
 syn match      vimUserCmd      "\<com\%[mand]\>!\="            skipwhite       
 nextgroup=vimUserCmdAttrs,vimUserCmdName contains=vimBang
 syn match      vimUserCmd      +\<com\%[mand]\>!\=\ze\s*
\s*\%(\\|["#]\ \)+      skipwhite skipnl 
nextgroup=vimUserCmdAttrs,vimUserCmdName contains=vimBang
@@ -975,7 +975,7 @@ syn match   vimCmplxRepeat  
'@[0-9a-z".=@:]\ze\($\|[^a-zA-Z]\>\)'
 " Set command and associated set-options (vimOptions) with comment {{{2
 syn match      vimSet          "\<\%(setl\%[ocal]\|setg\%[lobal]\|se\%[t]\)\>" 
skipwhite nextgroup=vimSetBang,vimCmdSep,vimComment,vimSetArgs
 syn region     vimSetComment   contained       start=+"+ skip=+
\s*\%(\\||"\ \)+ end="$" contains=@vimCommentGroup,vimCommentString extend
-syn match      vimSetCmdSep    contained       "|" skipwhite 
nextgroup=@vimCmdList,vimSubst1,vimFunc
+syn match      vimSetCmdSep    contained       "|" skipwhite 
nextgroup=@vimCmdList,vimSubst1,@vimFunc
 syn match      vimSetEscape    contained       "\\%(\[|"]\|.\)"
 syn match      vimSetBarEscape contained       "\|"
 syn match      vimSetQuoteEscape       contained       +\"+
@@ -1183,9 +1183,9 @@ syn region        vimAutocmdPattern       contained
       \ skip="\\\|\[,[:space:]]"
       \ end="\ze[,[:space:]]"
       \ end="$"
-      \ skipwhite nextgroup=vimAutocmdPatternSep,vimAutocmdMod,vimAutocmdBlock
+      \ skipwhite 
nextgroup=vimAutocmdPatternSep,vimAutocmdMod,vimAutocmdBlock,@vimFunc
       \ contains=vimEnvvar,@vimWildcard,vimAutocmdPatternEscape
-syn match      vimAutocmdBufferPattern contained       
"<buffer\%(=\%(\d\+\|abuf\)\)\=>" skipwhite 
nextgroup=vimAutocmdPatternSep,vimAutocmdMod,vimAutocmdBlock
+syn match      vimAutocmdBufferPattern contained       
"<buffer\%(=\%(\d\+\|abuf\)\)\=>" skipwhite 
nextgroup=vimAutocmdPatternSep,vimAutocmdMod,vimAutocmdBlock,@vimFunc
 " trailing pattern separator comma allowed
 syn match      vimAutocmdPatternSep    contained       ","                     
skipwhite nextgroup=@vimAutocmdPattern,vimAutocmdMod,vimAutocmdBlock
 syn match      vimAutocmdPatternEscape contained       "\."
@@ -1377,6 +1377,12 @@ syn region       vimMenutranslate
 syn match      vimMenutranslateName "\%(\\s\|\S\)\+" contained 
contains=vimMenuNotation,vimNotation
 syn match      vimMenutranslateComment +".*+ contained 
containedin=vimMenutranslate
 
+" If, While and Return: {{{2
+" ====================
+syn match      vimNotFunc      
"\%#=1\<\%(if\|el\%[seif]\|retu\%[rn]\|while\)\>"       skipwhite 
nextgroup=@vimExprList,vimNotation
+syn match      vimElse "\<el\%[se]\>"                  skipwhite 
nextgroup=vimComment,vim9Comment
+syn match      vimEndif        "\<en\%[dif]\>"                 skipwhite 
nextgroup=vimComment,vim9Comment
+
 " Angle-Bracket Notation: (tnx to Michael Geddes) {{{2
 " ======================
 syn case ignore
@@ -1400,17 +1406,8 @@ syn match        vimNotation     contained       
"\%#=1\%(\\|<lt>\)\=<\%([scamd]-\)\{0,4}char-\%
 syn match      vimBracket contained    "[\<>]"
 syn case match
 
-" User Function Highlighting: {{{2
-" (following Gautam Iyer's suggestion)
-" ==========================
-syn match      vimFunc                 
"\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\ze\s*("
                        skipwhite nextgroup=vimOperParen 
contains=vimFuncEcho,vimFuncName,vimUserFunc,vimExecute
-syn match      vimUserFunc     contained               
"\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\|\<\u[a-zA-Z0-9.]*\>\|\<if\>"
  contains=vimNotation,vim9MethodName,vim9Super,vim9This
-syn keyword    vimFuncEcho     contained       ec ech echo
-
-syn match      vimMap  "\<map\%(\s\+(\)\@="    skipwhite 
nextgroup=vimMapBang,vimMapMod,vimMapLhs
-
 " User Command Highlighting: {{{2
-syn match vimUsrCmd    
'^\s*\zs\u\%(\w*\)\@>\%([(#[]\|\s\+\%([-+*/%]\=\|\.\.\)=\)\@!'
+syn match vimUsrCmd    
'^\s*\zs\u\%(\w*\)\@>\%([.(#[]\|\s\+\%([-+*/%]\=\|\.\.\)=\)\@!'
 
 " Vim user commands
 
@@ -1440,12 +1437,6 @@ if !exists("g:vimsyn_noerror") && 
!exists("g:vimsyn_novimfunctionerror")
  syn match     vimBufnrWarn    /\<bufnr\s*(\s*["']\.['"]\s*)/
 endif
 
-" If, While and Return: {{{2
-" ====================
-syn match      vimNotFunc      
"\%#=1\<\%(if\|el\%[seif]\|retu\%[rn]\|while\)\>"       skipwhite 
nextgroup=@vimExprList,vimNotation
-syn match      vimElse "\<el\%[se]\>"                  skipwhite 
nextgroup=vimComment,vim9Comment
-syn match      vimEndif        "\<en\%[dif]\>"                 skipwhite 
nextgroup=vimComment,vim9Comment
-
 " Match: {{{2
 " =====
 syn match      vimMatch                "\<[23]\=mat\%[ch]\>" skipwhite 
nextgroup=vimMatchGroup,vimMatchNone
@@ -2064,6 +2055,20 @@ VimFoldt syn region vimTclHeredoc        contained
       \ contains=@vimTclScript
 
 unlet s:interfaces
+" Function Call Highlighting: {{{2
+" (following Gautam Iyer's suggestion)
+" ==========================
+syn match      vimFunc contained       "\<\l\w*\ze\s*("                        
        skipwhite nextgroup=vimOperParen contains=vimFuncName
+syn match      vimUserFunc     contained       
"\<\%([[:upper:]_]\|\%(\h\w*\.\)\+\h\)\w*\ze\s*("               skipwhite 
nextgroup=vimOperParen contains=vim9MethodName,vim9Super,vim9This
+syn match      vimUserFunc     contained       
"\<\%(g:\)\=\%(\h\w*#\)\+\h\w*\ze\s*("          skipwhite 
nextgroup=vimOperParen contains=vimVarScope
+syn match      vimUserFunc     contained       
"\%(\<[sgbwtlav]:\|<[sS][iI][dD]>\)\%(\h\w*\.\)*\h\w*\ze\s*("   skipwhite 
nextgroup=vimOperParen contains=vimVarScope,vimNotation
+
+Vim9 syn match vim9UserFunc    
"^\s*\zs\%([sgbwtv]:\|<[sS][iI][dD]>\)\=\%(\h\w*[.#]\)*\h\w*\ze("               
skipwhite nextgroup=vimOperParen 
contains=vimVarScope,vimNotation,vim9MethodName,vim9Super,vim9This
+Vim9 syn match vim9Func        "^\s*\zs\l\w*\ze("                              
skipwhite nextgroup=vimOperParen contains=vimFuncName
+
+syn cluster    vimFunc contains=vimFunc,vimUserFunc
+syn cluster    vim9Func        contains=vim9Func,vim9UserFunc
+
 " Beginners - Patterns that involve ^ {{{2
 " =========
 Vim9 syn region        vim9LineComment start=+^[       :]*\zs#.*$+ skip=+
\s*\\|
\s*#\ + end="$" contains=@vimCommentGroup,vimCommentString,vim9CommentTitle 
extend
@@ -2132,6 +2137,7 @@ if !exists("skip_vim_syntax_inits")
   hi def link vimFTError       vimError
   hi def link vimFunctionError vimError
   hi def link vimFunc          vimError
+  hi def link vim9Func                 vimError
   hi def link vimHiAttribList  vimError
   hi def link vimHiCtermError  vimError
   hi def link vimHiKeyError    vimError
diff --git 
a/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comment_errors_00.dump 
b/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comment_errors_00.dump
index 04f643ddf..b9b219e2d 100644
--- 
a/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comment_errors_00.dump
+++ 
b/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comment_errors_00.dump
@@ -15,6 +15,6 @@
 @2|f+0#af5f00255&|u|n| 
+0#0000000&|s+0#e000e06&|:|D+0#0000000&|o|T|e|s|t|3|(+0#e000e06&|)| 
+0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@8|#+0#ffffff16#ff404010| |f|u|n| 
+0#0000000#ffffff0@37
 @4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|3+0#e000002&| +0#0000000&@62
 @2|e+0#af5f00255&|n|d|f|u|n| +0#0000000&@23|#+0#ffffff16#ff404010| 
|e|n|d|f|u|n| +0#0000000#ffffff0@34
-@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|s|:|D|o|T|e|s|t|3|(+0#e000e06&|)| 
+0#0000000&@54
+@2|r+0#af5f00255&|e|t|u|r|n| 
+0#0000000&|s+0#00e0e07&|:|D+0#0000000&|o|T|e|s|t|3|(+0#e000e06&|)| 
+0#0000000&@54
 |e+0#af5f00255&|n|d|f|u|n| +0#0000000&@25|#+0#ffffff16#ff404010| |e|n|d|f|u|n| 
+0#0000000#ffffff0@34
 @57|1|,|1| @10|T|o|p| 
diff --git 
a/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comment_errors_01.dump 
b/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comment_errors_01.dump
index cb7caf568..896ab615c 100644
--- 
a/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comment_errors_01.dump
+++ 
b/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comment_errors_01.dump
@@ -2,7 +2,7 @@
 @2|f+0#af5f00255&|u|n| 
+0#0000000&|s+0#e000e06&|:|D+0#0000000&|o|T|e|s|t|3|(+0#e000e06&|)| 
+0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@8|#+0#ffffff16#ff404010| |f|u|n| 
+0#0000000#ffffff0@37
 @4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|3+0#e000002&| +0#0000000&@62
 @2|e+0#af5f00255&|n|d|f|u|n| +0#0000000&@23|#+0#ffffff16#ff404010| 
|e|n|d|f|u|n| +0#0000000#ffffff0@34
-@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|s|:|D|o|T|e|s|t|3|(+0#e000e06&|)| 
+0#0000000&@54
+@2|r+0#af5f00255&|e|t|u|r|n| 
+0#0000000&|s+0#00e0e07&|:|D+0#0000000&|o|T|e|s|t|3|(+0#e000e06&|)| 
+0#0000000&@54
 >e+0#af5f00255&|n|d|f|u|n| +0#0000000&@25|#+0#ffffff16#ff404010| |e|n|d|f|u|n| 
 >+0#0000000#ffffff0@34
 @75
 |d+0#af5f00255&|e|f| +0#0000000&|T|e|s|t|4|(+0#e000e06&|)|:+0#0000000&| 
|n+0#00e0003&|u|m|b|e|r| +0#0000000&@12|"+0#ffffff16#ff404010| |d|e|f| 
+0#0000000#ffffff0@37
diff --git 
a/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comment_errors_02.dump 
b/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comment_errors_02.dump
index e74df6743..71c31bf92 100644
--- 
a/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comment_errors_02.dump
+++ 
b/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comment_errors_02.dump
@@ -5,7 +5,7 @@
 @2|d+0#af5f00255&|e|f| 
+0#0000000&|s+0#e000e06&|:|D+0#0000000&|o|T|e|s|t|6|(+0#e000e06&|)|:+0#0000000&|
 |n+0#00e0003&|u|m|b|e|r| +0#0000000&@6|"+0#ffffff16#ff404010| |d|e|f| 
+0#0000000#ffffff0@37
 @4>r+0#af5f00255&|e|t|u|r|n| +0#0000000&|6+0#e000002&| +0#0000000&@62
 @2|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@23|"+0#ffffff16#ff404010| 
|e|n|d@1|e|f| +0#0000000#ffffff0@34
-@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|s|:|D|o|T|e|s|t|6|(+0#e000e06&|)| 
+0#0000000&@54
+@2|r+0#af5f00255&|e|t|u|r|n| 
+0#0000000&|s+0#00e0e07&|:|D+0#0000000&|o|T|e|s|t|6|(+0#e000e06&|)| 
+0#0000000&@54
 |e+0#af5f00255&|n|d|f|u|n| +0#0000000&@25|#+0#ffffff16#ff404010| |e|n|d|f|u|n| 
+0#0000000#ffffff0@34
 @75
 |f+0#af5f00255&|o|r| +0#0000000&|d+0#00e0e07&| +0#0000000&|i+0#af5f00255&|n| 
+0#0000000&|r+0#00e0e07&|a|n|g|e|(+0#e000e06&|1+0#e000002&|,+0#0000000&| 
|6+0#e000002&|)+0#e000e06&| +0#0000000&@54
diff --git 
a/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comments_00.dump 
b/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comments_00.dump
index b6ed4904d..081c0a3ed 100644
--- a/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comments_00.dump
+++ b/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comments_00.dump
@@ -15,6 +15,6 @@
 @2|f+0#af5f00255&|u|n| 
+0#0000000&|s+0#e000e06&|:|D+0#0000000&|o|T|e|s|t|3|(+0#e000e06&|)| 
+0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@8|"+0#0000e05&| |f|u|n| 
+0#0000000&@37
 @4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|3+0#e000002&| +0#0000000&@62
 @2|e+0#af5f00255&|n|d|f|u|n| +0#0000000&@23|"+0#0000e05&| |e|n|d|f|u|n| 
+0#0000000&@34
-@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|s|:|D|o|T|e|s|t|3|(+0#e000e06&|)| 
+0#0000000&@54
+@2|r+0#af5f00255&|e|t|u|r|n| 
+0#0000000&|s+0#00e0e07&|:|D+0#0000000&|o|T|e|s|t|3|(+0#e000e06&|)| 
+0#0000000&@54
 |e+0#af5f00255&|n|d|f|u|n| +0#0000000&@25|"+0#0000e05&| |e|n|d|f|u|n| 
+0#0000000&@34
 @57|1|,|1| @10|T|o|p| 
diff --git 
a/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comments_01.dump 
b/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comments_01.dump
index 6cb37d125..30083bd4d 100644
--- a/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comments_01.dump
+++ b/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comments_01.dump
@@ -2,7 +2,7 @@
 @2|f+0#af5f00255&|u|n| 
+0#0000000&|s+0#e000e06&|:|D+0#0000000&|o|T|e|s|t|3|(+0#e000e06&|)| 
+0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@8|"+0#0000e05&| |f|u|n| 
+0#0000000&@37
 @4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|3+0#e000002&| +0#0000000&@62
 @2|e+0#af5f00255&|n|d|f|u|n| +0#0000000&@23|"+0#0000e05&| |e|n|d|f|u|n| 
+0#0000000&@34
-@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|s|:|D|o|T|e|s|t|3|(+0#e000e06&|)| 
+0#0000000&@54
+@2|r+0#af5f00255&|e|t|u|r|n| 
+0#0000000&|s+0#00e0e07&|:|D+0#0000000&|o|T|e|s|t|3|(+0#e000e06&|)| 
+0#0000000&@54
 >e+0#af5f00255&|n|d|f|u|n| +0#0000000&@25|"+0#0000e05&| |e|n|d|f|u|n| 
 >+0#0000000&@34
 @75
 |d+0#af5f00255&|e|f| +0#0000000&|T|e|s|t|4|(+0#e000e06&|)|:+0#0000000&| 
|n+0#00e0003&|u|m|b|e|r| +0#0000000&@12|#+0#0000e05&| |d|e|f| +0#0000000&@37
diff --git 
a/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comments_02.dump 
b/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comments_02.dump
index 7df9e8f15..e9e8022b9 100644
--- a/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comments_02.dump
+++ b/runtime/syntax/testdir/dumps/vim9_ex_function_def_tail_comments_02.dump
@@ -5,7 +5,7 @@
 @2|d+0#af5f00255&|e|f| 
+0#0000000&|s+0#e000e06&|:|D+0#0000000&|o|T|e|s|t|6|(+0#e000e06&|)|:+0#0000000&|
 |n+0#00e0003&|u|m|b|e|r| +0#0000000&@6|#+0#0000e05&| |d|e|f| +0#0000000&@37
 @4>r+0#af5f00255&|e|t|u|r|n| +0#0000000&|6+0#e000002&| +0#0000000&@62
 @2|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@23|#+0#0000e05&| |e|n|d@1|e|f| 
+0#0000000&@34
-@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|s|:|D|o|T|e|s|t|6|(+0#e000e06&|)| 
+0#0000000&@54
+@2|r+0#af5f00255&|e|t|u|r|n| 
+0#0000000&|s+0#00e0e07&|:|D+0#0000000&|o|T|e|s|t|6|(+0#e000e06&|)| 
+0#0000000&@54
 |e+0#af5f00255&|n|d|f|u|n| +0#0000000&@25|"+0#0000e05&| |e|n|d|f|u|n| 
+0#0000000&@34
 @75
 |f+0#af5f00255&|o|r| +0#0000000&|d+0#00e0e07&| +0#0000000&|i+0#af5f00255&|n| 
+0#0000000&|r+0#00e0e07&|a|n|g|e|(+0#e000e06&|1+0#e000002&|,+0#0000000&| 
|6+0#e000002&|)+0#e000e06&| +0#0000000&@54
diff --git a/runtime/syntax/testdir/dumps/vim9_function_call_00.dump 
b/runtime/syntax/testdir/dumps/vim9_function_call_00.dump
new file mode 100644
index 000000000..c90f2fa1c
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_function_call_00.dump
@@ -0,0 +1,20 @@
+>v+0#af5f00255#ffffff0|i|m|9|s|c|r|i|p|t| +0#0000000&@64
+|#+0#0000e05&| |V|i|m| |f|u|n|c|t|i|o|n| |c|a|l@1|s| +0#0000000&@54
+|#+0#0000e05&| |V|I|M|_|S|E|T|U|P| |h|i|g|h|l|i|g|h|t| |l|i|n|k| 
|v|i|m|U|s|e|r|F|u|n|c| |T|o|d|o| +0#0000000&@31
+|#+0#0000e05&| |V|I|M|_|S|E|T|U|P| |h|i|g|h|l|i|g|h|t| |l|i|n|k| 
|v|i|m|9|U|s|e|r|F|u|n|c| |T|o|d|o| +0#0000000&@30
+@75
+@75
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|a+0#00e0e07&|b|s|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@62
+|a+0#00e0e07&|b|s|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@67
+@75
+@75
+|#+0#0000e05&| |c|o|m@1|a|n|d|/|f|u|n|c|t|i|o|n| |d|i|s|t|i|n|c|t|i|o|n| 
+0#0000000&@44
+@75
+|#+0#0000e05&| |a|p@1|e|n|d| |b|r|o|w|s|e| |c|a|l@1| |c|h|d|i|r| 
|c|o|n|f|i|r|m| |c|o|p|y| |d|e|l|e|t|e| |e|v|a|l| |e|x|e|c|u|t|e| |f|i|l|t|e|r| 
|f|u|n|c|t|i|o|n
+|#| |i|n|s|e|r|t| |j|o|i|n| |m|a|p| |m|a|t|c|h| |m|o|d|e| |s|o|r|t| 
|s|p|l|i|t| |s|u|b|s|t|i|t|u|t|e| |s|w|a|p|n|a|m|e| |t|y|p|e| +0#0000000&@10
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|a|p@1|e|n|d| |=+0#af5f00255&| 
+0#0000000&|a+0#00e0e07&|p@1|e|n|d|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@51
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|a+0#00e0e07&|p@1|e|n|d|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@59
+|#+0#0000e05&| |f|u|n|c|t|i|o|n| +0#0000000&@64
+|a+0#00e0e07&|p@1|e|n|d|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@64
+@57|1|,|1| @10|T|o|p| 
diff --git a/runtime/syntax/testdir/dumps/vim9_function_call_01.dump 
b/runtime/syntax/testdir/dumps/vim9_function_call_01.dump
new file mode 100644
index 000000000..065e553ee
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_function_call_01.dump
@@ -0,0 +1,20 @@
+|#+0#0000e05#ffffff0| |i|n|s|e|r|t| |j|o|i|n| |m|a|p| |m|a|t|c|h| |m|o|d|e| 
|s|o|r|t| |s|p|l|i|t| |s|u|b|s|t|i|t|u|t|e| |s|w|a|p|n|a|m|e| |t|y|p|e| 
+0#0000000&@10
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|a|p@1|e|n|d| |=+0#af5f00255&| 
+0#0000000&|a+0#00e0e07&|p@1|e|n|d|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@51
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|a+0#00e0e07&|p@1|e|n|d|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@59
+|#+0#0000e05&| |f|u|n|c|t|i|o|n| +0#0000000&@64
+>a+0#00e0e07&|p@1|e|n|d|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@64
+|#+0#0000e05&| |L|e|g|a|c|y| |c|o|m@1|a|n|d| +0#0000000&@58
+|#+0#0000e05&| |a|p@1|e|n|d| |(|4|2|)| +0#0000000&@61
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|b|r|o|w|s|e| |=+0#af5f00255&| 
+0#0000000&|b+0#00e0e07&|r|o|w|s|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@51
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|b+0#00e0e07&|r|o|w|s|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@59
+|#+0#0000e05&| |f|u|n|c|t|i|o|n| +0#0000000&@64
+|b+0#af5f00255&|r|o|w|s|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@64
+|#+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|b+0#af5f00255&|r|o|w|s|e| 
+0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@63
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|c|a|l@1| |=+0#af5f00255&| 
+0#0000000&|c+0#00e0e07&|a|l@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|c+0#00e0e07&|a|l@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@61
+|#+0#0000e05&| |f|u|n|c|t|i|o|n| +0#0000000&@64
+@57|1|9|,|1| @10|4|%| 
diff --git a/runtime/syntax/testdir/dumps/vim9_function_call_02.dump 
b/runtime/syntax/testdir/dumps/vim9_function_call_02.dump
new file mode 100644
index 000000000..c669eaf7b
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_function_call_02.dump
@@ -0,0 +1,20 @@
+|#+0#0000e05#ffffff0| |f|u|n|c|t|i|o|n| +0#0000000&@64
+|c+0#00e0e07&|a|l@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@66
+|#+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|c+0#af5f00255&|a|l@1| +0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@65
+@75
+>v+0#af5f00255&|a|r| +0#0000000&|c|h|d|i|r| |=+0#af5f00255&| 
+0#0000000&|c+0#00e0e07&|h|d|i|r|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@53
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|c+0#00e0e07&|h|d|i|r|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@60
+|#+0#0000e05&| |f|u|n|c|t|i|o|n| +0#0000000&@64
+|c+0#00e0e07&|h|d|i|r|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@65
+|#+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|c+0#af5f00255&|h|d|i|r| +0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@64
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|c|o|n|f|i|r|m| |=+0#af5f00255&| 
+0#0000000&|c+0#00e0e07&|o|n|f|i|r|m|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@49
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|c+0#00e0e07&|o|n|f|i|r|m|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@58
+|#+0#0000e05&| |f|u|n|c|t|i|o|n| +0#0000000&@64
+|c+0#af5f00255&|o|n|f|i|r|m|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@63
+|#+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|c+0#af5f00255&|o|n|f|i|r|m| 
+0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@62
+@75
+@57|3|7|,|1| @9|1@1|%| 
diff --git a/runtime/syntax/testdir/dumps/vim9_function_call_03.dump 
b/runtime/syntax/testdir/dumps/vim9_function_call_03.dump
new file mode 100644
index 000000000..487699943
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_function_call_03.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|v+0#af5f00255&|a|r| +0#0000000&|c|o|p|y| |=+0#af5f00255&| 
+0#0000000&|c+0#00e0e07&|o|p|y|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|c+0#00e0e07&|o|p|y|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@61
+|#+0#0000e05&| |f|u|n|c|t|i|o|n| +0#0000000&@64
+|c+0#00e0e07&|o|p|y|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@66
+>#+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|c+0#af5f00255&|o|p|y| +0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@65
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|d|e|l|e|t|e| |=+0#af5f00255&| 
+0#0000000&|d+0#00e0e07&|e|l|e|t|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@51
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|d+0#00e0e07&|e|l|e|t|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@59
+|#+0#0000e05&| |f|u|n|c|t|i|o|n| +0#0000000&@64
+|d+0#00e0e07&|e|l|e|t|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@64
+|#+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|d+0#af5f00255&|e|l|e|t|e| 
+0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@63
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|e|v|a|l| |=+0#af5f00255&| 
+0#0000000&|e+0#00e0e07&|v|a|l|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|e+0#00e0e07&|v|a|l|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@61
+|#+0#0000e05&| |f|u|n|c|t|i|o|n| +0#0000000&@64
+|e+0#00e0e07&|v|a|l|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@66
+@57|5@1|,|1| @9|1|7|%| 
diff --git a/runtime/syntax/testdir/dumps/vim9_function_call_04.dump 
b/runtime/syntax/testdir/dumps/vim9_function_call_04.dump
new file mode 100644
index 000000000..9bc1fb7b4
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_function_call_04.dump
@@ -0,0 +1,20 @@
+|e+0#00e0e07#ffffff0|v|a|l|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@66
+|#+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|e+0#af5f00255&|v|a|l| +0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@65
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|e|x|e|c|u|t|e| |=+0#af5f00255&| 
+0#0000000&|e+0#00e0e07&|x|e|c|u|t|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@49
+>c+0#af5f00255&|a|l@1| 
+0#0000000&|e+0#00e0e07&|x|e|c|u|t|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@58
+|#+0#0000e05&| |f|u|n|c|t|i|o|n| +0#0000000&@64
+|e+0#00e0e07&|x|e|c|u|t|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@63
+|#+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|e+0#af5f00255&|x|e|c|u|t|e| 
+0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@62
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|f|i|l|t|e|r| |=+0#af5f00255&| 
+0#0000000&|f+0#00e0e07&|i|l|t|e|r|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@51
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|f+0#00e0e07&|i|l|t|e|r|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@59
+|#+0#0000e05&| |f|u|n|c|t|i|o|n| +0#0000000&@64
+|f+0#00e0e07&|i|l|t|e|r|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@64
+|#+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|f+0#af5f00255&|i|l|t|e|r| 
+0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@63
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|f|u|n|c|t|i|o|n| |=+0#af5f00255&| 
+0#0000000&|f+0#00e0e07&|u|n|c|t|i|o|n|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@47
+@57|7|3|,|1| @9|2|4|%| 
diff --git a/runtime/syntax/testdir/dumps/vim9_function_call_05.dump 
b/runtime/syntax/testdir/dumps/vim9_function_call_05.dump
new file mode 100644
index 000000000..a8f4970cf
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_function_call_05.dump
@@ -0,0 +1,20 @@
+|v+0#af5f00255#ffffff0|a|r| +0#0000000&|f|u|n|c|t|i|o|n| |=+0#af5f00255&| 
+0#0000000&|f+0#00e0e07&|u|n|c|t|i|o|n|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@47
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|f+0#00e0e07&|u|n|c|t|i|o|n|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@57
+|#+0#0000e05&| |f|u|n|c|t|i|o|n| +0#0000000&@64
+|f+0#00e0e07&|u|n|c|t|i|o|n|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@62
+|#+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+>f+0#af5f00255&|u|n|c|t|i|o|n| 
+0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@61
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|i|n|s|e|r|t| |=+0#af5f00255&| 
+0#0000000&|i+0#00e0e07&|n|s|e|r|t|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@51
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|i+0#00e0e07&|n|s|e|r|t|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@59
+|#+0#0000e05&| |f|u|n|c|t|i|o|n| +0#0000000&@64
+|i+0#00e0e07&|n|s|e|r|t|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@64
+|#+0#0000e05&| |L|e|g|a|c|y| |c|o|m@1|a|n|d| +0#0000000&@58
+|#+0#0000e05&| |i|n|s|e|r|t| |(|4|2|)| +0#0000000&@61
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|j|o|i|n| |=+0#af5f00255&| 
+0#0000000&|j+0#00e0e07&|o|i|n|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|j+0#00e0e07&|o|i|n|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@61
+|#+0#0000e05&| |f|u|n|c|t|i|o|n| +0#0000000&@64
+|j+0#00e0e07&|o|i|n|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@66
+|#+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+@57|9|1|,|1| @9|3|0|%| 
diff --git a/runtime/syntax/testdir/dumps/vim9_function_call_06.dump 
b/runtime/syntax/testdir/dumps/vim9_function_call_06.dump
new file mode 100644
index 000000000..c8c8f387f
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_function_call_06.dump
@@ -0,0 +1,20 @@
+|#+0#0000e05#ffffff0| |c|o|m@1|a|n|d| +0#0000000&@65
+|j+0#af5f00255&|o|i|n| +0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@65
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|m|a|p| |=+0#af5f00255&| 
+0#0000000&|m+0#00e0e07&|a|p|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@57
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|m+0#00e0e07&|a|p|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@62
+>#+0#0000e05&| |f|u|n|c|t|i|o|n| +0#0000000&@64
+|m+0#00e0e07&|a|p|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@67
+|#+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|m+0#af5f00255&|a|p| +0#0000000&|(|4|2|)| @66
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|m|a|t|c|h| |=+0#af5f00255&| 
+0#0000000&|m+0#00e0e07&|a|t|c|h|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@53
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|m+0#00e0e07&|a|t|c|h|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@60
+|#+0#0000e05&| |f|u|n|c|t|i|o|n| +0#0000000&@64
+|m+0#00e0e07&|a|t|c|h|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@65
+|#+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|m+0#af5f00255&|a|t|c|h| +0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@64
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|s|o|r|t| |=+0#af5f00255&| 
+0#0000000&|s+0#00e0e07&|o|r|t|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|s+0#00e0e07&|o|r|t|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@61
+@57|1|0|9|,|1| @8|3|7|%| 
diff --git a/runtime/syntax/testdir/dumps/vim9_function_call_07.dump 
b/runtime/syntax/testdir/dumps/vim9_function_call_07.dump
new file mode 100644
index 000000000..a41ea00f0
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_function_call_07.dump
@@ -0,0 +1,20 @@
+|c+0#af5f00255#ffffff0|a|l@1| 
+0#0000000&|s+0#00e0e07&|o|r|t|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@61
+|#+0#0000e05&| |f|u|n|c|t|i|o|n| +0#0000000&@64
+|s+0#00e0e07&|o|r|t|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@66
+|#+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|s+0#af5f00255&|o|r|t| +0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@65
+> @74
+|v+0#af5f00255&|a|r| +0#0000000&|s|p|l|i|t| |=+0#af5f00255&| 
+0#0000000&|s+0#00e0e07&|p|l|i|t|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@53
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|s+0#00e0e07&|p|l|i|t|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@60
+|#+0#0000e05&| |f|u|n|c|t|i|o|n| +0#0000000&@64
+|s+0#00e0e07&|p|l|i|t|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@65
+|#+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|s+0#af5f00255&|p|l|i|t| +0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@64
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|s|u|b|s|t|i|t|u|t|e| |=+0#af5f00255&| 
+0#0000000&|s+0#00e0e07&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@43
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|s+0#00e0e07&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@55
+|#+0#0000e05&| |f|u|n|c|t|i|o|n| +0#0000000&@64
+|s+0#00e0e07&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@60
+|#+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|s+0#af5f00255&|u|b|s|t|i|t|u|t|e| 
+0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@59
+@57|1|2|7|,|0|-|1| @6|4|3|%| 
diff --git a/runtime/syntax/testdir/dumps/vim9_function_call_08.dump 
b/runtime/syntax/testdir/dumps/vim9_function_call_08.dump
new file mode 100644
index 000000000..3f365bb32
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_function_call_08.dump
@@ -0,0 +1,20 @@
+|s+0#af5f00255#ffffff0|u|b|s|t|i|t|u|t|e| 
+0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@59
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|s|w|a|p|n|a|m|e| |=+0#af5f00255&| 
+0#0000000&|s+0#00e0e07&|w|a|p|n|a|m|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@47
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|s+0#00e0e07&|w|a|p|n|a|m|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@57
+|#+0#0000e05&| |f|u|n|c|t|i|o|n| +0#0000000&@64
+>s+0#00e0e07&|w|a|p|n|a|m|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@62
+|#+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|s+0#af5f00255&|w|a|p|n|a|m|e| 
+0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@61
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|t|y|p|e| |=+0#af5f00255&| 
+0#0000000&|t+0#00e0e07&|y|p|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|t+0#00e0e07&|y|p|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@61
+|#+0#0000e05&| |f|u|n|c|t|i|o|n| +0#0000000&@64
+|t+0#00e0e07&|y|p|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@66
+|#+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|t+0#af5f00255&|y|p|e| +0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@65
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|u|n|i|q| |=+0#af5f00255&| 
+0#0000000&|u+0#00e0e07&|n|i|q|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|u+0#00e0e07&|n|i|q|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@61
+|#+0#0000e05&| |f|u|n|c|t|i|o|n| +0#0000000&@64
+@57|1|4|5|,|1| @8|5|0|%| 
diff --git a/runtime/syntax/testdir/dumps/vim9_function_call_09.dump 
b/runtime/syntax/testdir/dumps/vim9_function_call_09.dump
new file mode 100644
index 000000000..23b5f1d2e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_function_call_09.dump
@@ -0,0 +1,20 @@
+|#+0#0000e05#ffffff0| |f|u|n|c|t|i|o|n| +0#0000000&@64
+|u+0#00e0e07&|n|i|q|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@66
+|#+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|u+0#af5f00255&|n|i|q| +0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@65
+@75
+> @74
+|#+0#0000e05&| |e|r@1|o|r|s| +0#0000000&@66
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|f+0#ffffff16#ff404010|o@1|(+0#e000e06#ffffff0|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@57
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|f+0#ffffff16#ff404010|o@1|(+0#e000e06#ffffff0|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@62
+|f+0#ffffff16#ff404010|o@1|(+0#e000e06#ffffff0|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@67
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|i|f| |=+0#af5f00255&| 
+0#0000000&|i+0#ffffff16#ff404010|f|(+0#e000e06#ffffff0|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@59
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|i+0#ffffff16#ff404010|f|(+0#e000e06#ffffff0|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@63
+|#+0#0000e05&| |f|u|n|c|t|i|o|n| +0#0000000&@64
+|i+0#ffffff16#ff404010|f|(+0#e000e06#ffffff0|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&||| |.+0#af5f00255&@1| +0#0000000&||| |e+0#af5f00255&|n|d|i|f| 
+0#0000000&@55
+|#+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|i+0#af5f00255&|f| +0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&||| |.+0#af5f00255&@1| +0#0000000&||| |e+0#af5f00255&|n|d|i|f| 
+0#0000000&@54
+@75
+@57|1|6|3|,|0|-|1| @6|5|6|%| 
diff --git a/runtime/syntax/testdir/dumps/vim9_function_call_10.dump 
b/runtime/syntax/testdir/dumps/vim9_function_call_10.dump
new file mode 100644
index 000000000..1030aec6c
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_function_call_10.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|v+0#af5f00255&|a|r| +0#0000000&|e|c|h|o| |=+0#af5f00255&| 
+0#0000000&|e+0#ffffff16#ff404010|c|h|o|(+0#e000e06#ffffff0|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|e+0#ffffff16#ff404010|c|h|o|(+0#e000e06#ffffff0|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@61
+|#+0#0000e05&| |f|u|n|c|t|i|o|n| +0#0000000&@64
+|e+0#ffffff16#ff404010|c|h|o|(+0#e000e06#ffffff0|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@66
+>#+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|e+0#af5f00255&|c|h|o| +0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@65
+@75
+@75
+|#+0#0000e05&| |e|x|p|r|e|s@1|i|o|n|s| +0#0000000&@61
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|a+0#00e0e07&|b|s|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@57
+@75
+|a+0#00e0e07&|b|s|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@67
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|a+0#00e0e07&|b|s|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@62
+|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| 
|a+0#00e0e07&|b|s|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@54
+@75
+|e+0#af5f00255&|c|h|o| 
+0#0000000&|a+0#00e0e07&|b|s|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@62
+|e+0#af5f00255&|c|h|o| 
+0#0000000&|(+0#e000e06&|a+0#00e0e07&|b|s|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&@1|
 +0#0000000&@60
+@57|1|8|1|,|1| @8|6|3|%| 
diff --git a/runtime/syntax/testdir/dumps/vim9_function_call_11.dump 
b/runtime/syntax/testdir/dumps/vim9_function_call_11.dump
new file mode 100644
index 000000000..3cb73d122
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_function_call_11.dump
@@ -0,0 +1,20 @@
+|e+0#af5f00255#ffffff0|c|h|o| 
+0#0000000&|(+0#e000e06&|a+0#00e0e07&|b|s|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&@1|
 +0#0000000&@60
+|e+0#af5f00255&|c|h|o| 
+0#0000000&|a+0#00e0e07&|b|s|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&|++0#af5f00255&| +0#0000000&|f|o@1| @56
+|e+0#af5f00255&|c|h|o| +0#0000000&|f|o@1| |++0#af5f00255&| 
+0#0000000&|a+0#00e0e07&|b|s|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@56
+@75
+|F|o@1|(+0#e000e06&|)| +0#0000000&@69
+>c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@64
+|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| 
|F|o@1|(+0#e000e06&|)| +0#0000000&@56
+@75
+|e+0#af5f00255&|c|h|o| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@64
+|e+0#af5f00255&|c|h|o| 
+0#0000000&|(+0#e000e06&|F+0#0000000&|o@1|(+0#e000e06&|)@1| +0#0000000&@62
+|e+0#af5f00255&|c|h|o| +0#0000000&|F|o@1|(+0#e000e06&|)| 
+0#0000000&|++0#af5f00255&| +0#0000000&|b|a|r| @58
+|e+0#af5f00255&|c|h|o| +0#0000000&|b|a|r| |++0#af5f00255&| 
+0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58
+@75
+@75
+|#+0#0000e05&| |s|c|o|p|e| |m|o|d|i|f|i|e|r|s| |a|n|d| |q|u|a|l|i|f|i|e|d| 
|n|a|m|e|s| +0#0000000&@37
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|g+0#00e0e07&|:|f+0#0000000&|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|g+0#00e0e07&|:|f+0#0000000&|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@60
+@75
+@57|1|9@1|,|1| @8|6|9|%| 
diff --git a/runtime/syntax/testdir/dumps/vim9_function_call_12.dump 
b/runtime/syntax/testdir/dumps/vim9_function_call_12.dump
new file mode 100644
index 000000000..73b5a5301
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_function_call_12.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|v+0#af5f00255&|a|r| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|b+0#00e0e07&|:|f+0#0000000&|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|b+0#00e0e07&|:|f+0#0000000&|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@60
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|w+0#00e0e07&|:|f+0#0000000&|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@55
+>c+0#af5f00255&|a|l@1| 
+0#0000000&|w+0#00e0e07&|:|f+0#0000000&|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@60
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|t+0#00e0e07&|:|f+0#0000000&|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|t+0#00e0e07&|:|f+0#0000000&|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@60
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|v+0#00e0e07&|:|f+0#0000000&|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|v+0#00e0e07&|:|f+0#0000000&|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@60
+@75
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|m|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@50
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|m|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@55
+|m|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@60
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|g+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@48
+@57|2|1|7|,|1| @8|7|6|%| 
diff --git a/runtime/syntax/testdir/dumps/vim9_function_call_13.dump 
b/runtime/syntax/testdir/dumps/vim9_function_call_13.dump
new file mode 100644
index 000000000..79e893aaa
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_function_call_13.dump
@@ -0,0 +1,20 @@
+|v+0#af5f00255#ffffff0|a|r| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|g+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@48
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|g+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@53
+|g+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@58
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|b+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@48
+>c+0#af5f00255&|a|l@1| 
+0#0000000&|b+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@53
+|b+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@58
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|w+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@48
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|w+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@53
+|w+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@58
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|t+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@48
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|t+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@53
+|t+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@58
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|v+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@48
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|v+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@53
+|v+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@58
+@57|2|3|5|,|1| @8|8|2|%| 
diff --git a/runtime/syntax/testdir/dumps/vim9_function_call_14.dump 
b/runtime/syntax/testdir/dumps/vim9_function_call_14.dump
new file mode 100644
index 000000000..6115b4001
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_function_call_14.dump
@@ -0,0 +1,20 @@
+|v+0#00e0e07#ffffff0|:|m+0#0000000&|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@58
+@75
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|m|o|d|u|l|e|#|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@50
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|m|o|d|u|l|e|#|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@55
+>m|o|d|u|l|e|#|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@60
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|g+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|#|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@48
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|g+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|#|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@53
+|g+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|#|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@58
+@75
+@75
+|#+0#0000e05&| |n|o|t| |b|u|i|l|t|i|n| |f|u|n|c|t|i|o|n|s| +0#0000000&@51
+@75
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|g+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)| 
+0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|b+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)| 
+0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|w+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)| 
+0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|t+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)| 
+0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|v+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)| 
+0#0000000&@55
+@57|2|5|3|,|1| @8|8|9|%| 
diff --git a/runtime/syntax/testdir/dumps/vim9_function_call_15.dump 
b/runtime/syntax/testdir/dumps/vim9_function_call_15.dump
new file mode 100644
index 000000000..2b15d1e2a
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_function_call_15.dump
@@ -0,0 +1,20 @@
+|c+0#af5f00255#ffffff0|a|l@1| 
+0#0000000&|v+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)| 
+0#0000000&@55
+@75
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|<+0#e000e06&|S|I|D|>|s+0#0000000&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)| 
+0#0000000&@52
+@75
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|g+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|.|s|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)|
 +0#0000000&@44
+>c+0#af5f00255&|a|l@1| 
+0#0000000&|b+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|.|s|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)|
 +0#0000000&@44
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|w+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|.|s|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)|
 +0#0000000&@44
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|t+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|.|s|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)|
 +0#0000000&@44
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|v+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|.|s|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)|
 +0#0000000&@44
+@75
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|s|u|b|s|t|i|t|u|t|e|#|s|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)| 
+0#0000000&@46
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|g+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|#|s|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)|
 +0#0000000&@44
+@75
+|g+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)| +0#0000000&@60
+|b+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)| +0#0000000&@60
+|w+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)| +0#0000000&@60
+|t+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)| +0#0000000&@60
+|v+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)| +0#0000000&@60
+@75
+@57|2|7|1|,|1| @8|9|6|%| 
diff --git a/runtime/syntax/testdir/dumps/vim9_function_call_16.dump 
b/runtime/syntax/testdir/dumps/vim9_function_call_16.dump
new file mode 100644
index 000000000..d8cee2c80
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_function_call_16.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|<+0#e000e06&|S|I|D|>|s+0#0000000&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)| 
+0#0000000&@57
+@75
+|g+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|.|s|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)|
 +0#0000000&@49
+|b+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|.|s|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)|
 +0#0000000&@49
+>w+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|.|s|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)|
 +0#0000000&@49
+|t+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|.|s|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)|
 +0#0000000&@49
+|v+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|.|s|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)|
 +0#0000000&@49
+@75
+|s|u|b|s|t|i|t|u|t|e|#|s|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)| +0#0000000&@51
+|g+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|#|s|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)|
 +0#0000000&@49
+@75
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|2|8|9|,|1| @8|B|o|t| 
diff --git a/runtime/syntax/testdir/dumps/vim9_lambda_09.dump 
b/runtime/syntax/testdir/dumps/vim9_lambda_09.dump
index b0d3e9d1f..ea5823d2a 100644
--- a/runtime/syntax/testdir/dumps/vim9_lambda_09.dump
+++ b/runtime/syntax/testdir/dumps/vim9_lambda_09.dump
@@ -2,7 +2,7 @@
 |#+0#0000e05&| |I|s@1|u|e| |#|1|6|9|6|5| |(|v|i|m| |s|y|n|t|a|x|:| |w|r|o|n|g| 
|h|i|g|h|l|i|g|h|t| |w|i|t|h| |l|a|m|b|d|a|,| |a|u|t|o|l|o|a|d|,| |a|n|d| 
|f|a|l|s
 |e| |k|e|y|w|o|r|d|)| +0#0000000&@64
 @75
-|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| 
+0#0000000&|*+0#e000e06&| 
+0#0000000&|t+0#00e0e07&|i|m|e|r|_|s|t|a|r|t|(+0#e000e06&|0+0#e000002&|,+0#0000000&|
 |(+0#0000001#ffff4012|_+0#00e0e07#ffffff0|)+0#0000001#ffff4012| 
+0#0000000#ffffff0|=+0#0000001#ffff4012|>| 
+0#0000000#ffffff0|f+0#00e0e07&|#|a|(+0#e000e06&|f+0#e000002&|a|l|s|e|,+0#0000000&|
 |f+0#e000002&|a|l|s|e|)+0#e000e06&@1| +0#0000000&@16
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| 
+0#0000000&|*+0#e000e06&| 
+0#0000000&|t+0#00e0e07&|i|m|e|r|_|s|t|a|r|t|(+0#e000e06&|0+0#e000002&|,+0#0000000&|
 |(+0#0000001#ffff4012|_+0#00e0e07#ffffff0|)+0#0000001#ffff4012| 
+0#0000000#ffffff0|=+0#0000001#ffff4012|>| 
+0#0000000#ffffff0|f|#|a|(+0#e000e06&|f+0#e000002&|a|l|s|e|,+0#0000000&| 
|f+0#e000002&|a|l|s|e|)+0#e000e06&@1| +0#0000000&@16
 >a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@67
 @75
 |~+0#4040ff13&| @73
diff --git a/runtime/syntax/testdir/dumps/vim_ex_execute_01.dump 
b/runtime/syntax/testdir/dumps/vim_ex_execute_01.dump
index 733afebc6..657b6f16a 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_execute_01.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_execute_01.dump
@@ -17,4 +17,4 @@
 |"+0#0000e05&| |i|n|v|a|l|i|d| |e|x|p|r|e|s@1|i|o|n| +0#0000000&@54
 |e+0#af5f00255&|x|e|c|u|t|e| +0#0000000&|"+0#e000002&|F|o@1|"| 
+0#0000000&||+0#af5f00255&@1| +0#0000000&@58
 @75
-@57|1|9|,|0|-|1| @7|3|1|%| 
+@57|1|9|,|0|-|1| @7|3|2|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_execute_02.dump 
b/runtime/syntax/testdir/dumps/vim_ex_execute_02.dump
index 3926f2b2c..7b3370865 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_execute_02.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_execute_02.dump
@@ -17,4 +17,4 @@
 |"+0#0000e05&| |:|e|x|e|c|u|t|e| |w|i|t|h|o|u|t| |{|e|x|p|r|}| +0#0000000&@49
 |e+0#af5f00255&|x|e|c|u|t|e||+0#0000000&| |e+0#af5f00255&|c|h|o| 
+0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@55
 @75
-@57|3|7|,|7| @9|7|5|%| 
+@57|3|7|,|7| @9|7@1|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_execute_03.dump 
b/runtime/syntax/testdir/dumps/vim_ex_execute_03.dump
index 21796e0bf..a34123028 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_execute_03.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_execute_03.dump
@@ -5,9 +5,8 @@
 @75
 >"+0#0000e05&| |I|s@1|u|e| |#|9@1|8|7| |(|p|a|r|e|n|t|h|e|s|i|s|e|d| 
 >|a|r|g|u|m|e|n|t| |-| |n|o|t| |a| |f|u|n|c|t|i|o|n| |c|a|l@1|)| +0#0000000&@14
 @75
-|"+0#0000e05&| +0#0000000&|F+0#0000001#ffff4012|I|X|M|E|:+0#e000e06#ffffff0| 
+0#0000e05&|e|x|e|c|u|t|e| |i|s| |e|x| |c|o|m@1|a|n|d| |n|o|t| |b|u|i|l|t|i|n| 
|f|u|n|c|t|i|o|n| +0#0000000&@23
 |l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| 
+0#0000000&|{+0#e000e06&|'+0#e000002&|a|r|g|'|:+0#0000000&| 
|"+0#e000002&|c|a|l@1| |F|o@1|(|)|"|}+0#e000e06&| +0#0000000&@43
-|e+0#00e0e07&|x|e|c|u|t|e| 
+0#0000000&|(+0#e000e06&|f+0#00e0e07&|o@1|.+0#af5f00255&|a+0#00e0e07&|r|g|)+0#e000e06&|
 +0#0000000&@57
+|e+0#af5f00255&|x|e|c|u|t|e| 
+0#0000000&|(+0#e000e06&|f+0#00e0e07&|o@1|.+0#af5f00255&|a+0#00e0e07&|r|g|)+0#e000e06&|
 +0#0000000&@57
 @75
 |~+0#4040ff13&| @73
 |~| @73
@@ -17,4 +16,5 @@
 |~| @73
 |~| @73
 |~| @73
+|~| @73
 | +0#0000000&@56|5@1|,|1| @9|B|o|t| 
diff --git 
a/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comment_errors_00.dump 
b/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comment_errors_00.dump
index 04f6fd216..9e7ba3282 100644
--- 
a/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comment_errors_00.dump
+++ 
b/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comment_errors_00.dump
@@ -13,7 +13,7 @@
 @2|f+0#af5f00255&|u|n| 
+0#0000000&|s+0#e000e06&|:|D+0#0000000&|o|T|e|s|t|3|(+0#e000e06&|)| 
+0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@8|#+0#ffffff16#ff404010| |f|u|n| 
+0#0000000#ffffff0@37
 @4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|3+0#e000002&| +0#0000000&@62
 @2|e+0#af5f00255&|n|d|f|u|n| +0#0000000&@23|#+0#ffffff16#ff404010| 
|e|n|d|f|u|n| +0#0000000#ffffff0@34
-@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|s|:|D|o|T|e|s|t|3|(+0#e000e06&|)| 
+0#0000000&@54
+@2|r+0#af5f00255&|e|t|u|r|n| 
+0#0000000&|s+0#00e0e07&|:|D+0#0000000&|o|T|e|s|t|3|(+0#e000e06&|)| 
+0#0000000&@54
 |e+0#af5f00255&|n|d|f|u|n| +0#0000000&@25|#+0#ffffff16#ff404010| |e|n|d|f|u|n| 
+0#0000000#ffffff0@34
 @75
 |d+0#af5f00255&|e|f| 
+0#0000000&|s+0#e000e06&|:|T+0#0000000&|e|s|t|4|(+0#e000e06&|)|:+0#0000000&| 
|n+0#00e0003&|u|m|b|e|r| +0#0000000&@10|"+0#ffffff16#ff404010| |d|e|f| 
+0#0000000#ffffff0@37
diff --git 
a/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comment_errors_01.dump 
b/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comment_errors_01.dump
index 3e5b4bd02..08abcfe8d 100644
--- 
a/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comment_errors_01.dump
+++ 
b/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comment_errors_01.dump
@@ -1,6 +1,6 @@
 | +0&#ffffff0@3|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|3+0#e000002&| 
+0#0000000&@62
 @2|e+0#af5f00255&|n|d|f|u|n| +0#0000000&@23|#+0#ffffff16#ff404010| 
|e|n|d|f|u|n| +0#0000000#ffffff0@34
-@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|s|:|D|o|T|e|s|t|3|(+0#e000e06&|)| 
+0#0000000&@54
+@2|r+0#af5f00255&|e|t|u|r|n| 
+0#0000000&|s+0#00e0e07&|:|D+0#0000000&|o|T|e|s|t|3|(+0#e000e06&|)| 
+0#0000000&@54
 |e+0#af5f00255&|n|d|f|u|n| +0#0000000&@25|#+0#ffffff16#ff404010| |e|n|d|f|u|n| 
+0#0000000#ffffff0@34
 @75
 >d+0#af5f00255&|e|f| 
 >+0#0000000&|s+0#e000e06&|:|T+0#0000000&|e|s|t|4|(+0#e000e06&|)|:+0#0000000&| 
 >|n+0#00e0003&|u|m|b|e|r| +0#0000000&@10|"+0#ffffff16#ff404010| |d|e|f| 
 >+0#0000000#ffffff0@37
diff --git 
a/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comment_errors_02.dump 
b/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comment_errors_02.dump
index 0d9de4b14..9c2a4666f 100644
--- 
a/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comment_errors_02.dump
+++ 
b/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comment_errors_02.dump
@@ -3,7 +3,7 @@
 @2|d+0#af5f00255&|e|f| 
+0#0000000&|s+0#e000e06&|:|D+0#0000000&|o|T|e|s|t|6|(+0#e000e06&|)|:+0#0000000&|
 |n+0#00e0003&|u|m|b|e|r| +0#0000000&@6|"+0#ffffff16#ff404010| |d|e|f| 
+0#0000000#ffffff0@37
 @4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|6+0#e000002&| +0#0000000&@62
 @2|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@23|"+0#ffffff16#ff404010| 
|e|n|d@1|e|f| +0#0000000#ffffff0@34
-@2>r+0#af5f00255&|e|t|u|r|n| +0#0000000&|s|:|D|o|T|e|s|t|6|(+0#e000e06&|)| 
+0#0000000&@54
+@2>r+0#af5f00255&|e|t|u|r|n| 
+0#0000000&|s+0#00e0e07&|:|D+0#0000000&|o|T|e|s|t|6|(+0#e000e06&|)| 
+0#0000000&@54
 |e+0#af5f00255&|n|d|f|u|n| +0#0000000&@25|#+0#ffffff16#ff404010| |e|n|d|f|u|n| 
+0#0000000#ffffff0@34
 @75
 |f+0#af5f00255&|o|r| +0#0000000&|d+0#00e0e07&| +0#0000000&|i+0#af5f00255&|n| 
+0#0000000&|r+0#00e0e07&|a|n|g|e|(+0#e000e06&|1+0#e000002&|,+0#0000000&| 
|6+0#e000002&|)+0#e000e06&|-+0#af5f00255&|>|r+0#00e0e07&|e|v|e|r|s|e|(+0#e000e06&|)|
 +0#0000000&@43
diff --git 
a/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comments_00.dump 
b/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comments_00.dump
index f8c0ccc90..8aa59de78 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comments_00.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comments_00.dump
@@ -13,7 +13,7 @@
 @2|f+0#af5f00255&|u|n| 
+0#0000000&|s+0#e000e06&|:|D+0#0000000&|o|T|e|s|t|3|(+0#e000e06&|)| 
+0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@8|"+0#0000e05&| |f|u|n| 
+0#0000000&@37
 @4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|3+0#e000002&| +0#0000000&@62
 @2|e+0#af5f00255&|n|d|f|u|n| +0#0000000&@23|"+0#0000e05&| |e|n|d|f|u|n| 
+0#0000000&@34
-@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|s|:|D|o|T|e|s|t|3|(+0#e000e06&|)| 
+0#0000000&@54
+@2|r+0#af5f00255&|e|t|u|r|n| 
+0#0000000&|s+0#00e0e07&|:|D+0#0000000&|o|T|e|s|t|3|(+0#e000e06&|)| 
+0#0000000&@54
 |e+0#af5f00255&|n|d|f|u|n| +0#0000000&@25|"+0#0000e05&| |e|n|d|f|u|n| 
+0#0000000&@34
 @75
 |d+0#af5f00255&|e|f| 
+0#0000000&|s+0#e000e06&|:|T+0#0000000&|e|s|t|4|(+0#e000e06&|)|:+0#0000000&| 
|n+0#00e0003&|u|m|b|e|r| +0#0000000&@10|#+0#0000e05&| |d|e|f| +0#0000000&@37
diff --git 
a/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comments_01.dump 
b/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comments_01.dump
index 326a2496d..12268cdd5 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comments_01.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comments_01.dump
@@ -1,6 +1,6 @@
 | +0&#ffffff0@3|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|3+0#e000002&| 
+0#0000000&@62
 @2|e+0#af5f00255&|n|d|f|u|n| +0#0000000&@23|"+0#0000e05&| |e|n|d|f|u|n| 
+0#0000000&@34
-@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|s|:|D|o|T|e|s|t|3|(+0#e000e06&|)| 
+0#0000000&@54
+@2|r+0#af5f00255&|e|t|u|r|n| 
+0#0000000&|s+0#00e0e07&|:|D+0#0000000&|o|T|e|s|t|3|(+0#e000e06&|)| 
+0#0000000&@54
 |e+0#af5f00255&|n|d|f|u|n| +0#0000000&@25|"+0#0000e05&| |e|n|d|f|u|n| 
+0#0000000&@34
 @75
 >d+0#af5f00255&|e|f| 
 >+0#0000000&|s+0#e000e06&|:|T+0#0000000&|e|s|t|4|(+0#e000e06&|)|:+0#0000000&| 
 >|n+0#00e0003&|u|m|b|e|r| +0#0000000&@10|#+0#0000e05&| |d|e|f| +0#0000000&@37
diff --git 
a/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comments_02.dump 
b/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comments_02.dump
index 8dcb0b979..c948b6cc7 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comments_02.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_def_tail_comments_02.dump
@@ -3,7 +3,7 @@
 @2|d+0#af5f00255&|e|f| 
+0#0000000&|s+0#e000e06&|:|D+0#0000000&|o|T|e|s|t|6|(+0#e000e06&|)|:+0#0000000&|
 |n+0#00e0003&|u|m|b|e|r| +0#0000000&@6|#+0#0000e05&| |d|e|f| +0#0000000&@37
 @4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|6+0#e000002&| +0#0000000&@62
 @2|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@23|#+0#0000e05&| |e|n|d@1|e|f| 
+0#0000000&@34
-@2>r+0#af5f00255&|e|t|u|r|n| +0#0000000&|s|:|D|o|T|e|s|t|6|(+0#e000e06&|)| 
+0#0000000&@54
+@2>r+0#af5f00255&|e|t|u|r|n| 
+0#0000000&|s+0#00e0e07&|:|D+0#0000000&|o|T|e|s|t|6|(+0#e000e06&|)| 
+0#0000000&@54
 |e+0#af5f00255&|n|d|f|u|n| +0#0000000&@25|"+0#0000e05&| |e|n|d|f|u|n| 
+0#0000000&@34
 @75
 |f+0#af5f00255&|o|r| +0#0000000&|d+0#00e0e07&| +0#0000000&|i+0#af5f00255&|n| 
+0#0000000&|r+0#00e0e07&|a|n|g|e|(+0#e000e06&|1+0#e000002&|,+0#0000000&| 
|6+0#e000002&|)+0#e000e06&|-+0#af5f00255&|>|r+0#00e0e07&|e|v|e|r|s|e|(+0#e000e06&|)|
 +0#0000000&@43
diff --git a/runtime/syntax/testdir/dumps/vim_ex_match_00.dump 
b/runtime/syntax/testdir/dumps/vim_ex_match_00.dump
index c36d37fa4..0885ca7bb 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_match_00.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_match_00.dump
@@ -1,4 +1,5 @@
->"+0#0000e05#ffffff0| |V|i|m| |:|m|a|t|c|h|,| |:|2|m|a|t|c|h| |a|n|d| 
|:|3|m|a|t|c|h| |c|o|m@1|a|n|d|s| +0#0000000&@32
+>"+0#0000e05#ffffff0| |V|i|m| |:|m|a|t|c|h| |c|o|m@1|a|n|d| +0#0000000&@54
+@75
 @75
 |m+0#af5f00255&|a|t|c|h| +0#0000000&|F+0#00e0003&|o@1|G|r|o|u|p| 
+0#0000000&|/+0#e000e06&|F+0#0000000&|o@1|/+0#e000e06&| +0#0000000&@54
 |m+0#af5f00255&|a|t|c|h| +0#0000000&@69
@@ -13,8 +14,7 @@
 |3+0#af5f00255&|m|a|t|c|h| +0#0000000&|n+0#00e0003&|o|n|e| +0#0000000&@63
 @75
 @75
-|"+0#0000e05&| |D|i|f@1|e|r|e|n|t|i|a|t|e| |m|a|p|(|)| |f|r|o|m| |:|m|a|p| 
+0#0000000&@43
+|"+0#0000e05&| |D|i|f@1|e|r|e|n|t|i|a|t|e| |m|a|t|c|h|(|)| |f|r|o|m| 
|:|m|a|t|c|h| +0#0000000&@39
 @75
 |c+0#af5f00255&|a|l@1| 
+0#0000000&|m+0#00e0e07&|a|t|c|h|(+0#e000e06&|h+0#00e0e07&|a|y|s|t|a|c|k|,+0#0000000&|
 |'+0#e000002&|n|e@1|d|l|e|'|)+0#e000e06&| +0#0000000&@44
-|c+0#af5f00255&|a|l@1| +0#0000000&|m+0#00e0e07&|a|t|c|h| 
+0#0000000&|(+0#e000e06&|h+0#00e0e07&|a|y|s|t|a|c|k|,+0#0000000&| 
|'+0#e000002&|n|e@1|d|l|e|'|)+0#e000e06&| +0#0000000&@43
 @57|1|,|1| @10|T|o|p| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_match_01.dump 
b/runtime/syntax/testdir/dumps/vim_ex_match_01.dump
index 69ca065c3..6d2d6f311 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_match_01.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_match_01.dump
@@ -1,9 +1,10 @@
-| +0&#ffffff0@74
+|3+0#af5f00255#ffffff0|m|a|t|c|h| +0#0000000&|n+0#00e0003&|o|n|e| 
+0#0000000&@63
 @75
-|"+0#0000e05&| |D|i|f@1|e|r|e|n|t|i|a|t|e| |m|a|p|(|)| |f|r|o|m| |:|m|a|p| 
+0#0000000&@43
 @75
-|c+0#af5f00255&|a|l@1| 
+0#0000000&|m+0#00e0e07&|a|t|c|h|(+0#e000e06&|h+0#00e0e07&|a|y|s|t|a|c|k|,+0#0000000&|
 |'+0#e000002&|n|e@1|d|l|e|'|)+0#e000e06&| +0#0000000&@44
->c+0#af5f00255&|a|l@1| +0#0000000&|m+0#00e0e07&|a|t|c|h| 
+0#0000000&|(+0#e000e06&|h+0#00e0e07&|a|y|s|t|a|c|k|,+0#0000000&| 
|'+0#e000002&|n|e@1|d|l|e|'|)+0#e000e06&| +0#0000000&@43
+|"+0#0000e05&| |D|i|f@1|e|r|e|n|t|i|a|t|e| |m|a|t|c|h|(|)| |f|r|o|m| 
|:|m|a|t|c|h| +0#0000000&@39
+@75
+>c+0#af5f00255&|a|l@1| 
+0#0000000&|m+0#00e0e07&|a|t|c|h|(+0#e000e06&|h+0#00e0e07&|a|y|s|t|a|c|k|,+0#0000000&|
 |'+0#e000002&|n|e@1|d|l|e|'|)+0#e000e06&| +0#0000000&@44
+|c+0#af5f00255&|a|l@1| +0#0000000&|m+0#00e0e07&|a|t|c|h| 
+0#0000000&|(+0#e000e06&|h+0#00e0e07&|a|y|s|t|a|c|k|,+0#0000000&| 
|'+0#e000002&|n|e@1|d|l|e|'|)+0#e000e06&| +0#0000000&@43
 @75
 |f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@60
 @2|m+0#af5f00255&|a|t|c|h| +0#0000000&|F+0#00e0003&|o@1|G|r|o|u|p| 
+0#0000000&|/+0#e000e06&|F+0#0000000&|o@1|/+0#e000e06&| +0#0000000&@52
@@ -12,9 +13,8 @@
 |e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
 @75
 |d+0#af5f00255&|e|f| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@65
+@2|#+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@63
 @2|m+0#af5f00255&|a|t|c|h| +0#0000000&|F+0#00e0003&|o@1|G|r|o|u|p| 
+0#0000000&|/+0#e000e06&|F+0#0000000&|o@1|/+0#e000e06&| +0#0000000&@52
-@2|m+0#af5f00255&|a|t|c|h|(+0#e000e06&|h+0#00e0e07&|a|y|s|t|a|c|k|,+0#0000000&|
 |'+0#e000002&|n|e@1|d|l|e|'|)+0#e000e06&| +0#0000000&@47
-@2|#+0#0000e05&| +0#0000000&|E+0#e000e06&|r@1|o|r|:| +0#0000e05&|b|a|d| 
|:|m|a|t|c|h| |c|o|m@1|a|n|d| |-| |t|r|a|i|l|i|n|g| |c|h|a|r|a|c|t|e|r|s| 
+0#0000000&@23
-@2|m+0#af5f00255&|a|t|c|h| 
+0#0000000&|(+0#e000e06&|h+0#00e0e07&|a|y|s|t|a|c|k|,+0#0000000&| 
|'+0#e000002&|n|e@1|d|l|e|'|)+0#e000e06&| +0#0000000&@46
-|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68
-@57|1|9|,|1| @9|B|o|t| 
+@2|#+0#0000e05&| |f|u|n|c|t|i|o|n| +0#0000000&@62
+@2|m+0#00e0e07&|a|t|c|h|(+0#e000e06&|h+0#00e0e07&|a|y|s|t|a|c|k|,+0#0000000&| 
|'+0#e000002&|n|e@1|d|l|e|'|)+0#e000e06&| +0#0000000&@47
+@57|1|9|,|1| @9|7|6|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_match_02.dump 
b/runtime/syntax/testdir/dumps/vim_ex_match_02.dump
new file mode 100644
index 000000000..9ba6ee98a
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_match_02.dump
@@ -0,0 +1,20 @@
+| 
+0&#ffffff0@1|m+0#00e0e07&|a|t|c|h|(+0#e000e06&|h+0#00e0e07&|a|y|s|t|a|c|k|,+0#0000000&|
 |'+0#e000002&|n|e@1|d|l|e|'|)+0#e000e06&| +0#0000000&@47
+@2|#+0#0000e05&| +0#0000000&|E+0#e000e06&|r@1|o|r|:| +0#0000e05&|b|a|d| 
|:|m|a|t|c|h| |c|o|m@1|a|n|d| |-| |t|r|a|i|l|i|n|g| |c|h|a|r|a|c|t|e|r|s| 
+0#0000000&@23
+@2|m+0#af5f00255&|a|t|c|h| 
+0#0000000&|(+0#e000e06&|h+0#00e0e07&|a|y|s|t|a|c|k|,+0#0000000&| 
|'+0#e000002&|n|e@1|d|l|e|'|)+0#e000e06&| +0#0000000&@46
+|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68
+> @74
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|3|6|,|0|-|1| @7|B|o|t| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_substitute_11.dump 
b/runtime/syntax/testdir/dumps/vim_ex_substitute_11.dump
index f63455a42..7c6405238 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_substitute_11.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_substitute_11.dump
@@ -10,7 +10,7 @@
 @75
 |d+0#af5f00255&|e|f| +0#0000000&|T|e|s|t|(+0#e000e06&|)| +0#0000000&@64
 @1| +0#00e0e07&|s|t|r|[+0#0000000&|s+0#00e0e07&|]+0#0000000&| @66
-@2|s|t|r|(+0#e000e06&|s+0#00e0e07&|)+0#e000e06&| +0#0000000&@66
+@2|s+0#ffffff16#ff404010|t|r|(+0#e000e06#ffffff0|s+0#00e0e07&|)+0#e000e06&| 
+0#0000000&@66
 |e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68
 @75
 |~+0#4040ff13&| @73
diff --git a/runtime/syntax/testdir/dumps/vim_function_call_00.dump 
b/runtime/syntax/testdir/dumps/vim_function_call_00.dump
new file mode 100644
index 000000000..a0bae076c
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_call_00.dump
@@ -0,0 +1,20 @@
+>"+0#0000e05#ffffff0| |V|i|m| |f|u|n|c|t|i|o|n| |c|a|l@1|s| +0#0000000&@54
+|"+0#0000e05&| |V|I|M|_|S|E|T|U|P| |h|i|g|h|l|i|g|h|t| |l|i|n|k| 
|v|i|m|U|s|e|r|F|u|n|c| |T|o|d|o| +0#0000000&@31
+@75
+@75
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|a+0#00e0e07&|b|s|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@62
+@75
+@75
+|"+0#0000e05&| |c|o|m@1|a|n|d|/|f|u|n|c|t|i|o|n| |d|i|s|t|i|n|c|t|i|o|n| 
+0#0000000&@44
+@75
+|"+0#0000e05&| |a|p@1|e|n|d| |b|r|o|w|s|e| |c|a|l@1| |c|h|d|i|r| 
|c|o|n|f|i|r|m| |c|o|p|y| |d|e|l|e|t|e| |e|v|a|l| |e|x|e|c|u|t|e| |f|i|l|t|e|r| 
|f|u|n|c|t|i|o|n
+|"| |i|n|s|e|r|t| |j|o|i|n| |m|a|p| |m|a|t|c|h| |m|o|d|e| |s|o|r|t| 
|s|p|l|i|t| |s|u|b|s|t|i|t|u|t|e| |s|w|a|p|n|a|m|e| |t|y|p|e| +0#0000000&@10
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|a|p@1|e|n|d| |=+0#af5f00255&| 
+0#0000000&|a+0#00e0e07&|p@1|e|n|d|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@51
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|a+0#00e0e07&|p@1|e|n|d|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@59
+|"+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|a+0#af5f00255&|p@1|e|n|d| +0#0000000&@68
+|.+0#af5f00255&| +0#0000000&@73
+|"+0#0000e05&| |b|a|d| |c|o|m@1|a|n|d| +0#0000000&@61
+|a|p@1|e|n|d|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@64
+@57|1|,|1| @10|T|o|p| 
diff --git a/runtime/syntax/testdir/dumps/vim_function_call_01.dump 
b/runtime/syntax/testdir/dumps/vim_function_call_01.dump
new file mode 100644
index 000000000..05ba8237b
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_call_01.dump
@@ -0,0 +1,20 @@
+|c+0#af5f00255#ffffff0|a|l@1| 
+0#0000000&|a+0#00e0e07&|p@1|e|n|d|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@59
+|"+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|a+0#af5f00255&|p@1|e|n|d| +0#0000000&@68
+|.+0#af5f00255&| +0#0000000&@73
+|"+0#0000e05&| |b|a|d| |c|o|m@1|a|n|d| +0#0000000&@61
+>a|p@1|e|n|d|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@64
+|a|p@1|e|n|d| |(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@63
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|b|r|o|w|s|e| |=+0#af5f00255&| 
+0#0000000&|b+0#00e0e07&|r|o|w|s|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@51
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|b+0#00e0e07&|r|o|w|s|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@59
+|"+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|b+0#af5f00255&|r|o|w|s|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@64
+|b+0#af5f00255&|r|o|w|s|e| 
+0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@63
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|c|a|l@1| |=+0#af5f00255&| 
+0#0000000&|c+0#00e0e07&|a|l@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|c+0#00e0e07&|a|l@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@61
+|"+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|c+0#af5f00255&|a|l@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@66
+|c+0#af5f00255&|a|l@1| +0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@65
+@57|1|9|,|1| @10|5|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_function_call_02.dump 
b/runtime/syntax/testdir/dumps/vim_function_call_02.dump
new file mode 100644
index 000000000..3d92656c5
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_call_02.dump
@@ -0,0 +1,20 @@
+|c+0#af5f00255#ffffff0|a|l@1| 
+0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@65
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|c|h|d|i|r| |=+0#af5f00255&| 
+0#0000000&|c+0#00e0e07&|h|d|i|r|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@53
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|c+0#00e0e07&|h|d|i|r|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@60
+|"+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+>c+0#af5f00255&|h|d|i|r|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@65
+|c+0#af5f00255&|h|d|i|r| +0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@64
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|c|o|n|f|i|r|m| |=+0#af5f00255&| 
+0#0000000&|c+0#00e0e07&|o|n|f|i|r|m|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@49
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|c+0#00e0e07&|o|n|f|i|r|m|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@58
+|"+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|c+0#af5f00255&|o|n|f|i|r|m|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@63
+|c+0#af5f00255&|o|n|f|i|r|m| 
+0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@62
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|c|o|p|y| |=+0#af5f00255&| 
+0#0000000&|c+0#00e0e07&|o|p|y|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|c+0#00e0e07&|o|p|y|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@61
+|"+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|c+0#af5f00255&|o|p|y|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@66
+|c+0#af5f00255&|o|p|y| +0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@65
+@57|3|7|,|1| @9|1|2|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_function_call_03.dump 
b/runtime/syntax/testdir/dumps/vim_function_call_03.dump
new file mode 100644
index 000000000..3f30fb407
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_call_03.dump
@@ -0,0 +1,20 @@
+|c+0#af5f00255#ffffff0|o|p|y| 
+0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@65
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|d|e|l|e|t|e| |=+0#af5f00255&| 
+0#0000000&|d+0#00e0e07&|e|l|e|t|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@51
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|d+0#00e0e07&|e|l|e|t|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@59
+|"+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+>d+0#af5f00255&|e|l|e|t|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@64
+|d+0#af5f00255&|e|l|e|t|e| 
+0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@63
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|e|v|a|l| |=+0#af5f00255&| 
+0#0000000&|e+0#00e0e07&|v|a|l|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|e+0#00e0e07&|v|a|l|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@61
+|"+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|e+0#af5f00255&|v|a|l|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@66
+|e+0#af5f00255&|v|a|l| +0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@65
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|e|x|e|c|u|t|e| |=+0#af5f00255&| 
+0#0000000&|e+0#00e0e07&|x|e|c|u|t|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@49
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|e+0#00e0e07&|x|e|c|u|t|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@58
+|"+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|e+0#af5f00255&|x|e|c|u|t|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@63
+|e+0#af5f00255&|x|e|c|u|t|e| 
+0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@62
+@57|5@1|,|1| @9|1|9|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_function_call_04.dump 
b/runtime/syntax/testdir/dumps/vim_function_call_04.dump
new file mode 100644
index 000000000..e2442e8dc
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_call_04.dump
@@ -0,0 +1,20 @@
+|e+0#af5f00255#ffffff0|x|e|c|u|t|e| 
+0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@62
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|f|i|l|t|e|r| |=+0#af5f00255&| 
+0#0000000&|f+0#00e0e07&|i|l|t|e|r|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@51
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|f+0#00e0e07&|i|l|t|e|r|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@59
+|"+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+>f+0#af5f00255&|i|l|t|e|r|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@64
+|f+0#af5f00255&|i|l|t|e|r| 
+0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@63
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|f|u|n|c|t|i|o|n| |=+0#af5f00255&| 
+0#0000000&|f+0#00e0e07&|u|n|c|t|i|o|n|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@47
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|f+0#00e0e07&|u|n|c|t|i|o|n|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@57
+|"+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|f+0#af5f00255&|u|n|c|t|i|o|n|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@62
+|f+0#af5f00255&|u|n|c|t|i|o|n| 
+0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@61
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|i|n|s|e|r|t| |=+0#af5f00255&| 
+0#0000000&|i+0#00e0e07&|n|s|e|r|t|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@51
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|i+0#00e0e07&|n|s|e|r|t|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@59
+|"+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|i+0#af5f00255&|n|s|e|r|t| +0#0000000&@68
+|.+0#af5f00255&| +0#0000000&@73
+@57|7|3|,|1| @9|2|7|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_function_call_05.dump 
b/runtime/syntax/testdir/dumps/vim_function_call_05.dump
new file mode 100644
index 000000000..af7ffb025
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_call_05.dump
@@ -0,0 +1,20 @@
+|.+0#af5f00255#ffffff0| +0#0000000&@73
+|"+0#0000e05&| |b|a|d| |c|o|m@1|a|n|d| +0#0000000&@61
+|i|n|s|e|r|t|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@64
+|i|n|s|e|r|t| |(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@63
+@75
+>l+0#af5f00255&|e|t| +0#0000000&|j|o|i|n| |=+0#af5f00255&| 
+0#0000000&|j+0#00e0e07&|o|i|n|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|j+0#00e0e07&|o|i|n|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@61
+|"+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|j+0#af5f00255&|o|i|n|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@66
+|j+0#af5f00255&|o|i|n| +0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@65
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|m|a|p| |=+0#af5f00255&| 
+0#0000000&|m+0#00e0e07&|a|p|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@57
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|m+0#00e0e07&|a|p|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@62
+|"+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|m+0#af5f00255&|a|p|(+0#0000000&|4|2|)| @67
+|m+0#af5f00255&|a|p| +0#0000000&|(|4|2|)| @66
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|m|a|t|c|h| |=+0#af5f00255&| 
+0#0000000&|m+0#00e0e07&|a|t|c|h|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@53
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|m+0#00e0e07&|a|t|c|h|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@60
+@57|9|1|,|1| @9|3|4|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_function_call_06.dump 
b/runtime/syntax/testdir/dumps/vim_function_call_06.dump
new file mode 100644
index 000000000..a28560b8d
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_call_06.dump
@@ -0,0 +1,20 @@
+|c+0#af5f00255#ffffff0|a|l@1| 
+0#0000000&|m+0#00e0e07&|a|t|c|h|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@60
+|"+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|m+0#af5f00255&|a|t|c|h|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@65
+|m+0#af5f00255&|a|t|c|h| +0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@64
+@75
+>l+0#af5f00255&|e|t| +0#0000000&|s|o|r|t| |=+0#af5f00255&| 
+0#0000000&|s+0#00e0e07&|o|r|t|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|s+0#00e0e07&|o|r|t|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@61
+|"+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|s+0#af5f00255&|o|r|t|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@66
+|s+0#af5f00255&|o|r|t| +0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@65
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|s|p|l|i|t| |=+0#af5f00255&| 
+0#0000000&|s+0#00e0e07&|p|l|i|t|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@53
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|s+0#00e0e07&|p|l|i|t|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@60
+|"+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|s+0#af5f00255&|p|l|i|t|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@65
+|s+0#af5f00255&|p|l|i|t| +0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@64
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|s|u|b|s|t|i|t|u|t|e| |=+0#af5f00255&| 
+0#0000000&|s+0#00e0e07&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@43
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|s+0#00e0e07&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@55
+@57|1|0|9|,|1| @8|4|1|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_function_call_07.dump 
b/runtime/syntax/testdir/dumps/vim_function_call_07.dump
new file mode 100644
index 000000000..cf67e25f6
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_call_07.dump
@@ -0,0 +1,20 @@
+|c+0#af5f00255#ffffff0|a|l@1| 
+0#0000000&|s+0#00e0e07&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@55
+|"+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|s+0#af5f00255&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@60
+|s+0#af5f00255&|u|b|s|t|i|t|u|t|e| 
+0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@59
+@75
+>l+0#af5f00255&|e|t| +0#0000000&|s|w|a|p|n|a|m|e| |=+0#af5f00255&| 
+0#0000000&|s+0#00e0e07&|w|a|p|n|a|m|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@47
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|s+0#00e0e07&|w|a|p|n|a|m|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@57
+|"+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|s+0#af5f00255&|w|a|p|n|a|m|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@62
+|s+0#af5f00255&|w|a|p|n|a|m|e| 
+0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@61
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|t|y|p|e| |=+0#af5f00255&| 
+0#0000000&|t+0#00e0e07&|y|p|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|t+0#00e0e07&|y|p|e|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@61
+|"+0#0000e05&| |V|i|m|9| |c|o|m@1|a|n|d| +0#0000000&@60
+|"+0#0000e05&| |t|y|p|e|(|4|2|)| +0#0000000&@64
+|"+0#0000e05&| |t|y|p|e| |(|4|2|)| +0#0000000&@63
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|u|n|i|q| |=+0#af5f00255&| 
+0#0000000&|u+0#00e0e07&|n|i|q|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|u+0#00e0e07&|n|i|q|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@61
+@57|1|2|7|,|1| @8|4|9|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_function_call_08.dump 
b/runtime/syntax/testdir/dumps/vim_function_call_08.dump
new file mode 100644
index 000000000..f671ae5d8
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_call_08.dump
@@ -0,0 +1,20 @@
+|c+0#af5f00255#ffffff0|a|l@1| 
+0#0000000&|u+0#00e0e07&|n|i|q|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@61
+|"+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|u+0#af5f00255&|n|i|q|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@66
+|u+0#af5f00255&|n|i|q| +0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@65
+@75
+> @74
+|"+0#0000e05&| |e|r@1|o|r|s| +0#0000000&@66
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|f+0#ffffff16#ff404010|o@1|(+0#e000e06#ffffff0|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@57
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|f+0#ffffff16#ff404010|o@1|(+0#e000e06#ffffff0|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@62
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|i|f| |=+0#af5f00255&| 
+0#0000000&|i+0#ffffff16#ff404010|f|(+0#e000e06#ffffff0|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@59
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|i+0#ffffff16#ff404010|f|(+0#e000e06#ffffff0|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@63
+|"+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|i+0#af5f00255&|f|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&||| 
|.+0#af5f00255&@1| +0#0000000&||| |e+0#af5f00255&|n|d|i|f| +0#0000000&@55
+|i+0#af5f00255&|f| +0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&||| |.+0#af5f00255&@1| +0#0000000&||| |e+0#af5f00255&|n|d|i|f| 
+0#0000000&@54
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|e|c|h|o| |=+0#af5f00255&| 
+0#0000000&|e+0#ffffff16#ff404010|c|h|o|(+0#e000e06#ffffff0|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|e+0#ffffff16#ff404010|c|h|o|(+0#e000e06#ffffff0|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@61
+@57|1|4|5|,|0|-|1| @6|5|6|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_function_call_09.dump 
b/runtime/syntax/testdir/dumps/vim_function_call_09.dump
new file mode 100644
index 000000000..239b5fc72
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_call_09.dump
@@ -0,0 +1,20 @@
+|c+0#af5f00255#ffffff0|a|l@1| 
+0#0000000&|e+0#ffffff16#ff404010|c|h|o|(+0#e000e06#ffffff0|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@61
+|"+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65
+|e+0#af5f00255&|c|h|o|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@66
+|e+0#af5f00255&|c|h|o| +0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@65
+@75
+> @74
+|"+0#0000e05&| |e|x|p|r|e|s@1|i|o|n|s| +0#0000000&@61
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|a+0#00e0e07&|b|s|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@57
+@75
+|e+0#af5f00255&|c|h|o| 
+0#0000000&|a+0#00e0e07&|b|s|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@62
+|e+0#af5f00255&|c|h|o| 
+0#0000000&|(+0#e000e06&|a+0#00e0e07&|b|s|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&@1|
 +0#0000000&@60
+|e+0#af5f00255&|c|h|o| 
+0#0000000&|a+0#00e0e07&|b|s|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&|++0#af5f00255&| +0#0000000&|f|o@1| @56
+|e+0#af5f00255&|c|h|o| +0#0000000&|f|o@1| |++0#af5f00255&| 
+0#0000000&|a+0#00e0e07&|b|s|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@56
+@75
+|e+0#af5f00255&|c|h|o| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@64
+|e+0#af5f00255&|c|h|o| 
+0#0000000&|(+0#e000e06&|F+0#0000000&|o@1|(+0#e000e06&|)@1| +0#0000000&@62
+|e+0#af5f00255&|c|h|o| +0#0000000&|F|o@1|(+0#e000e06&|)| 
+0#0000000&|++0#af5f00255&| +0#0000000&|b|a|r| @58
+|e+0#af5f00255&|c|h|o| +0#0000000&|b|a|r| |++0#af5f00255&| 
+0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58
+@57|1|6|3|,|0|-|1| @6|6|3|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_function_call_10.dump 
b/runtime/syntax/testdir/dumps/vim_function_call_10.dump
new file mode 100644
index 000000000..9929799b0
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_call_10.dump
@@ -0,0 +1,20 @@
+|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|b|a|r| |++0#af5f00255&| 
+0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58
+@75
+@75
+|"+0#0000e05&| |s|c|o|p|e| |m|o|d|i|f|i|e|r|s| |a|n|d| |q|u|a|l|i|f|i|e|d| 
|n|a|m|e|s| +0#0000000&@37
+@75
+>l+0#af5f00255&|e|t| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|s+0#00e0e07&|:|f+0#0000000&|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|s+0#00e0e07&|:|f+0#0000000&|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@60
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|g+0#00e0e07&|:|f+0#0000000&|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|g+0#00e0e07&|:|f+0#0000000&|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@60
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|b+0#00e0e07&|:|f+0#0000000&|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|b+0#00e0e07&|:|f+0#0000000&|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@60
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|w+0#00e0e07&|:|f+0#0000000&|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|w+0#00e0e07&|:|f+0#0000000&|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@60
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|t+0#00e0e07&|:|f+0#0000000&|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|t+0#00e0e07&|:|f+0#0000000&|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@60
+@57|1|8|1|,|1| @8|7|1|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_function_call_11.dump 
b/runtime/syntax/testdir/dumps/vim_function_call_11.dump
new file mode 100644
index 000000000..7215a0180
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_call_11.dump
@@ -0,0 +1,20 @@
+|c+0#af5f00255#ffffff0|a|l@1| 
+0#0000000&|t+0#00e0e07&|:|f+0#0000000&|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@60
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|l+0#00e0e07&|:|f+0#0000000&|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|l+0#00e0e07&|:|f+0#0000000&|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@60
+@75
+>l+0#af5f00255&|e|t| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|a+0#00e0e07&|:|f+0#0000000&|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|a+0#00e0e07&|:|f+0#0000000&|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@60
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|v+0#00e0e07&|:|f+0#0000000&|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|v+0#00e0e07&|:|f+0#0000000&|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@60
+@75
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|m|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@50
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|m|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@55
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|s+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@48
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|m|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@55
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|g+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@48
+@57|1|9@1|,|1| @8|7|8|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_function_call_12.dump 
b/runtime/syntax/testdir/dumps/vim_function_call_12.dump
new file mode 100644
index 000000000..891bc7689
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_call_12.dump
@@ -0,0 +1,20 @@
+|l+0#af5f00255#ffffff0|e|t| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|g+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@48
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|g+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@53
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|b+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@48
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|b+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@53
+> @74
+|l+0#af5f00255&|e|t| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|w+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@48
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|w+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@53
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|t+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@48
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|t+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@53
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|l+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@48
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|l+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@53
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|a+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@48
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|a+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@53
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|v+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@48
+@57|2|1|7|,|0|-|1| @6|8|5|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_function_call_13.dump 
b/runtime/syntax/testdir/dumps/vim_function_call_13.dump
new file mode 100644
index 000000000..443664453
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_call_13.dump
@@ -0,0 +1,20 @@
+|l+0#af5f00255#ffffff0|e|t| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|v+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@48
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|v+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|.|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@53
+@75
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|m|o|d|u|l|e|#|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@50
+>c+0#af5f00255&|a|l@1| 
+0#0000000&|m|o|d|u|l|e|#|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| 
+0#0000000&@55
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|f|o@1| |=+0#af5f00255&| 
+0#0000000&|g+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|#|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@48
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|g+0#00e0e07&|:|m+0#0000000&|o|d|u|l|e|#|f|o@1|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&|
 +0#0000000&@53
+@75
+@75
+|"+0#0000e05&| |n|o|t| |b|u|i|l|t|i|n| |f|u|n|c|t|i|o|n|s| +0#0000000&@51
+@75
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|s+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)| 
+0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|g+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)| 
+0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|b+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)| 
+0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|w+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)| 
+0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|t+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)| 
+0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|l+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)| 
+0#0000000&@55
+@57|2|3|5|,|1| @8|9|3|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_function_call_14.dump 
b/runtime/syntax/testdir/dumps/vim_function_call_14.dump
new file mode 100644
index 000000000..376b2ac5b
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_call_14.dump
@@ -0,0 +1,20 @@
+|c+0#af5f00255#ffffff0|a|l@1| 
+0#0000000&|l+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)| 
+0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|a+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)| 
+0#0000000&@55
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|v+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)| 
+0#0000000&@55
+@75
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|<+0#e000e06&|S|I|D|>|s+0#0000000&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)| 
+0#0000000&@52
+> @74
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|s+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|.|s|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)|
 +0#0000000&@44
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|g+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|.|s|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)|
 +0#0000000&@44
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|b+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|.|s|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)|
 +0#0000000&@44
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|w+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|.|s|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)|
 +0#0000000&@44
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|t+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|.|s|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)|
 +0#0000000&@44
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|l+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|.|s|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)|
 +0#0000000&@44
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|a+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|.|s|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)|
 +0#0000000&@44
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|v+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|.|s|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)|
 +0#0000000&@44
+@75
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|s|u|b|s|t|i|t|u|t|e|#|s|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)| 
+0#0000000&@46
+|c+0#af5f00255&|a|l@1| 
+0#0000000&|g+0#00e0e07&|:|s+0#0000000&|u|b|s|t|i|t|u|t|e|#|s|u|b|s|t|i|t|u|t|e|(+0#e000e06&|)|
 +0#0000000&@44
+@75
+|~+0#4040ff13&| @73
+| +0#0000000&@56|2|5|3|,|0|-|1| @6|B|o|t| 
diff --git a/runtime/syntax/testdir/dumps/vim_new_00.dump 
b/runtime/syntax/testdir/dumps/vim_new_00.dump
index 3c40ce443..db3b48aac 100644
--- a/runtime/syntax/testdir/dumps/vim_new_00.dump
+++ b/runtime/syntax/testdir/dumps/vim_new_00.dump
@@ -10,9 +10,9 @@
 @8|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@60
 |e+0#af5f00255&|n|d|c|l|a|s@1| +0#0000000&@66
 @75
-|T|e|s|t|.+0#af5f00255&|n+0#00e0e07&|e|w|(+0#e000e06&|)| +0#0000000&@64
-|T|e|s|t|.+0#af5f00255&|n+0#00e0e07&|e|w|O|t|h|e|r|(+0#e000e06&|)| 
+0#0000000&@59
-|T|e|s|t|.+0#af5f00255&|n+0#00e0e07&|e|w|y|e|t|a|n|o|t|h|e|r|(+0#e000e06&|)| 
+0#0000000&@54
+|T|e|s|t|.|n+0#00e0e07&|e|w|(+0#e000e06&|)| +0#0000000&@64
+|T|e|s|t|.|n+0#00e0e07&|e|w|O|t|h|e|r|(+0#e000e06&|)| +0#0000000&@59
+|T|e|s|t|.|n+0#00e0e07&|e|w|y|e|t|a|n|o|t|h|e|r|(+0#e000e06&|)| +0#0000000&@54
 |n+0#af5f00255&|e|w| +0#0000000&@71
 |q+0#af5f00255&|u|i|t| +0#0000000&@70
 |~+0#4040ff13&| @73
diff --git a/runtime/syntax/testdir/input/vim9_function_call.vim 
b/runtime/syntax/testdir/input/vim9_function_call.vim
new file mode 100644
index 000000000..9de6f398a
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim9_function_call.vim
@@ -0,0 +1,295 @@
+vim9script
+# Vim function calls
+# VIM_SETUP highlight link vimUserFunc Todo
+# VIM_SETUP highlight link vim9UserFunc Todo
+
+
+call abs(42)
+abs(42)
+
+
+# command/function distinction
+
+# append browse call chdir confirm copy delete eval execute filter function
+# insert join map match mode sort split substitute swapname type
+
+var append = append(42)
+call append(42)
+# function
+append(42)
+# Legacy command
+# append (42)
+
+var browse = browse(42)
+call browse(42)
+# function
+browse(42)
+# command
+browse (42)
+
+var call = call(42)
+call call(42)
+# function
+call(42)
+# command
+call (42)
+
+var chdir = chdir(42)
+call chdir(42)
+# function
+chdir(42)
+# command
+chdir (42)
+
+var confirm = confirm(42)
+call confirm(42)
+# function
+confirm(42)
+# command
+confirm (42)
+
+var copy = copy(42)
+call copy(42)
+# function
+copy(42)
+# command
+copy (42)
+
+var delete = delete(42)
+call delete(42)
+# function
+delete(42)
+# command
+delete (42)
+
+var eval = eval(42)
+call eval(42)
+# function
+eval(42)
+# command
+eval (42)
+
+var execute = execute(42)
+call execute(42)
+# function
+execute(42)
+# command
+execute (42)
+
+var filter = filter(42)
+call filter(42)
+# function
+filter(42)
+# command
+filter (42)
+
+var function = function(42)
+call function(42)
+# function
+function(42)
+# command
+function (42)
+
+var insert = insert(42)
+call insert(42)
+# function
+insert(42)
+# Legacy command
+# insert (42)
+
+var join = join(42)
+call join(42)
+# function
+join(42)
+# command
+join (42)
+
+var map = map(42)
+call map(42)
+# function
+map(42)
+# command
+map (42)
+
+var match = match(42)
+call match(42)
+# function
+match(42)
+# command
+match (42)
+
+var sort = sort(42)
+call sort(42)
+# function
+sort(42)
+# command
+sort (42)
+
+var split = split(42)
+call split(42)
+# function
+split(42)
+# command
+split (42)
+
+var substitute = substitute(42)
+call substitute(42)
+# function
+substitute(42)
+# command
+substitute (42)
+
+var swapname = swapname(42)
+call swapname(42)
+# function
+swapname(42)
+# command
+swapname (42)
+
+var type = type(42)
+call type(42)
+# function
+type(42)
+# command
+type (42)
+
+var uniq = uniq(42)
+call uniq(42)
+# function
+uniq(42)
+# command
+uniq (42)
+
+
+# errors
+
+var foo = foo(42)
+call foo(42)
+foo(42)
+
+var if = if(42)
+call if(42)
+# function
+if(42) | .. | endif
+# command
+if (42) | .. | endif
+
+var echo = echo(42)
+call echo(42)
+# function
+echo(42)
+# command
+echo (42)
+
+
+# expressions
+
+var foo = abs(42)
+
+abs(42)
+call abs(42)
+echo "Foo" | abs(42)
+
+echo abs(42)
+echo (abs(42))
+echo abs(42) + foo
+echo foo + abs(42)
+
+Foo()
+call Foo()
+echo "Foo" | Foo()
+
+echo Foo()
+echo (Foo())
+echo Foo() + bar
+echo bar + Foo()
+
+
+# scope modifiers and qualified names
+
+var foo = g:foo(42)
+call g:foo(42)
+
+var foo = b:foo(42)
+call b:foo(42)
+
+var foo = w:foo(42)
+call w:foo(42)
+
+var foo = t:foo(42)
+call t:foo(42)
+
+var foo = v:foo(42)
+call v:foo(42)
+
+
+var foo = module.foo(42)
+call module.foo(42)
+module.foo(42)
+
+var foo = g:module.foo(42)
+call g:module.foo(42)
+g:module.foo(42)
+
+var foo = b:module.foo(42)
+call b:module.foo(42)
+b:module.foo(42)
+
+var foo = w:module.foo(42)
+call w:module.foo(42)
+w:module.foo(42)
+
+var foo = t:module.foo(42)
+call t:module.foo(42)
+t:module.foo(42)
+
+var foo = v:module.foo(42)
+call v:module.foo(42)
+v:module.foo(42)
+
+
+var foo = module#foo(42)
+call module#foo(42)
+module#foo(42)
+
+var foo = g:module#foo(42)
+call g:module#foo(42)
+g:module#foo(42)
+
+
+# not builtin functions
+
+call g:substitute()
+call b:substitute()
+call w:substitute()
+call t:substitute()
+call v:substitute()
+
+call <SID>substitute()
+
+call g:substitute.substitute()
+call b:substitute.substitute()
+call w:substitute.substitute()
+call t:substitute.substitute()
+call v:substitute.substitute()
+
+call substitute#substitute()
+call g:substitute#substitute()
+
+g:substitute()
+b:substitute()
+w:substitute()
+t:substitute()
+v:substitute()
+
+<SID>substitute()
+
+g:substitute.substitute()
+b:substitute.substitute()
+w:substitute.substitute()
+t:substitute.substitute()
+v:substitute.substitute()
+
+substitute#substitute()
+g:substitute#substitute()
+
diff --git a/runtime/syntax/testdir/input/vim_ex_execute.vim 
b/runtime/syntax/testdir/input/vim_ex_execute.vim
index f36f8a7d8..0346781bf 100644
--- a/runtime/syntax/testdir/input/vim_ex_execute.vim
+++ b/runtime/syntax/testdir/input/vim_ex_execute.vim
@@ -54,7 +54,6 @@ execute "Foo" | " comment
 
 " Issue #9987 (parenthesised argument - not a function call)
 
-" FIXME: execute is ex command not builtin function
 let foo = {'arg': "call Foo()"}
 execute (foo.arg)
 
diff --git a/runtime/syntax/testdir/input/vim_ex_match.vim 
b/runtime/syntax/testdir/input/vim_ex_match.vim
index 8d1462820..ef329ca19 100644
--- a/runtime/syntax/testdir/input/vim_ex_match.vim
+++ b/runtime/syntax/testdir/input/vim_ex_match.vim
@@ -1,4 +1,5 @@
-" Vim :match, :2match and :3match commands
+" Vim :match command
+
 
 match FooGroup /Foo/
 match
@@ -13,7 +14,7 @@ match none
 3match none
 
 
-" Differentiate map() from :map
+" Differentiate match() from :match
 
 call match(haystack, 'needle')
 call match (haystack, 'needle')
@@ -25,8 +26,11 @@ function Foo()
 endfunction
 
 def Foo()
+  # command
   match FooGroup /Foo/
+  # function
   match(haystack, 'needle')
   # Error: bad :match command - trailing characters
   match (haystack, 'needle')
 enddef
+
diff --git a/runtime/syntax/testdir/input/vim_function_call.vim 
b/runtime/syntax/testdir/input/vim_function_call.vim
new file mode 100644
index 000000000..b94a898b7
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim_function_call.vim
@@ -0,0 +1,265 @@
+" Vim function calls
+" VIM_SETUP highlight link vimUserFunc Todo
+
+
+call abs(42)
+
+
+" command/function distinction
+
+" append browse call chdir confirm copy delete eval execute filter function
+" insert join map match mode sort split substitute swapname type
+
+let append = append(42)
+call append(42)
+" command
+append
+.
+" bad command
+append(42)
+append (42)
+
+let browse = browse(42)
+call browse(42)
+" command
+browse(42)
+browse (42)
+
+let call = call(42)
+call call(42)
+" command
+call(42)
+call (42)
+
+let chdir = chdir(42)
+call chdir(42)
+" command
+chdir(42)
+chdir (42)
+
+let confirm = confirm(42)
+call confirm(42)
+" command
+confirm(42)
+confirm (42)
+
+let copy = copy(42)
+call copy(42)
+" command
+copy(42)
+copy (42)
+
+let delete = delete(42)
+call delete(42)
+" command
+delete(42)
+delete (42)
+
+let eval = eval(42)
+call eval(42)
+" command
+eval(42)
+eval (42)
+
+let execute = execute(42)
+call execute(42)
+" command
+execute(42)
+execute (42)
+
+let filter = filter(42)
+call filter(42)
+" command
+filter(42)
+filter (42)
+
+let function = function(42)
+call function(42)
+" command
+function(42)
+function (42)
+
+let insert = insert(42)
+call insert(42)
+" command
+insert
+.
+" bad command
+insert(42)
+insert (42)
+
+let join = join(42)
+call join(42)
+" command
+join(42)
+join (42)
+
+let map = map(42)
+call map(42)
+" command
+map(42)
+map (42)
+
+let match = match(42)
+call match(42)
+" command
+match(42)
+match (42)
+
+let sort = sort(42)
+call sort(42)
+" command
+sort(42)
+sort (42)
+
+let split = split(42)
+call split(42)
+" command
+split(42)
+split (42)
+
+let substitute = substitute(42)
+call substitute(42)
+" command
+substitute(42)
+substitute (42)
+
+let swapname = swapname(42)
+call swapname(42)
+" command
+swapname(42)
+swapname (42)
+
+let type = type(42)
+call type(42)
+" Vim9 command
+" type(42)
+" type (42)
+
+let uniq = uniq(42)
+call uniq(42)
+" command
+uniq(42)
+uniq (42)
+
+
+" errors
+
+let foo = foo(42)
+call foo(42)
+
+let if = if(42)
+call if(42)
+" command
+if(42) | .. | endif
+if (42) | .. | endif
+
+let echo = echo(42)
+call echo(42)
+" command
+echo(42)
+echo (42)
+
+
+" expressions
+
+let foo = abs(42)
+
+echo abs(42)
+echo (abs(42))
+echo abs(42) + foo
+echo foo + abs(42)
+
+echo Foo()
+echo (Foo())
+echo Foo() + bar
+echo bar + Foo()
+
+
+" scope modifiers and qualified names
+
+let foo = s:foo(42)
+call s:foo(42)
+
+let foo = g:foo(42)
+call g:foo(42)
+
+let foo = b:foo(42)
+call b:foo(42)
+
+let foo = w:foo(42)
+call w:foo(42)
+
+let foo = t:foo(42)
+call t:foo(42)
+
+let foo = l:foo(42)
+call l:foo(42)
+
+let foo = a:foo(42)
+call a:foo(42)
+
+let foo = v:foo(42)
+call v:foo(42)
+
+
+let foo = module.foo(42)
+call module.foo(42)
+
+let foo = s:module.foo(42)
+call module.foo(42)
+
+let foo = g:module.foo(42)
+call g:module.foo(42)
+
+let foo = b:module.foo(42)
+call b:module.foo(42)
+
+let foo = w:module.foo(42)
+call w:module.foo(42)
+
+let foo = t:module.foo(42)
+call t:module.foo(42)
+
+let foo = l:module.foo(42)
+call l:module.foo(42)
+
+let foo = a:module.foo(42)
+call a:module.foo(42)
+
+let foo = v:module.foo(42)
+call v:module.foo(42)
+
+
+let foo = module#foo(42)
+call module#foo(42)
+
+let foo = g:module#foo(42)
+call g:module#foo(42)
+
+
+" not builtin functions
+
+call s:substitute()
+call g:substitute()
+call b:substitute()
+call w:substitute()
+call t:substitute()
+call l:substitute()
+call a:substitute()
+call v:substitute()
+
+call <SID>substitute()
+
+call s:substitute.substitute()
+call g:substitute.substitute()
+call b:substitute.substitute()
+call w:substitute.substitute()
+call t:substitute.substitute()
+call l:substitute.substitute()
+call a:substitute.substitute()
+call v:substitute.substitute()
+
+call substitute#substitute()
+call g:substitute#substitute()
+
diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim
index ee107b1b5..3ec72d1ae 100644
--- a/runtime/syntax/vim.vim
+++ b/runtime/syntax/vim.vim
@@ -286,7 +286,7 @@ syn case match
 " All vimCommands are contained by vimIsCommand. {{{2
 syn cluster vimCmdList 
contains=vimAbb,vimAddress,vimAutocmd,vimAugroup,vimBehave,vimCall,vimCatch,vimCommandModifier,vimConst,vimDoautocmd,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,vimDelFunction,@vimEcho,vimElse,vimEnddef,vimEndfunction,vimEndif,vimExecute,vimIsCommand,vimExtCmd,vimExFilter,vimExMark,vimFiletype,vimFor,vimFunction,vimFunctionFold,vimGrep,vimGrepAdd,vimGlobal,vimHelpgrep,vimHighlight,vimImport,vimLet,vimLoadkeymap,vimLockvar,vimMake,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimProfdel,vimProfile,vimRedir,vimSet,vimSleep,vimSort,vimSyntax,vimSynColor,vimSynLink,vimThrow,vimUniq,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimVimgrep,vimVimgrepadd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList,vimLua,vimMzScheme,vimPerl,vimPython,vimPython3,vimPythonX,vimRuby,vimTcl
 syn cluster vim9CmdList        
contains=vim9Abstract,vim9Class,vim9Const,vim9Enum,vim9Export,vim9Final,vim9For,vim9Interface,vim9Type,vim9Var
-syn match vimCmdSep    "\\@1<!|"       skipwhite 
nextgroup=@vimCmdList,vimSubst1,vimFunc
+syn match vimCmdSep    "\\@1<!|"       skipwhite 
nextgroup=@vimCmdList,vimSubst1,@vimFunc
 syn match vimCmdSep    ":\+"   skipwhite nextgroup=@vimCmdList,vimSubst1
 syn match vimCount     contained       "\d\+"
 syn match vimIsCommand "\<\%(\h\w*\|[23]mat\%[ch]\)\>"  nextgroup=vimBang 
contains=vimCommand
@@ -322,7 +322,7 @@ Vim9 syn match vim9LhsVariableList  
"\[\_[^]]\+]\ze\s\+\.\.="                       contains=vimVar,@
 
 Vim9 syn match vim9LhsRegister "@["0-9\-a-zA-Z#=*+_/]\ze\s\+\%(\.\.\)\=="
 
-syn cluster vimExprList        
contains=@vimSpecialVar,vimFunc,vimNumber,vimOper,vimOperParen,vimLambda,vimString,vimVar,@vim9ExprList
+syn cluster vimExprList        
contains=@vimSpecialVar,@vimFunc,vimNumber,vimOper,vimOperParen,vimLambda,vimString,vimVar,@vim9ExprList
 syn cluster vim9ExprList       contains=vim9Boolean,vim9LambdaParams,vim9Null
 
 " Insertions And Appends: insert append {{{2
@@ -345,7 +345,7 @@ syn keyword vimBehaveModel  contained       mswin   xterm
 
 " Call {{{2
 " ====
-syn match vimCall      "\<call\=\>"    skipwhite nextgroup=vimFunc
+syn match vimCall      "\<call\=\>"    skipwhite nextgroup=@vimFunc
 
 " Debuggreedy {{{2
 " ===========
@@ -415,7 +415,7 @@ syn match   vimImport               "\<imp\%[ort]\>"        
        skipwhite nextgroup=vimImportAutoload,vim
 
 " Augroup : vimAugroupError removed because long augroups caused sync'ing 
problems. {{{2
 " ======= : Trade-off: Increasing synclines with slower editing vs augroup END 
error checking.
-syn cluster vimAugroupList     
contains=@vimCmdList,vimFilter,vimFunc,vimLineComment,vimSpecFile,vimOper,vimNumber,vimOperParen,@vimComment,vimString,vimSubst,vimRegister,vimCmplxRepeat,vimNotation,vimCtrlChar,vimContinue
+syn cluster vimAugroupList     
contains=@vimCmdList,vimFilter,@vimFunc,vimLineComment,vimSpecFile,vimOper,vimNumber,vimOperParen,@vimComment,vimString,vimSubst,vimRegister,vimCmplxRepeat,vimNotation,vimCtrlChar,vimContinue
 
 " define
 VimFolda syn region vimAugroup
@@ -490,9 +490,9 @@ syn match   vim9LambdaOperatorComment contained "#.*" 
skipwhite skipempty nextgrou
 
 " Functions: Tag is provided for those who wish to highlight tagged functions 
{{{2
 " =========
-syn cluster    vimFunctionBodyCommon   
contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimFBVar,vimFunc,vimFunction,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegister,vimSpecFile,vimString,vimSubst,vimFunctionFold,vimDefFold,vimCmdSep
+syn cluster    vimFunctionBodyCommon   
contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimFBVar,vimFunction,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegister,vimSpecFile,vimString,vimSubst,vimFunctionFold,vimDefFold,vimCmdSep
 syn cluster    vimFunctionBodyList     
contains=@vimFunctionBodyCommon,vimComment,vimLineComment,vimInsert,vimConst,vimLet,vimSearch
-syn cluster    vimDefBodyList          
contains=@vimFunctionBodyCommon,vim9Comment,vim9LineComment,vim9Block,vim9Const,vim9Final,vim9Var,vim9Null,vim9Boolean,vim9For,vim9LhsVariable,vim9LhsVariableList,vim9LhsRegister,vim9Search,@vimSpecialVar
+syn cluster    vimDefBodyList          
contains=@vimFunctionBodyCommon,vim9Comment,vim9LineComment,vim9Block,vim9Const,vim9Final,vim9Var,vim9Null,vim9Boolean,vim9For,vim9LhsVariable,vim9LhsVariableList,vim9LhsRegister,vim9Search,@vimSpecialVar,@vim9Func
 
 syn region     vimFunctionPattern      contained
       \ matchgroup=vimOper
@@ -805,7 +805,7 @@ syn match   vimSpecFileMod  "\(:[phtre]\)\+"        
contained
 
 " User-Specified Commands: {{{2
 " =======================
-syn cluster    vimUserCmdList  
contains=@vimCmdList,vimCmplxRepeat,@vimComment,vimCtrlChar,vimEscapeBrace,vimFunc,vimNotation,vimNumber,vimOper,vimRegister,vimSpecFile,vimString,vimSubst,vimSubstRep,vimSubstRange
+syn cluster    vimUserCmdList  
contains=@vimCmdList,vimCmplxRepeat,@vimComment,vimCtrlChar,vimEscapeBrace,@vimFunc,vimNotation,vimNumber,vimOper,vimRegister,vimSpecFile,vimString,vimSubst,vimSubstRep,vimSubstRange
 
 syn match      vimUserCmd      "\<com\%[mand]\>!\="            skipwhite       
 nextgroup=vimUserCmdAttrs,vimUserCmdName contains=vimBang
 syn match      vimUserCmd      +\<com\%[mand]\>!\=\ze\s*
\s*\%(\\|["#]\ \)+      skipwhite skipnl 
nextgroup=vimUserCmdAttrs,vimUserCmdName contains=vimBang
@@ -1031,7 +1031,7 @@ syn match vimCmplxRepeat  
'@[0-9a-z".=@:]\ze\($\|[^a-zA-Z]\>\)'
 " Set command and associated set-options (vimOptions) with comment {{{2
 syn match      vimSet          "\<\%(setl\%[ocal]\|setg\%[lobal]\|se\%[t]\)\>" 
skipwhite nextgroup=vimSetBang,vimCmdSep,vimComment,vimSetArgs
 syn region     vimSetComment   contained       start=+"+ skip=+
\s*\%(\\||"\ \)+ end="$" contains=@vimCommentGroup,vimCommentString extend
-syn match      vimSetCmdSep    contained       "|" skipwhite 
nextgroup=@vimCmdList,vimSubst1,vimFunc
+syn match      vimSetCmdSep    contained       "|" skipwhite 
nextgroup=@vimCmdList,vimSubst1,@vimFunc
 syn match      vimSetEscape    contained       "\\%(\[|"]\|.\)"
 syn match      vimSetBarEscape contained       "\|"
 syn match      vimSetQuoteEscape       contained       +\"+
@@ -1241,9 +1241,9 @@ syn region        vimAutocmdPattern       contained
       \ skip="\\\|\[,[:space:]]"
       \ end="\ze[,[:space:]]"
       \ end="$"
-      \ skipwhite nextgroup=vimAutocmdPatternSep,vimAutocmdMod,vimAutocmdBlock
+      \ skipwhite 
nextgroup=vimAutocmdPatternSep,vimAutocmdMod,vimAutocmdBlock,@vimFunc
       \ contains=vimEnvvar,@vimWildcard,vimAutocmdPatternEscape
-syn match      vimAutocmdBufferPattern contained       
"<buffer\%(=\%(\d\+\|abuf\)\)\=>" skipwhite 
nextgroup=vimAutocmdPatternSep,vimAutocmdMod,vimAutocmdBlock
+syn match      vimAutocmdBufferPattern contained       
"<buffer\%(=\%(\d\+\|abuf\)\)\=>" skipwhite 
nextgroup=vimAutocmdPatternSep,vimAutocmdMod,vimAutocmdBlock,@vimFunc
 " trailing pattern separator comma allowed
 syn match      vimAutocmdPatternSep    contained       ","                     
skipwhite nextgroup=@vimAutocmdPattern,vimAutocmdMod,vimAutocmdBlock
 syn match      vimAutocmdPatternEscape contained       "\."
@@ -1439,6 +1439,12 @@ syn region       vimMenutranslate
 syn match      vimMenutranslateName "\%(\\s\|\S\)\+" contained 
contains=vimMenuNotation,vimNotation
 syn match      vimMenutranslateComment +".*+ contained 
containedin=vimMenutranslate
 
+" If, While and Return: {{{2
+" ====================
+syn match      vimNotFunc      
"\%#=1\<\%(if\|el\%[seif]\|retu\%[rn]\|while\)\>"       skipwhite 
nextgroup=@vimExprList,vimNotation
+syn match      vimElse "\<el\%[se]\>"                  skipwhite 
nextgroup=vimComment,vim9Comment
+syn match      vimEndif        "\<en\%[dif]\>"                 skipwhite 
nextgroup=vimComment,vim9Comment
+
 " Angle-Bracket Notation: (tnx to Michael Geddes) {{{2
 " ======================
 syn case ignore
@@ -1462,17 +1468,8 @@ syn match        vimNotation     contained       
"\%#=1\%(\\|<lt>\)\=<\%([scamd]-\)\{0,4}char-\%
 syn match      vimBracket contained    "[\<>]"
 syn case match
 
-" User Function Highlighting: {{{2
-" (following Gautam Iyer's suggestion)
-" ==========================
-syn match      vimFunc                 
"\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\ze\s*("
                        skipwhite nextgroup=vimOperParen 
contains=vimFuncEcho,vimFuncName,vimUserFunc,vimExecute
-syn match      vimUserFunc     contained               
"\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\|\<\u[a-zA-Z0-9.]*\>\|\<if\>"
  contains=vimNotation,vim9MethodName,vim9Super,vim9This
-syn keyword    vimFuncEcho     contained       ec ech echo
-
-syn match      vimMap  "\<map\%(\s\+(\)\@="    skipwhite 
nextgroup=vimMapBang,vimMapMod,vimMapLhs
-
 " User Command Highlighting: {{{2
-syn match vimUsrCmd    
'^\s*\zs\u\%(\w*\)\@>\%([(#[]\|\s\+\%([-+*/%]\=\|\.\.\)=\)\@!'
+syn match vimUsrCmd    
'^\s*\zs\u\%(\w*\)\@>\%([.(#[]\|\s\+\%([-+*/%]\=\|\.\.\)=\)\@!'
 
 " Vim user commands
 
@@ -1502,12 +1499,6 @@ if !exists("g:vimsyn_noerror") && 
!exists("g:vimsyn_novimfunctionerror")
  syn match     vimBufnrWarn    /\<bufnr\s*(\s*["']\.['"]\s*)/
 endif
 
-" If, While and Return: {{{2
-" ====================
-syn match      vimNotFunc      
"\%#=1\<\%(if\|el\%[seif]\|retu\%[rn]\|while\)\>"       skipwhite 
nextgroup=@vimExprList,vimNotation
-syn match      vimElse "\<el\%[se]\>"                  skipwhite 
nextgroup=vimComment,vim9Comment
-syn match      vimEndif        "\<en\%[dif]\>"                 skipwhite 
nextgroup=vimComment,vim9Comment
-
 " Match: {{{2
 " =====
 syn match      vimMatch                "\<[23]\=mat\%[ch]\>" skipwhite 
nextgroup=vimMatchGroup,vimMatchNone
@@ -2126,6 +2117,20 @@ VimFoldt syn region vimTclHeredoc        contained
       \ contains=@vimTclScript
 
 unlet s:interfaces
+" Function Call Highlighting: {{{2
+" (following Gautam Iyer's suggestion)
+" ==========================
+syn match      vimFunc contained       "\<\l\w*\ze\s*("                        
        skipwhite nextgroup=vimOperParen contains=vimFuncName
+syn match      vimUserFunc     contained       
"\<\%([[:upper:]_]\|\%(\h\w*\.\)\+\h\)\w*\ze\s*("               skipwhite 
nextgroup=vimOperParen contains=vim9MethodName,vim9Super,vim9This
+syn match      vimUserFunc     contained       
"\<\%(g:\)\=\%(\h\w*#\)\+\h\w*\ze\s*("          skipwhite 
nextgroup=vimOperParen contains=vimVarScope
+syn match      vimUserFunc     contained       
"\%(\<[sgbwtlav]:\|<[sS][iI][dD]>\)\%(\h\w*\.\)*\h\w*\ze\s*("   skipwhite 
nextgroup=vimOperParen contains=vimVarScope,vimNotation
+
+Vim9 syn match vim9UserFunc    
"^\s*\zs\%([sgbwtv]:\|<[sS][iI][dD]>\)\=\%(\h\w*[.#]\)*\h\w*\ze("               
skipwhite nextgroup=vimOperParen 
contains=vimVarScope,vimNotation,vim9MethodName,vim9Super,vim9This
+Vim9 syn match vim9Func        "^\s*\zs\l\w*\ze("                              
skipwhite nextgroup=vimOperParen contains=vimFuncName
+
+syn cluster    vimFunc contains=vimFunc,vimUserFunc
+syn cluster    vim9Func        contains=vim9Func,vim9UserFunc
+
 " Beginners - Patterns that involve ^ {{{2
 " =========
 Vim9 syn region        vim9LineComment start=+^[       :]*\zs#.*$+ skip=+
\s*\\|
\s*#\ + end="$" contains=@vimCommentGroup,vimCommentString,vim9CommentTitle 
extend
@@ -2194,6 +2199,7 @@ if !exists("skip_vim_syntax_inits")
   hi def link vimFTError       vimError
   hi def link vimFunctionError vimError
   hi def link vimFunc          vimError
+  hi def link vim9Func                 vimError
   hi def link vimHiAttribList  vimError
   hi def link vimHiCtermError  vimError
   hi def link vimHiKeyError    vimError

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
To view this discussion visit 
https://groups.google.com/d/msgid/vim_dev/E1uZwV6-00FFAo-7X%40256bit.org.

Raspunde prin e-mail lui