runtime(vim): Update base syntax, improve function call highlighting
Commit:
https://github.com/vim/vim/commit/6ac2e4aa0a565dc8cac73b33c9c099cea77212a8
Author: Doug Kearns <[email protected]>
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 <[email protected]>
Signed-off-by: Christian Brabandt <[email protected]>
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 <[email protected]>
-" 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 [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/vim_dev/E1uZwV6-00FFAo-7X%40256bit.org.