runtime(vim): Update base-syntax, improve variable matching
- Match variables after operators, including line continuations.
- Match option variables without leading whitespace.
- Explicitly match expression subscripts.
- Match Vim9 variables in LHS of assignments and method calls.
- Match option variables (&option) with a dedicated syntax group like
environment variables.
- Match list literals, fixes: #5830
- Match :{un}lockvar arguments.
- Match registers and environment variables in :let unpack lists.
- Match lambda expressions
- Match Vim9 scope blocks
- Match variables in :for subject
- Highlight user variables with Normal
- Improve this/super keyword matching, fixes: #15970
closes: #16476
Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/runtime/syntax/generator/vim.vim.base b/runtime/syntax/generator/vim.vim.base
index c30034c..452cec2 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 <dougkearns@gmail.com>
-" Last Change: 2025 Feb 03
+" Last Change: 2025 Feb 08
" Former Maintainer: Charles E. Campbell
" DO NOT CHANGE DIRECTLY.
@@ -192,32 +192,51 @@
" Numbers {{{2
" =======
syn case ignore
-syn match vimNumber '\<\d\+\%(\.\d\+\%(e[+-]\=\d\+\)\=\)\=' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
-syn match vimNumber '\<0b[01]\+' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
-syn match vimNumber '\<0o\=\o\+' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
-syn match vimNumber '\<0x\x\+' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
+syn match vimNumber '\<\d\+' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment,vimSubscript
+syn match vimNumber '\<\d\+\.\d\+\%(e[+-]\=\d\+\)\=' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
+syn match vimNumber '\<0b[01]\+' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment,vimSubscript
+syn match vimNumber '\<0o\=\o\+' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment,vimSubscript
+syn match vimNumber '\<0x\x\+' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment,vimSubscript
syn match vimNumber '\<0z\>' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
-syn match vimNumber '\<0z\%(\x\x\)\+\%(\.\%(\x\x\)\+\)*' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
+syn match vimNumber '\<0z\%(\x\x\)\+\%(\.\%(\x\x\)\+\)*' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment,vimSubscript
syn match vimNumber '\%(^\|\A\)\zs#\x\{6}' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
syn case match
" All vimCommands are contained by vimIsCommand. {{{2
-syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutoCmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,@vimEcho,vimEnddef,vimEndfunction,vimExecute,vimIsCommand,vimExtCmd,vimFor,vimFunction,vimFuncFold,vimGlobal,vimHighlight,vimLet,vimLoadkeymap,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimSet,vimSleep,vimSyntax,vimThrow,vimUnlet,vimUnmap,vimUserCmd,vimMenu,vimMenutranslate,@vim9CmdList
+syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutoCmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,@vimEcho,vimEnddef,vimEndfunction,vimExecute,vimIsCommand,vimExtCmd,vimFor,vimFunction,vimFuncFold,vimGlobal,vimHighlight,vimLet,vimLoadkeymap,vimLockvar,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimSet,vimSleep,vimSyntax,vimThrow,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimMenu,vimMenutranslate,@vim9CmdList
syn cluster vim9CmdList contains=vim9Abstract,vim9Class,vim9Const,vim9Enum,vim9Export,vim9Final,vim9For,vim9Interface,vim9Type,vim9Var
syn match vimCmdSep "[:|]\+" skipwhite nextgroup=@vimCmdList,vimSubst1
syn match vimCount contained "\d\+"
syn match vimIsCommand "\<\%(\h\w*\|[23]mat\%[ch]\)\>" nextgroup=vimBang contains=vimCommand
syn match vimBang contained "!"
-syn match vimVar contained "\<\h[a-zA-Z0-9#_]*\>"
-syn match vimVar "\<[bwglstav]:\h[a-zA-Z0-9#_]*\>"
-syn match vimVar "\s\zs&\%([lg]:\)\=\a\+\>"
-syn match vimVar "\s\zs&t_\S[a-zA-Z0-9]\>"
-syn match vimVar "\s\zs&t_k;"
-syn match vimFBVar contained "\<[bwglstav]:\h[a-zA-Z0-9#_]*\>"
-syn keyword vimCommand contained in
-syn cluster vimExprList contains=vimEnvvar,vimFunc,vimNumber,vimOper,vimOperParen,vimLetRegister,vimString,vimVar,@vim9ExprList
-syn cluster vim9ExprList contains=vim9Boolean,vim9Null
+syn region vimSubscript contained matchgroup=vimSubscriptBracket start="\[" end="]" nextgroup=vimSubscript contains=@vimExprList
+
+syn match vimVar contained "\<\h[a-zA-Z0-9#_]*\>" nextgroup=vimSubscript contains=vim9Super,vim9This
+syn match vimVar "\<[bwglstav]:\h[a-zA-Z0-9#_]*\>" nextgroup=vimSubscript
+syn match vimVar "\<a:\%(000\|\d\+\)\>" nextgroup=vimSubscript
+syn match vimFBVar contained "\<[bwglsta]:\h[a-zA-Z0-9#_]*\>" nextgroup=vimSubscript
+
+syn match vimVimVar "\<v:\h\w*\>" nextgroup=vimSubscript
+syn match vimOptionVar "&\%([lg]:\)\=\a\+\>" nextgroup=vimSubscript
+syn match vimOptionVar "&t_\S[a-zA-Z0-9]\>" nextgroup=vimSubscript
+syn match vimOptionVar "&t_k;" nextgroup=vimSubscript
+syn cluster vimSpecialVar contains=vimEnvvar,vimLetRegister,vimOptionVar,vimVimVar
+
+Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s\+[-+/*%]\=="
+Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s\+\.\.="
+Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s\+=<<"
+Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s*->" contains=vim9Super,vim9This
+Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\[" nextgroup=vimSubscript
+Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\." nextgroup=vimOper contains=vim9Super,vim9This
+
+Vim9 syn match vim9LhsVariableList "\[\_[^]]\+]\ze\s\+[-+/*%]\==" contains=vimVar,@vimSpecialVar
+Vim9 syn match vim9LhsVariableList "\[\_[^]]\+]\ze\s\+\.\.=" contains=vimVar,@vimSpecialVar
+
+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 vim9ExprList contains=vim9Boolean,vim9LambdaParams,vim9Null
" Insertions And Appends: insert append {{{2
" (buftype != nofile test avoids having append, change, insert show up in the command window)
@@ -268,7 +287,7 @@
" 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,vimFuncVar,vimContinue
+syn cluster vimAugroupList contains=@vimCmdList,vimFilter,vimFunc,vimLineComment,vimSpecFile,vimOper,vimNumber,vimOperParen,@vimComment,vimString,vimSubst,vimRegister,vimCmplxRepeat,vimNotation,vimCtrlChar,vimContinue
syn match vimAugroup "\<aug\%[roup]\>" contains=vimAugroupKey,vimAugroupBang skipwhite nextgroup=vimAugroupBang,vimAutoCmdGroup
if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'a'
syn region vimAugroup fold start="\<aug\%[roup]\>\ze\s\+\%([eE][nN][dD]\)\@!\S\+" matchgroup=vimAugroupKey end="\<aug\%[roup]\>\ze\s\+[eE][nN][dD]\>" contains=vimAutoCmd,@vimAugroupList,vimAugroupkey skipwhite nextgroup=vimAugroupEnd
@@ -286,31 +305,64 @@
" Operators: {{{2
" =========
-syn cluster vimOperGroup contains=vimEnvvar,vimFunc,vimFuncVar,vimOper,vimOperParen,vimNumber,vimString,vimRegister,@vimContinue,vim9Comment,vimVar,vimBoolean,vimNull
-syn match vimOper "\a\@<!!" skipwhite nextgroup=vimString,vimSpecFile
-syn match vimOper "||\|&&\|[-+*/%.]" skipwhite nextgroup=vimString,vimSpecFile
-syn match vimOper "?" skipwhite nextgroup=@vimExprList
+syn cluster vimOperGroup contains=@vimSpecialVar,vimFunc,vimLambda,vimOper,vimOperParen,vimNumber,vimString,vimRegister,@vimContinue,vim9Comment,vimVar,vimBoolean,vim9LambdaParams,vimNull
+syn match vimOper "\a\@<!!" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimSpecFile
+syn match vimOper "||\|&&\|[-+*/%.]" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimSpecFile
+syn match vimOper "?" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList
" distinguish ternary : from ex-colon
-syn match vimOper "\s\@1<=:\ze\s\|\s\@1<=:$" skipwhite nextgroup=@vimExprList
-syn match vimOper "??" skipwhite nextgroup=@vimExprList
-syn match vimOper "=" skipwhite nextgroup=vimString,vimSpecFile
-syn match vimOper "\%#=1\%(==\|!=\|>=\|<=\|=\~\|!\~\|>\|<\)[?#]\=" skipwhite nextgroup=vimString,vimSpecFile
-syn match vimOper "\<is\%(not\)\=\>" skipwhite nextgroup=vimString,vimSpecFile
-syn match vimOper "\<is\%(not\)\=[?#]" skipwhite nextgroup=vimString,vimSpecFile
-syn region vimOperParen matchgroup=vimParenSep start="(" end=")" contains=@vimOperGroup
-syn region vimOperParen matchgroup=vimSep start="#\={" end="}" contains=@vimOperGroup nextgroup=vimVar,vimFuncVar
+syn match vimOper "\s\@1<=:\ze\s\|\s\@1<=:$" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList
+syn match vimOper "??" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList
+syn match vimOper "=" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimSpecFile
+syn match vimOper "\%#=1\%(==\|!=\|>=\|<=\|=\~\|!\~\|>\|<\)[?#]\=" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimSpecFile
+syn match vimOper "\<is\%(not\)\=\>" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimSpecFile
+syn match vimOper "\<is\%(not\)\=[?#]" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimSpecFile
+syn region vimOperParen matchgroup=vimParenSep start="(" end=")" contains=@vimOperGroup nextgroup=vimSubscript
+syn region vimOperParen matchgroup=vimSep start="#\={" end="}" contains=@vimOperGroup nextgroup=vimSubscript,vimVar
+syn region vimOperParen contained matchgroup=vimSep start="\[" end="]" contains=@vimOperGroup nextgroup=vimSubscript,vimVar
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_noopererror")
syn match vimOperError ")"
endif
+syn match vimOperContinue contained "^\s*\zs\\" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList
+syn match vimOperContinueComment contained '^\s*\zs["#]\\ .*' skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList
+syn cluster vimOperContinue contains=vimOperContinue,vimOperContinueComment
+
+" Lambda Expressions: {{{2
+" ==================
+syn match vimLambdaOperator contained "->" skipwhite nextgroup=@vimExprList
+syn region vimLambda contained matchgroup=Delimiter start="{\ze[[:space:][:alnum:]_.,]*->" end="}" end="$" skip=+\s*\n\s*\\\|\s*\n\s*"\\ + contains=@vimContinue,@vimExprList,vimLambdaParams
+syn match vimLambdaParams contained "{\@1<=.\{-}\%(->\)\@=" nextgroup=vimLambdaOperator contains=vimFuncParam
+
+syn match vim9LambdaOperator contained "=>" skipwhite skipempty nextgroup=@vimExprList,vim9LambdaBlock,vim9LambdaOperatorComment
+syn match vim9LambdaParamsParen contained "[()]"
+syn region vim9LambdaParams contained
+ \ matchgroup=vim9LambdaParamsParen
+ \ start="(\ze\s*\(\.\.\.\)\=\h\w*[,:]\%(\s\|$\)"
+ \ start="(\ze\s*\n
+ "\ line continuations
+ \\%(\s*\%(#\\ .*\|\\\s*\)\n\)*\s*\\\s*
+ "\ parameter names
+ \\(\.\.\.\)\=\h\w*[,:]\%(\s\|$\)"
+ \ end=")\ze\%(:\s\|\s\+=>\)"
+ \ matchgroup=vimContinue
+ \ end="^\s*\\\ze\s\+=>"
+ \ skipwhite nextgroup=vim9LambdaReturnType,vim9LambdaOperator
+ \ contains=@vim9Continue,vimDefParam,vim9LambdaParamsParen
+syn match vim9LambdaParams contained "(\s*)\|(\s*\(\.\.\.\)\=\h\w*\s*)\ze\%(:\s\|\s\+=>\)" skipwhite nextgroup=vim9LambdaReturnType,vim9LambdaOperator contains=vimDefParam,vim9LambdaParamsParen
+
+syn region vim9LambdaReturnType contained start=":\s" end="$" end="\ze#" end="\ze=>" skipwhite skipempty nextgroup=vim9LambdaOperator,vim9LamdaOperatorComment contains=vimTypeSep transparent
+syn region vim9LambdaBlock contained matchgroup=vimSep start="{" end="^\s*\zs}" contains=@vimDefBodyList
+
+syn match vim9LambdaOperatorComment contained "#.*" skipwhite skipempty nextgroup=@vimExprList,vim9LambdaBlock,vim9LambdaOperatorComment
+
" Functions: Tag is provided for those who wish to highlight tagged functions {{{2
" =========
-syn cluster vimFuncList contains=vimFuncBang,vimFunctionError,vimFuncKey,vimFuncSID,Tag
-syn cluster vimDefList contains=vimFuncBang,vimFunctionError,vimDefKey,vimFuncSID,Tag
+syn cluster vimFuncList contains=vimFuncBang,vimFunctionError,vimFuncKey,vimFuncScope,vimFuncSID,Tag
+syn cluster vimDefList contains=vimFuncBang,vimFunctionError,vimDefKey,vimFuncScope,vimFuncSID,Tag
-syn cluster vimFuncBodyCommon contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimEnvvar,vimFBVar,vimFunc,vimFunction,vimLetHereDoc,vimNotation,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegister,vimSpecFile,vimString,vimSubst,vimFuncFold,vimDefFold
-syn cluster vimFuncBodyList contains=@vimFuncBodyCommon,vimComment,vimLineComment,vimFuncVar,vimInsert,vimConst,vimLet,vimSearch
-syn cluster vimDefBodyList contains=@vimFuncBodyCommon,vim9Comment,vim9LineComment,vim9Const,vim9Final,vim9Var,vim9Null,vim9Boolean,vim9For,vim9Search
+syn cluster vimFuncBodyCommon contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimFBVar,vimFunc,vimFunction,vimLetHereDoc,vimNotation,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegister,vimSpecFile,vimString,vimSubst,vimFuncFold,vimDefFold
+syn cluster vimFuncBodyList contains=@vimFuncBodyCommon,vimComment,vimLineComment,vimInsert,vimConst,vimLet,vimSearch
+syn cluster vimDefBodyList contains=@vimFuncBodyCommon,vim9Comment,vim9LineComment,vim9Block,vim9Const,vim9Final,vim9Var,vim9Null,vim9Boolean,vim9For,vim9LhsVariable,vim9LhsVariableList,vim9LhsRegister,vim9Search,@vimSpecialVar
syn region vimFuncPattern contained matchgroup=vimOper start="/" end="$" contains=@vimSubstList
syn match vimFunction "\<fu\%[nction]\>" skipwhite nextgroup=vimCmdSep,vimComment,vimFuncPattern contains=vimFuncKey
@@ -324,7 +376,7 @@
syn match vimFuncBang contained "!"
syn match vimFuncSID contained "\c<sid>"
-syn match vimFuncSID contained "\<[sg]:"
+syn match vimFuncScope contained "\<[sg]:"
syn keyword vimFuncKey contained fu[nction]
syn keyword vimDefKey contained def
@@ -347,7 +399,6 @@
syn region vimDefFold start="\<def\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\)\+(" end="\<enddef\>" contains=vimDef fold keepend extend transparent
endif
-syn match vimFuncVar contained "a:\%(\K\k*\|\d\+\)\>"
syn match vimFuncBlank contained "\s\+"
" Types: {{{2
@@ -370,12 +421,24 @@
if s:vim9script
" Methods {{{3
- syn match vim9MethodDef contained "\<def\>" skipwhite nextgroup=vim9MethodDefName
+ syn match vim9MethodDef contained "\<def\>" skipwhite nextgroup=vim9MethodDefName,vim9ConstructorDefName
syn match vim9MethodDefName contained "\<\h\w*\>" nextgroup=vim9MethodDefParams contains=@vim9MethodName
syn region vim9MethodDefParams contained
\ matchgroup=Delimiter start="(" end=")"
\ skipwhite skipnl nextgroup=vim9MethodDefBody,vimDefComment,vimEnddef,vim9MethodDefReturnType,vimCommentError
\ contains=vimDefParam,vim9Comment,vimFuncParamEquals
+
+ syn match vim9ConstructorDefName contained "\<new\w*\>"
+ \ nextgroup=vim9ConstructorDefParams
+ \ contains=@vim9MethodName
+ syn match vim9ConstructorDefParam contained "\<\%(this\.\)\=\h\w*\>"
+ \ skipwhite nextgroup=vimParamType,vimFuncParamEquals
+ \ contains=vim9This,vimOper
+ syn region vim9ConstructorDefParams contained
+ \ matchgroup=Delimiter start="(" end=")"
+ \ skipwhite skipnl nextgroup=vim9MethodDefBody,vimDefComment,vimEnddef,vimCommentError
+ \ contains=vim9ConstructorDefParam,vim9Comment,vimFuncParamEquals
+
syn region vim9MethodDefReturnType contained
\ start=":\s" end="$" matchgroup=vim9Comment end="\ze[#"]"
\ skipwhite skipnl nextgroup=vim9MethodDefBody,vimDefComment,vimCommentError
@@ -391,7 +454,7 @@
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimfunctionerror")
syn match vim9MethodNameError contained "\<[a-z0-9]\i\>"
endif
- syn match vim9MethodName contained "\<new\i*\>"
+ syn match vim9MethodName contained "\<new\w*\>"
syn keyword vim9MethodName contained empty len string
syn cluster vim9MethodName contains=vim9MethodName,vim9MethodNameError
@@ -416,8 +479,11 @@
syn keyword vim9Implements contained implements skipwhite skipnl nextgroup=vim9ImplementedInterface
syn keyword vim9Public contained public
syn keyword vim9Static contained static
- syn keyword vim9This contained this
- syn keyword vim9Super contained super
+ " FIXME: don't match as dictionary keys, remove when operators are not
+ " shared between Vim9 and legacy script
+ syn match vim9This contained "\.\@1<!\<this\>:\@!"
+ " super must be folowed by '.'
+ syn match vim9Super contained "\.\@1<!\<super\.\@="
VimFoldc syn region vim9ClassBody start="\<class\>" matchgroup=vimCommand end="\<endclass\>" contains=@vim9ClassBodyList transparent
@@ -450,15 +516,19 @@
VimFoldi syn region vim9InterfaceBody start="\<interface\>" matchgroup=vimCommand end="\<endinterface\>" contains=@vim9InterfaceBodyList transparent
- " type {{{3
+ " Type Aliases {{{3
syn match vim9Type "\<ty\%[pe]\>" skipwhite nextgroup=vim9TypeAlias,vim9TypeAliasError
syn match vim9TypeAlias contained "\<\u\w*\>" skipwhite nextgroup=vim9TypeEquals
syn match vim9TypeEquals contained "=" skipwhite nextgroup=@vimType
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_notypealiaserror")
- syn match vim9TypeAliasError contained "\<\U\w*"
+ syn match vim9TypeAliasError contained "\<\l\w*\>" skipwhite nextgroup=vim9TypeEquals
endif
endif
+" Blocks: {{{2
+" ======
+Vim9 syn region vim9Block matchgroup=vimSep start="{" end="^\s*\zs}" contains=@vimDefBodyList
+
" Keymaps: {{{2
" =======
@@ -523,7 +593,7 @@
syn match vimUserCmdAttrAddr contained "?"
syn case match
-syn region vimUserCmdBlock contained matchgroup=vimSep start="{" end="}" contains=@vimDefBodyList
+syn region vimUserCmdBlock contained matchgroup=vimSep start="{" end="^\s*\zs}" contains=@vimDefBodyList
syn match vimDelcommand "\<delc\%[ommand]\>" skipwhite nextgroup=vimDelcommandAttr
syn match vimDelcommandAttr contained "-buffer\>"
@@ -570,8 +640,8 @@
syn region vimPatRegion contained transparent matchgroup=vimPatSepR start="\\[z%]\=(" end="\\)" contains=@vimSubstList oneline
syn match vimNotPatSep contained "\\\\"
syn cluster vimStringGroup contains=vimEscape,vimEscapeBrace,vimPatSep,vimNotPatSep,vimPatSepErr,vimPatSepZone,@Spell
-syn region vimString oneline keepend matchgroup=vimString start=+[^a-zA-Z>\\@]"+lc=1 skip=+\\\\\|\\"+ matchgroup=vimStringEnd end=+"+ contains=@vimStringGroup extend
-syn region vimString oneline matchgroup=vimString start=+[^a-zA-Z>\\@]'+lc=1 end=+'+ contains=vimQuoteEscape extend
+syn region vimString oneline keepend matchgroup=vimString start=+[^a-zA-Z>\\@]"+lc=1 skip=+\\\\\|\\"+ matchgroup=vimStringEnd end=+"+ nextgroup=vimSubscript contains=@vimStringGroup extend
+syn region vimString oneline matchgroup=vimString start=+[^a-zA-Z>\\@]'+lc=1 end=+'+ nextgroup=vimSubscript contains=vimQuoteEscape extend
"syn region vimString oneline start="\s/\s*\A"lc=1 skip="\\\\\|\\+" end="/" contains=@vimStringGroup " see tst45.vim
syn match vimString contained +"[^"]*\\$+ skipnl nextgroup=vimStringCont
syn match vimStringCont contained +\(\\\\\|.\)\{-}[^\\]"+
@@ -583,8 +653,8 @@
syn match vimEscape contained "\\<\*[^>]*>\=>"
syn match vimQuoteEscape contained "''"
-syn region vimString oneline matchgroup=vimString start=+$'+ skip=+''+ end=+'+ contains=vimQuoteEscape,@vimStringInterpolation extend
-syn region vimString oneline matchgroup=vimString start=+$"+ end=+"+ contains=@vimStringGroup,@vimStringInterpolation extend
+syn region vimString oneline matchgroup=vimString start=+$'+ skip=+''+ end=+'+ nextgroup=vimSubscript contains=vimQuoteEscape,@vimStringInterpolation extend
+syn region vimString oneline matchgroup=vimString start=+$"+ end=+"+ nextgroup=vimSubscript contains=@vimStringGroup,@vimStringInterpolation extend
syn region vimStringInterpolationExpr oneline contained matchgroup=vimSep start=+{+ end=+}+ contains=@vimExprList
syn match vimStringInterpolationBrace contained "{{"
syn match vimStringInterpolationBrace contained "}}"
@@ -660,13 +730,18 @@
" Variable Declarations: {{{2
" =====================
-VimL syn keyword vimLet let skipwhite nextgroup=vimVar,vimFuncVar,vimLetRegister,vimVarList
-VimL syn keyword vimConst cons[t] skipwhite nextgroup=vimVar,vimVarList
-syn region vimVarList contained start="\[" end="]" contains=vimVar,@vimContinue
+VimL syn keyword vimLet let skipwhite nextgroup=@vimSpecialVar,vimVar,vimVarList
+VimL syn keyword vimConst cons[t] skipwhite nextgroup=@vimSpecialVar,vimVar,vimVarList
+syn region vimVarList contained
+ \ start="\[" end="]"
+ \ contains=@vimContinue,@vimSpecialVar,vimVar
-VimL syn keyword vimUnlet unl[et] skipwhite nextgroup=vimUnletBang,vimUnletVars
-syn match vimUnletBang contained "!" skipwhite nextgroup=vimUnletVars
-syn region vimUnletVars contained start="$\I\|\h" skip="\n\s*\\" end="$" end="|" contains=vimVar,vimEnvvar,vimContinue,vimString,vimNumber
+VimL syn keyword vimUnlet unl[et] skipwhite nextgroup=vimUnletBang,vimUnletVars
+syn match vimUnletBang contained "\a\@1<=!" skipwhite nextgroup=vimUnletVars
+syn region vimUnletVars contained
+ \ start="$\I\|\h" skip=+\n\s*\\\|\n\s*"\\ \|^\s*"\\ + end="$" end="\ze[|"]"
+ \ nextgroup=vimCmdSep,vimComment
+ \ contains=@vimContinue,vimEnvvar,vimVar
VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='\%(^\z(\s*\)\S.*\)\@<==<<\s*trim\%(\s\+\)\@>\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\z1\=\z2$' extend
VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='=<<\%(\s*\)\@>\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\z1$' extend
@@ -678,15 +753,39 @@
Vim9 syn keyword vim9Var var skipwhite nextgroup=vim9Variable,vim9VariableList
syn match vim9Variable contained "\<\h\w*\>" skipwhite nextgroup=vimTypeSep,vimLetHereDoc,vimOper
-syn region vim9VariableList contained start="\[" end="]" contains=vim9Variable,@vimContinue
+syn region vim9VariableList contained start="\[" end="]" contains=@vimContinue,@vimSpecialVar,vim9Variable
+
+" Lockvar and Unlockvar: {{{2
+" =====================
+syn keyword vimLockvar lockv[ar] skipwhite nextgroup=vimLockvarBang,vimLockvarDepth,vimLockvarVars
+syn keyword vimUnlockvar unlo[ckvar] skipwhite nextgroup=vimLockvarBang,vimLockvarDepth,vimLockvarVars
+syn match vimLockvarBang contained "\a\@1<=!" skipwhite nextgroup=vimLockvarVars
+syn match vimLockvarDepth contained "\<[0-3]\>" skipwhite nextgroup=vimLockvarVars
+syn region vimLockvarVars contained
+ \ start="\h" skip=+\n\s*\\\|\n\s*"\\ \|^\s*"\\ + end="$" end="\ze[|"]"
+ \ nextgroup=vimCmdSep,vimComment
+ \ contains=@vimContinue,vimVar
+
+hi def link vimLockvar vimCommand
+hi def link vimUnlockvar vimCommand
+hi def link vimLockvarBang vimBang
+hi def link vimLockvarDepth vimNumber
" For: {{{2
" ===
-if s:vim9script
- syn keyword vim9For for skipwhite nextgroup=vim9Variable,vim9VariableList
-else
- syn keyword vimFor for skipwhite nextgroup=vimVar,vimVarList
-endif
+" handles Vim9 and legacy for now
+syn region vimFor
+ \ matchgroup=vimCommand
+ \ start="\<for\>" end="\<in\>"
+ \ skipwhite skipnl nextgroup=@vimForInContinue,vim9ForInComment,@vimExprList
+ \ contains=@vimContinue,vimVar,vimVarList,vim9VariableList
+ \ transparent
+
+syn match vim9ForInComment contained "#.*" skipwhite skipempty nextgroup=vimForInComment,@vimExprList
+
+syn match vimForInContinue contained "^\s*\zs\\" skipwhite skipnl nextgroup=@vimForInContinue,@vimExprList
+syn match vimForInContinueComment contained '^\s*\zs["#]\\ .*' skipwhite skipnl nextgroup=@vimForInContinue,@vimExprList
+syn cluster vimForInContinue contains=vimForInContinue,vimForInContinueComment
" Abbreviations: {{{2
" =============
@@ -702,7 +801,7 @@
syn keyword vimAutoCmd au[tocmd] skipwhite nextgroup=vimAutoCmdBang,vimAutoEventList
syn keyword vimAutoCmd do[autocmd] doautoa[ll] skipwhite nextgroup=vimAutoEventList
syn match vimAutoCmdMod "\(++\)\=\(once\|nested\)" skipwhite nextgroup=vimAutoCmdBlock
-syn region vimAutoCmdBlock contained matchgroup=vimSep start="{" end="}" contains=@vimDefBodyList
+syn region vimAutoCmdBlock contained matchgroup=vimSep start="{" end="^\s*\zs}" contains=@vimDefBodyList
" Echo And Execute: -- prefer strings! {{{2
" ================
@@ -799,8 +898,8 @@
" User Function Highlighting: {{{2
" (following Gautam Iyer's suggestion)
" ==========================
-syn match vimFunc "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\ze\s*(" 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
+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
@@ -1312,7 +1411,7 @@
hi def link vimDebuggreedy vimCommand
hi def link vimDefComment vim9Comment
hi def link vimDefKey vimCommand
- hi def link vimDefParam vimVar
+ hi def link vimDefParam vimVar
hi def link vimDelcommand vimCommand
hi def link vimDelcommandAttr vimUserCmdAttr
hi def link vimEcho vimCommand
@@ -1328,6 +1427,8 @@
hi def link vimFgBgAttrib vimHiAttrib
hi def link vimFuncEcho vimCommand
hi def link vimFor vimCommand
+ hi def link vimForInContinue vimContinue
+ hi def link vimForInContinueComment vimContinueComment
hi def link vimFTCmd vimCommand
hi def link vimFTOption vimSynType
hi def link vimFuncBang vimBang
@@ -1337,8 +1438,8 @@
hi def link vimFuncMod Special
hi def link vimFuncParam vimVar
hi def link vimFuncParamEquals vimOper
- hi def link vimFuncSID Special
- hi def link vimFuncVar Identifier
+ hi def link vimFuncScope vimVar
+ hi def link vimFuncSID vimNotation
hi def link vimGroupAdd vimSynOption
hi def link vimGroupName vimGroup
hi def link vimGroupRem vimSynOption
@@ -1367,6 +1468,7 @@
hi def link vim9KeymapLineComment vimKeymapLineComment
hi def link vimKeymapLineComment vimComment
hi def link vimKeymapTailComment vimComment
+ hi def link vimLambdaOperator vimOper
hi def link vimLet vimCommand
hi def link vimLetHereDoc vimString
hi def link vimLetHereDocStart Special
@@ -1400,7 +1502,11 @@
hi def link vimNumber Number
hi def link vimOperError Error
hi def link vimOper Operator
+ hi def link vimOperContinue vimContinue
+ hi def link vimOperContinueComment vimContinueComment
hi def link vimOption PreProc
+ hi def link vimOptionVar Identifier
+ hi def link vimVimVar Identifier
hi def link vimParenSep Delimiter
hi def link vimPatSepErr vimError
hi def link vimPatSepR vimPatSep
@@ -1483,7 +1589,7 @@
hi def link vimUserCmdError Error
hi def link vimUserCmdKey vimCommand
hi def link vimUserFunc Normal
- hi def link vimVar Identifier
+ hi def link vimVar Normal
hi def link vimWarn WarningMsg
hi def link vim9Abstract vimCommand
@@ -1492,6 +1598,7 @@
hi def link vim9Comment Comment
hi def link vim9CommentError vimError
hi def link vim9CommentTitle PreProc
+ hi def link vim9ConstructorDefParam vimVar
hi def link vim9Const vimCommand
hi def link vim9ContinueComment vimContinueComment
hi def link vim9Enum vimCommand
@@ -1499,9 +1606,15 @@
hi def link vim9Extends Keyword
hi def link vim9Final vimCommand
hi def link vim9For vimCommand
+ hi def link vim9ForInComment vim9Comment
hi def link vim9Implements Keyword
hi def link vim9AbstractDef vimCommand
hi def link vim9Interface vimCommand
+ hi def link vim9LambdaOperator vimOper
+ hi def link vim9LambdaOperatorComment vim9Comment
+ hi def link vim9LambdaParamsParen vimParenSep
+ hi def link vim9LhsRegister vimLetRegister
+ hi def link vim9LhsVariable vimVar
hi def link vim9LineComment vimComment
hi def link vim9MethodDef vimCommand
hi def link vim9MethodNameError vimFunctionError
diff --git a/runtime/syntax/testdir/dumps/vim9_block_00.dump b/runtime/syntax/testdir/dumps/vim9_block_00.dump
new file mode 100644
index 0000000..6f4122a
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_block_00.dump
@@ -0,0 +1,20 @@
+>v+0#af5f00255#ffffff0|i|m|9|s|c|r|i|p|t| +0#0000000&@64
+@75
+|#+0#0000e05&| |V|i|m|9| |b|l|o|c|k|s| +0#0000000&@61
+@75
+@75
+|{+0#e000e06&| +0#0000000&@73
+@2|v+0#af5f00255&|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|4+0#e000002&|2| +0#0000000&@60
+|}+0#e000e06&| +0#0000000&@73
+@75
+|{+0#e000e06&| +0#0000000&@73
+@2|{+0#e000e06&| +0#0000000&@71
+@4|{+0#e000e06&| +0#0000000&@69
+@6|{+0#e000e06&| +0#0000000&@67
+@8|v+0#af5f00255&|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|4+0#e000002&|2| +0#0000000&@54
+@6|}+0#e000e06&| +0#0000000&@67
+@6|v+0#af5f00255&|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|4+0#e000002&|2| +0#0000000&@56
+@4|}+0#e000e06&| +0#0000000&@69
+@4|v+0#af5f00255&|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|4+0#e000002&|2| +0#0000000&@58
+@2|}+0#e000e06&| +0#0000000&@71
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim9_block_01.dump b/runtime/syntax/testdir/dumps/vim9_block_01.dump
new file mode 100644
index 0000000..ab9c996
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_block_01.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|v+0#af5f00255&|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|4+0#e000002&|2| +0#0000000&@54
+@6|}+0#e000e06&| +0#0000000&@67
+@6|v+0#af5f00255&|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|4+0#e000002&|2| +0#0000000&@56
+@4|}+0#e000e06&| +0#0000000&@69
+@4|v+0#af5f00255&|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|4+0#e000002&|2| +0#0000000&@58
+@2>}+0#e000e06&| +0#0000000&@71
+@2|v+0#af5f00255&|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|4+0#e000002&|2| +0#0000000&@60
+|}+0#e000e06&| +0#0000000&@73
+@75
+|d+0#af5f00255&|e|f| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@65
+@2|{+0#e000e06&| +0#0000000&@71
+@4|v+0#af5f00255&|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|4+0#e000002&|2| +0#0000000&@58
+@4|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@62
+@2|}+0#e000e06&| +0#0000000&@71
+|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68
+@75
+|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|f|o@1|"| +0#0000000&||| |{+0#e000e06&| +0#0000000&@60
+@2|v+0#af5f00255&|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|4+0#e000002&|2| +0#0000000&@60
+|}+0#e000e06&| +0#0000000&@73
+@57|1|9|,|3| @9|9|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_block_02.dump b/runtime/syntax/testdir/dumps/vim9_block_02.dump
new file mode 100644
index 0000000..32a4881
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_block_02.dump
@@ -0,0 +1,20 @@
+|}+0#e000e06#ffffff0| +0#0000000&@73
+> @74
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|3@1|,|0|-|1| @7|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim9_comment_03.dump b/runtime/syntax/testdir/dumps/vim9_comment_03.dump
index 8a0fda8..d026a44 100644
--- a/runtime/syntax/testdir/dumps/vim9_comment_03.dump
+++ b/runtime/syntax/testdir/dumps/vim9_comment_03.dump
@@ -5,7 +5,7 @@
|#+0#0000e05&| +0#0000000&|I+0#e000e06&|s@1|u|e|:| +0#0000e05&|#|1|3|0|4|7| +0#0000000&@59
> @74
|i+0#af5f00255&|f| +0#0000000&|!+0#af5f00255&|e+0#00e0e07&|x|i|s|t|s|(+0#e000e06&|"+0#e000002&|:|D|i|f@1|O|r|i|g|"|)+0#e000e06&| +0#0000000&@51
-@2|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|D|i|f@1|O|r|i|g| |v+0#af5f00255&|e|r|t| +0#0000000&|n+0#af5f00255&|e|w| +0#0000000&||| |s+0#af5f00255&|e|t| +0#0000000&|b+0#e000e06&|t|=+0#af5f00255&|n+0#0000000&|o|f|i|l|e| ||| |r+0#af5f00255&| +0#0000000&|++0#af5f00255&@1|e|d|i|t| +0#0000000&|%+0#af5f00255&@1| +0#0000000&||| |0+0#e000002&|d+0#0000000&|_| ||| |d+0#af5f00255&|i|f@1|t|h|i|s| +0#0000000&
+@2|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|D|i|f@1|O|r|i|g| |v+0#af5f00255&|e|r|t| +0#0000000&|n+0#af5f00255&|e|w| +0#0000000&||| |s+0#af5f00255&|e|t| +0#0000000&|b+0#e000e06&|t|=+0#af5f00255&|n+0#0000000&|o|f|i|l|e| ||| |r+0#af5f00255&| +0#0000000&|++0#af5f00255&@1|e+0#00e0e07&|d|i|t| +0#0000000&|%+0#af5f00255&@1| +0#0000000&||| |0+0#e000002&|d+0#0000000&|_| ||| |d+0#af5f00255&|i|f@1|t|h|i|s| +0#0000000&
@18|\+0#e000e06&| +0#0000000&||| |w+0#af5f00255&|i|n|c|m|d| +0#0000000&|p+0#af5f00255&| +0#0000000&||| |d+0#af5f00255&|i|f@1|t|h|i|s| +0#0000000&@33
|e+0#af5f00255&|n|d|i|f| +0#0000000&@69
@75
diff --git a/runtime/syntax/testdir/dumps/vim9_def_variables_00.dump b/runtime/syntax/testdir/dumps/vim9_def_variables_00.dump
new file mode 100644
index 0000000..a871473
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_def_variables_00.dump
@@ -0,0 +1,20 @@
+>v+0#af5f00255#ffffff0|i|m|9|s|c|r|i|p|t| +0#0000000&@64
+@75
+|#+0#0000e05&| |V|i|m|9| |f|u|n|c|t|i|o|n| |v|a|r|i|a|b|l|e| |h|i|g|h|l|i|g|h|t|i|n|g| +0#0000000&@37
+@75
+|d+0#af5f00255&|e|f| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@65
+| +0#0000e05&@1|#| |D|e|c|l|a|r|a|t|i|o|n|s| +0#0000000&@58
+@75
+@2|v+0#af5f00255&|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58
+@75
+@2|b+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60
+@2|g+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60
+@2|t+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60
+@2|w+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60
+@75
+@2|v+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60
+@75
+@2|$+0#e000e06&|F|O@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+@75
+@2|v+0#af5f00255&|a|r| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim9_def_variables_01.dump b/runtime/syntax/testdir/dumps/vim9_def_variables_01.dump
new file mode 100644
index 0000000..e0a5b24
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_def_variables_01.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+@2|v+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60
+@75
+@2|$+0#e000e06&|F|O@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+@75
+@2>v+0#af5f00255&|a|r| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+@2|v+0#af5f00255&|a|r| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| @63
+@8|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+@2|v+0#af5f00255&|a|r| +0#0000000&|[|$+0#e000e06&|f|o@1|,+0#0000000&| |$+0#e000e06&|b|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49
+@2|v+0#af5f00255&|a|r| +0#0000000&|[|$+0#e000e06&|f|o@1|,+0#0000000&| @62
+@8|\+0#e000e06&| +0#0000000&|$+0#e000e06&|b|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@52
+@75
+@2|v+0#af5f00255&|a|r| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|;+0#0000000&| |b+0#00e0e07&|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@46
+@2|v+0#af5f00255&|a|r| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| @63
+@8|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r|;+0#0000000&| @60
+@8|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+@2|v+0#af5f00255&|a|r| +0#0000000&|[|$+0#e000e06&|f|o@1|,+0#0000000&| |$+0#e000e06&|b|a|r|;+0#0000000&| |$+0#e000e06&|b|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@43
+@2|v+0#af5f00255&|a|r| +0#0000000&|[|$+0#e000e06&|f|o@1|,+0#0000000&| @62
+@8|\+0#e000e06&| +0#0000000&|$+0#e000e06&|b|a|r|;+0#0000000&| @59
+@57|1|9|,|3| @10|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_def_variables_02.dump b/runtime/syntax/testdir/dumps/vim9_def_variables_02.dump
new file mode 100644
index 0000000..34d583e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_def_variables_02.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|\+0#e000e06&| +0#0000000&|$+0#e000e06&|b|a|r|;+0#0000000&| @59
+@8|\+0#e000e06&| +0#0000000&|$+0#e000e06&|b|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@52
+@75
+@2|v+0#af5f00255&|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |E|N|D| +0#0000000&@57
+|.+0#e000002&@2| +0#0000000&@71
+>E+0#e000e06&|N|D| +0#0000000&@71
+@2|v+0#af5f00255&|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D| +0#0000000&@52
+| +0#e000002&@1|.@2| +0#0000000&@69
+| +0#e000e06&@1|E|N|D| +0#0000000&@69
+@2|v+0#af5f00255&|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |E|N|D| +0#0000000&@52
+|.+0#e000002&@2| +0#0000000&@71
+|E+0#e000e06&|N|D| +0#0000000&@71
+@2|v+0#af5f00255&|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |e|v|a|l| |E|N|D| +0#0000000&@47
+| +0#e000002&@1|.@2| +0#0000000&@69
+| +0#e000e06&@1|E|N|D| +0#0000000&@69
+@2|v+0#af5f00255&|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |t|r|i|m| |E|N|D| +0#0000000&@47
+| +0#e000002&@3|.@2| +0#0000000&@67
+| +0#e000e06&@1|E|N|D| +0#0000000&@69
+@75
+@57|3|7|,|1| @9|1|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_def_variables_03.dump b/runtime/syntax/testdir/dumps/vim9_def_variables_03.dump
new file mode 100644
index 0000000..8accf95
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_def_variables_03.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+| +0#0000e05&@1|#| |A|s@1|i|g|n|m|e|n|t|s| +0#0000000&@59
+@75
+@1| +0#00e0e07&|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62
+@75
+@1| +0#00e0e07&>f|o@1|[+0#0000000&|0+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+@75
+@1| +0#00e0e07&|f|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+@1| +0#00e0e07&|f|o@1|[+0#0000000&|:|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58
+@1| +0#00e0e07&|f|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58
+@1| +0#00e0e07&|f|o@1|[+0#0000000&|:|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+@75
+@1| +0#00e0e07&|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+@1| +0#00e0e07&|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+@1| +0#00e0e07&|f|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+@1| +0#00e0e07&|f|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+@1| +0#00e0e07&|f|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+@1| +0#00e0e07&|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60
+@75
+@57|5@1|,|3| @9|2|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_def_variables_04.dump b/runtime/syntax/testdir/dumps/vim9_def_variables_04.dump
new file mode 100644
index 0000000..bb8f803
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_def_variables_04.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+@2|b+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60
+@2|g+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60
+@2|t+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60
+@2|w+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60
+> @74
+@2|b+0#00e0e07&|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+@2|g+0#00e0e07&|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+@2|t+0#00e0e07&|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+@2|w+0#00e0e07&|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+@75
+@2|b+0#00e0e07&|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+@2|g+0#00e0e07&|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+@2|t+0#00e0e07&|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+@2|w+0#00e0e07&|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+@75
+@2|b+0#00e0e07&|:|f|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+@2|g+0#00e0e07&|:|f|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+@2|t+0#00e0e07&|:|f|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+@57|7|3|,|0|-|1| @7|3|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_def_variables_05.dump b/runtime/syntax/testdir/dumps/vim9_def_variables_05.dump
new file mode 100644
index 0000000..f339756
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_def_variables_05.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@1|t+0#00e0e07&|:|f|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+@2|w+0#00e0e07&|:|f|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+@75
+@2|b+0#00e0e07&|:|f|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+@2|g+0#00e0e07&|:|f|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+@2>t+0#00e0e07&|:|f|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+@2|w+0#00e0e07&|:|f|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+@75
+@2|b+0#00e0e07&|:|f|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+@2|g+0#00e0e07&|:|f|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+@2|t+0#00e0e07&|:|f|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+@2|w+0#00e0e07&|:|f|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+@75
+@2|b+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58
+@2|g+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58
+@2|t+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58
+@2|w+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58
+@75
+@2|$+0#e000e06&|F|O@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+@57|9|1|,|3| @9|4|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_def_variables_06.dump b/runtime/syntax/testdir/dumps/vim9_def_variables_06.dump
new file mode 100644
index 0000000..23396ad
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_def_variables_06.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@1|$+0#e000e06&|F|O@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+@2|$+0#e000e06&|F|O@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+@75
+@2|@+0#e000e06&|f| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@63
+@2|@+0#e000e06&|f| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+> @74
+@2|&+0#00e0e07&|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+@75
+@2|&+0#00e0e07&|t|_|k|1| +0#0000000&|=+0#af5f00255&| +0#0000000&|"+0#e000002&|\+0#e000e06&|<|E|s|c|>|[+0#e000002&|2|3|4|;|"| +0#0000000&@51
+@75
+@2|&+0#00e0e07&|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+@75
+@2|&+0#00e0e07&|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60
+@2|&+0#00e0e07&|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60
+@75
+@2|&+0#00e0e07&|l|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+@75
+@2|&+0#00e0e07&|l|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+@2|&+0#00e0e07&|l|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58
+@57|1|0|9|,|0|-|1| @6|5|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_def_variables_07.dump b/runtime/syntax/testdir/dumps/vim9_def_variables_07.dump
new file mode 100644
index 0000000..119cc25
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_def_variables_07.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@1|&+0#00e0e07&|l|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58
+@2|&+0#00e0e07&|l|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58
+@75
+@2|&+0#00e0e07&|g|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+@75
+@2>&+0#00e0e07&|g|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+@2|&+0#00e0e07&|g|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58
+@2|&+0#00e0e07&|g|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58
+@75
+@2|[+0#e000e06&|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#e000e06&| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|[+0#e000e06&|f+0#00e0e07&|o@1|,+0#0000000&| @67
+@8|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r|]+0#e000e06&| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+@2|[+0#e000e06&|v+0#00e0e07&|:|f|o@1|,+0#0000000&| |v+0#00e0e07&|:|b|a|r|]+0#e000e06&| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+@2|[+0#e000e06&|v+0#00e0e07&|:|f|o@1|,+0#0000000&| @65
+@8|\+0#e000e06&| +0#0000000&|v+0#00e0e07&|:|b|a|r|]+0#e000e06&| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+@2|[+0#e000e06&|&+0#00e0e07&|f|o@1|,+0#0000000&| |&+0#00e0e07&|b|a|r|]+0#e000e06&| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+@2|[+0#e000e06&|&+0#00e0e07&|f|o@1|,+0#0000000&| @66
+@8|\+0#e000e06&| +0#0000000&|&+0#00e0e07&|b|a|r|]+0#e000e06&| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@52
+@2|[+0#e000e06&|$|f|o@1|,+0#0000000&| |$+0#e000e06&|b|a|r|]| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+@57|1|2|7|,|3| @8|6@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_def_variables_08.dump b/runtime/syntax/testdir/dumps/vim9_def_variables_08.dump
new file mode 100644
index 0000000..686fa47
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_def_variables_08.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@1|[+0#e000e06&|$|f|o@1|,+0#0000000&| |$+0#e000e06&|b|a|r|]| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+@2|[+0#e000e06&|$|f|o@1|,+0#0000000&| @66
+@8|\+0#e000e06&| +0#0000000&@1|$+0#e000e06&|b|a|r|]| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+@2|[+0#e000e06&|@|a|,+0#0000000&| |@+0#e000e06&|b|]| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+@2|[+0#e000e06&|@|a|,+0#0000000&| @68
+@8>\+0#e000e06&| +0#0000000&@1|@+0#e000e06&|a|]| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+@75
+@2|[+0#e000e06&|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#e000e06&| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+@2|[+0#e000e06&|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#e000e06&| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+@2|[+0#e000e06&|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#e000e06&| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+@2|[+0#e000e06&|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#e000e06&| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+@2|[+0#e000e06&|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#e000e06&| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+@2|[+0#e000e06&|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#e000e06&| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+@75
+@2|[+0#e000e06&|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|;+0#0000000&| |b+0#00e0e07&|a|z|]+0#e000e06&| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@50
+@2|[+0#e000e06&|f+0#00e0e07&|o@1|,+0#0000000&| @67
+@8|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r|;+0#0000000&| @60
+@8|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|z|]+0#e000e06&| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+@2|[+0#e000e06&|v+0#00e0e07&|:|f|o@1|,+0#0000000&| |v+0#00e0e07&|:|b|a|r|;+0#0000000&| |v+0#00e0e07&|:|b|a|z|]+0#e000e06&| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@44
+@57|1|4|5|,|2|-|9| @6|7|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_def_variables_09.dump b/runtime/syntax/testdir/dumps/vim9_def_variables_09.dump
new file mode 100644
index 0000000..0c5a48d
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_def_variables_09.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@1|[+0#e000e06&|v+0#00e0e07&|:|f|o@1|,+0#0000000&| |v+0#00e0e07&|:|b|a|r|;+0#0000000&| |v+0#00e0e07&|:|b|a|z|]+0#e000e06&| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@44
+@2|[+0#e000e06&|v+0#00e0e07&|:|f|o@1|,+0#0000000&| @65
+@8|\+0#e000e06&| +0#0000000&|v+0#00e0e07&|:|b|a|r|;+0#0000000&| @58
+@8|\+0#e000e06&| +0#0000000&|v+0#00e0e07&|:|b|a|z|]+0#e000e06&| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+@2|[+0#e000e06&|$|f|o@1|,+0#0000000&| |$+0#e000e06&|b|a|r|;+0#0000000&| |$+0#e000e06&|b|a|z|]| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@47
+@2>[+0#e000e06&|$|f|o@1|,+0#0000000&| @66
+@8|\+0#e000e06&| +0#0000000&|$+0#e000e06&|b|a|r|;+0#0000000&| @59
+@8|\+0#e000e06&| +0#0000000&|$+0#e000e06&|b|a|z|]| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@52
+@2|[+0#e000e06&|&+0#00e0e07&|f|o@1|,+0#0000000&| |&+0#00e0e07&|b|a|r|;+0#0000000&| |&+0#00e0e07&|b|a|z|]+0#e000e06&| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@47
+@2|[+0#e000e06&|&+0#00e0e07&|f|o@1|,+0#0000000&| @66
+@8|\+0#e000e06&| +0#0000000&|&+0#00e0e07&|b|a|r|;+0#0000000&| @59
+@8|\+0#e000e06&| +0#0000000&|&+0#00e0e07&|b|a|z|]+0#e000e06&| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@52
+@2|[+0#e000e06&|@|a|,+0#0000000&| |@+0#e000e06&|b|;+0#0000000&| |@+0#e000e06&|c|]| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+@2|[+0#e000e06&|@|a|,+0#0000000&| @68
+@8|\+0#e000e06&| +0#0000000&|@+0#e000e06&|b|;+0#0000000&| @61
+@8|\+0#e000e06&| +0#0000000&|@+0#e000e06&|c|]| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+@75
+@1| +0#00e0e07&|f|o@1| +0#0000000&|=+0#e000e06&|<@1| |E|N|D| +0#0000000&@61
+|.+0#e000002&@2| +0#0000000&@71
+@57|1|6|3|,|3| @8|8|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_def_variables_10.dump b/runtime/syntax/testdir/dumps/vim9_def_variables_10.dump
new file mode 100644
index 0000000..9cba855
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_def_variables_10.dump
@@ -0,0 +1,20 @@
+|.+0#e000002#ffffff0@2| +0#0000000&@71
+|E+0#e000e06&|N|D| +0#0000000&@71
+@1| +0#00e0e07&|f|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D| +0#0000000&@56
+| +0#e000002&@1|.@2| +0#0000000&@69
+| +0#e000e06&@1|E|N|D| +0#0000000&@69
+@1| +0#00e0e07&>f|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |E|N|D| +0#0000000&@56
+|.+0#e000002&@2| +0#0000000&@71
+|E+0#e000e06&|N|D| +0#0000000&@71
+@1| +0#00e0e07&|f|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |e|v|a|l| |E|N|D| +0#0000000&@51
+| +0#e000002&@1|.@2| +0#0000000&@69
+| +0#e000e06&@1|E|N|D| +0#0000000&@69
+@1| +0#00e0e07&|f|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |t|r|i|m| |E|N|D| +0#0000000&@51
+| +0#e000002&@3|.@2| +0#0000000&@67
+| +0#e000e06&@1|E|N|D| +0#0000000&@69
+@75
+| +0#0000e05&@1|#| |:|f|o|r| +0#0000000&@66
+@75
+@2|f+0#af5f00255&|o|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+@2|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@66
+@57|1|8|1|,|3| @8|9|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_def_variables_11.dump b/runtime/syntax/testdir/dumps/vim9_def_variables_11.dump
new file mode 100644
index 0000000..9948671
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_def_variables_11.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@1|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@66
+@75
+@2|f+0#af5f00255&|o|r| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |i+0#af5f00255&|n| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@50
+@2|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@66
+|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68
+> @74
+@75
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|9@1|,|0|-|1| @6|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_11.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_11.dump
index 8558f35..d2b6bdf 100644
--- a/runtime/syntax/testdir/dumps/vim9_ex_commands_11.dump
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_11.dump
@@ -10,7 +10,7 @@
|:|f+0#af5f00255&|o|l|d@1|o|c|l|o|s|e|d| +0#0000000&@61
|:|f+0#af5f00255&|o|l|d@1|o@1|p|e|n| +0#0000000&@63
|:|f+0#af5f00255&|o|l|d|o|p|e|n| +0#0000000&@65
-|:|f+0#af5f00255&|o|r| +0#0000000&@70
+|:|f+0#af5f00255&|o|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&||| |e+0#af5f00255&|n|d|f|o|r| +0#0000000&@50
|:|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&@65
|:|g+0#af5f00255&|l|o|b|a|l|/|.+0#0000000&@2|/+0#af5f00255&| +0#0000000&@62
|:|g+0#af5f00255&|o|t|o| +0#0000000&@69
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_43.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_43.dump
index f59746e..d36e35b 100644
--- a/runtime/syntax/testdir/dumps/vim9_ex_commands_43.dump
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_43.dump
@@ -16,5 +16,5 @@
|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|o|l|d@1|o|c|l|o|s|e|d| +0#0000000&@54
|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|o|l|d@1|o@1|p|e|n| +0#0000000&@56
|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|o|l|d|o|p|e|n| +0#0000000&@58
-|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|o|r| +0#0000000&@63
+|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|o|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&||| |e+0#af5f00255&|n|d|f|o|r| +0#0000000&@43
@57|7@1|5|,|1| @8|6|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_44.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_44.dump
index 6d476cf..95e9cec 100644
--- a/runtime/syntax/testdir/dumps/vim9_ex_commands_44.dump
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_44.dump
@@ -1,4 +1,4 @@
-|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|o|r| +0#0000000&@63
+|F+0&#ffffff0|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|o|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&||| |e+0#af5f00255&|n|d|f|o|r| +0#0000000&@43
|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&@58
|F|o@1|(+0#e000e06&|)| +0#0000000&||| |g+0#af5f00255&|l|o|b|a|l|/|.+0#0000000&@2|/+0#af5f00255&| +0#0000000&@55
|F|o@1|(+0#e000e06&|)| +0#0000000&||| |g+0#af5f00255&|o|t|o| +0#0000000&@62
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_for_00.dump b/runtime/syntax/testdir/dumps/vim9_ex_for_00.dump
new file mode 100644
index 0000000..3d1d628
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_for_00.dump
@@ -0,0 +1,20 @@
+>v+0#af5f00255#ffffff0|i|m|9|s|c|r|i|p|t| +0#0000000&@64
+@75
+|#+0#0000e05&| |V|i|m|9| |:|f|o|r| |c|o|m@1|a|n|d| +0#0000000&@55
+@75
+@75
+|#+0#0000e05&| |:|f|o|r| |{|v|a|r|}| |i|n| |{|o|b|j|e|c|t|}| +0#0000000&@50
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|[+0#e000e06&|4+0#e000002&|2|]+0#e000e06&| +0#0000000&@59
+@75
+|f+0#af5f00255&|o|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+@2|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@64
+|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68
+@75
+|f+0#af5f00255&|o|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@49
+@2|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@64
+|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68
+@75
+|f+0#af5f00255&|o|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|i+0#af5f00255&|n| +0#0000000&@64
+@6|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@59
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_for_01.dump b/runtime/syntax/testdir/dumps/vim9_ex_for_01.dump
new file mode 100644
index 0000000..600b850
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_for_01.dump
@@ -0,0 +1,20 @@
+|f+0#af5f00255#ffffff0|o|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@49
+@2|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@64
+|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68
+@75
+|f+0#af5f00255&|o|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|i+0#af5f00255&|n| +0#0000000&@64
+@6>#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@59
+@6|e+0#00e0e07&|x|p|r| +0#0000000&@64
+@2|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@64
+|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68
+@75
+|f+0#af5f00255&|o|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&||| |e+0#af5f00255&|n|d|f|o|r| +0#0000000&@39
+@75
+|f+0#af5f00255&|o|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|[+0#e000e06&|4+0#e000002&|2|]+0#e000e06&| +0#0000000&@59
+@2|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@64
+|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68
+@75
+|f+0#af5f00255&|o|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|[+0#e000e06&|4+0#e000002&|2|]+0#e000e06&| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&||| |e+0#af5f00255&|n|d|f|o|r| +0#0000000&@39
+@75
+|f+0#af5f00255&|o|r| +0#0000000&|f+0#00e0e07&|o@1|:+0#0000000&| |n+0#00e0e07&|u|m|b|e|r| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|[+0#e000e06&|4+0#e000002&|2|]+0#e000e06&| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&||| |e+0#af5f00255&|n|d|f|o|r| +0#0000000&@31
+@57|1|9|,|7| @9|2|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_for_02.dump b/runtime/syntax/testdir/dumps/vim9_ex_for_02.dump
new file mode 100644
index 0000000..5560a5b
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_for_02.dump
@@ -0,0 +1,20 @@
+|f+0#af5f00255#ffffff0|o|r| +0#0000000&|f+0#00e0e07&|o@1|:+0#0000000&| |n+0#00e0e07&|u|m|b|e|r| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|[+0#e000e06&|4+0#e000002&|2|]+0#e000e06&| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&||| |e+0#af5f00255&|n|d|f|o|r| +0#0000000&@31
+@75
+|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|f|o@1|"| +0#0000000&||| |f+0#af5f00255&|o|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@46
+@2|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@64
+|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68
+> @74
+@75
+|#+0#0000e05&| |:|f|o|r| |[|{|v|a|r|1|}|,| |{|v|a|r|2|}|,| |.@2|]| |i|n| |{|l|i|s|t|l|i|s|t|}| +0#0000000&@32
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|e+0#00e0e07&|x|p|r|2| +0#0000000&|=+0#af5f00255&| +0#0000000&|[+0#e000e06&@1|4+0#e000002&|2|,+0#0000000&| |8+0#e000002&|3|]+0#e000e06&@1| +0#0000000&@52
+@75
+|f+0#af5f00255&|o|r| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |i+0#af5f00255&|n| +0#0000000&|e+0#00e0e07&|x|p|r|2| +0#0000000&@51
+@2|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@60
+|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68
+@75
+|f+0#af5f00255&|o|r| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |i+0#af5f00255&|n| +0#0000000&|e+0#00e0e07&|x|p|r|2| +0#0000000&|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@41
+@2|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@60
+|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68
+@75
+@57|3|7|,|0|-|1| @7|6|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_for_03.dump b/runtime/syntax/testdir/dumps/vim9_ex_for_03.dump
new file mode 100644
index 0000000..8f16b2b
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_for_03.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|f+0#af5f00255&|o|r| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |i+0#af5f00255&|n| +0#0000000&@57
+@6|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@59
+@6|e+0#00e0e07&|x|p|r|2| +0#0000000&@63
+@2|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@60
+>e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68
+@75
+|f+0#af5f00255&|o|r| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |i+0#af5f00255&|n| +0#0000000&|e+0#00e0e07&|x|p|r|2| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&||| |e+0#af5f00255&|n|d|f|o|r| +0#0000000&@27
+@75
+|f+0#af5f00255&|o|r| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |i+0#af5f00255&|n| +0#0000000&|[+0#e000e06&@1|4+0#e000002&|2|,+0#0000000&| |8+0#e000002&|3|]+0#e000e06&@1| +0#0000000&@46
+@2|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@60
+|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68
+@75
+|f+0#af5f00255&|o|r| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |i+0#af5f00255&|n| +0#0000000&|[+0#e000e06&@1|4+0#e000002&|2|,+0#0000000&| |8+0#e000002&|3|]+0#e000e06&@1| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&||| |e+0#af5f00255&|n|d|f|o|r| +0#0000000&@22
+@75
+|f+0#af5f00255&|o|r| +0#0000000&|[|f+0#00e0e07&|o@1|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |b+0#00e0e07&|a|r|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|]+0#0000000&| |i+0#af5f00255&|n| +0#0000000&|e+0#00e0e07&|x|p|r|2| +0#0000000&@35
+@2|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@60
+|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68
+@75
+@57|5@1|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_type_00.dump b/runtime/syntax/testdir/dumps/vim9_ex_type_00.dump
index 5c896c1..b52cb37 100644
--- a/runtime/syntax/testdir/dumps/vim9_ex_type_00.dump
+++ b/runtime/syntax/testdir/dumps/vim9_ex_type_00.dump
@@ -7,7 +7,7 @@
@75
|e+0#af5f00255&|x|p|o|r|t| +0#0000000&|t+0#af5f00255&|y|p|e| +0#0000000&|Q|u|x| |=+0#af5f00255&| +0#0000000&|B|a|z| @53
@75
-|t+0#af5f00255&|y|p|e| +0#0000000&|f+0#ffffff16#ff404010|o@1| +0#0000000#ffffff0|=+0#af5f00255&| +0#0000000&|s|t|r|i|n|g| @57
+|t+0#af5f00255&|y|p|e| +0#0000000&|f+0#ffffff16#ff404010|o@1| +0#0000000#ffffff0|=+0#af5f00255&| +0#0000000&|s+0#00e0003&|t|r|i|n|g| +0#0000000&@57
@75
|~+0#4040ff13&| @73
|~| @73
diff --git a/runtime/syntax/testdir/dumps/vim9_expr_01.dump b/runtime/syntax/testdir/dumps/vim9_expr_01.dump
index 3e822fd..2eafe8c 100644
--- a/runtime/syntax/testdir/dumps/vim9_expr_01.dump
+++ b/runtime/syntax/testdir/dumps/vim9_expr_01.dump
@@ -5,9 +5,9 @@
@16|:+0#af5f00255&| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&@52
>e+0#af5f00255&|c|h|o| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|1+0#e000002&| +0#0000000&|?+0#af5f00255&| +0#0000000&@58
@8|"+0#e000002&|t|o|p|"| +0#0000000&|:+0#af5f00255&| +0#0000000&@59
-@8|l|n|u|m| |=+0#af5f00255&@1| +0#0000000&|1+0#e000002&|0@2| +0#0000000&|?+0#af5f00255&| +0#0000000&@52
+@8|l+0#00e0e07&|n|u|m| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|1+0#e000002&|0@2| +0#0000000&|?+0#af5f00255&| +0#0000000&@52
@16|"+0#e000002&|l|a|s|t|"| +0#0000000&|:+0#af5f00255&| +0#0000000&@50
-@16|l|n|u|m| @54
+@16|l+0#00e0e07&|n|u|m| +0#0000000&@54
@75
|e+0#af5f00255&|c|h|o| +0#0000000&|t+0#e000002&|r|u|e| +0#0000000&|?+0#af5f00255&| +0#0000000&|t+0#e000002&|r|u|e| +0#0000000&|:+0#af5f00255&| +0#0000000&|f+0#e000002&|a|l|s|e| +0#0000000&@50
|e+0#af5f00255&|c|h|o| +0#0000000&|1+0#e000002&| +0#0000000&|?+0#af5f00255&| +0#0000000&|1+0#e000002&| +0#0000000&|:+0#af5f00255&| +0#0000000&|0+0#e000002&| +0#0000000&@60
diff --git a/runtime/syntax/testdir/dumps/vim9_expr_05.dump b/runtime/syntax/testdir/dumps/vim9_expr_05.dump
index 925ce68..b2fea21 100644
--- a/runtime/syntax/testdir/dumps/vim9_expr_05.dump
+++ b/runtime/syntax/testdir/dumps/vim9_expr_05.dump
@@ -11,10 +11,10 @@
|#+0#0000e05&| |I|s@1|u|e| |#|1|6|2@1|7| |(|V|i|m|s|c|r|i|p|t| |t|e|r|n|a|r|y| |e|x|p|r|e|s@1|i|o|n| |h|i|g|h|l|i|g|h|t|i|n|g|)| +0#0000000&@16
@75
|v+0#af5f00255&|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|'+0#e000002&|f|o@1|'| +0#0000000&@24|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@25
-|v+0#af5f00255&|a|r| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|f|o@1| |=+0#af5f00255&@1| +0#0000000&|'+0#e000002&|f|o@1|'| +0#0000000&|?+0#af5f00255&| +0#0000000&|'+0#e000002&|b|a|r|'| +0#0000000&|:+0#af5f00255&| +0#0000000&|'+0#e000002&|b|a|z|'| +0#0000000&@36
-|v+0#af5f00255&|a|r| +0#0000000&|b+0#00e0e07&|a|z| +0#0000000&|=+0#af5f00255&| +0#0000000&|f|o@1| |=+0#af5f00255&@1| +0#0000000&|'+0#e000002&|f|o@1|'| +0#0000000&@52
+|v+0#af5f00255&|a|r| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|'+0#e000002&|f|o@1|'| +0#0000000&|?+0#af5f00255&| +0#0000000&|'+0#e000002&|b|a|r|'| +0#0000000&|:+0#af5f00255&| +0#0000000&|'+0#e000002&|b|a|z|'| +0#0000000&@36
+|v+0#af5f00255&|a|r| +0#0000000&|b+0#00e0e07&|a|z| +0#0000000&|=+0#af5f00255&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|'+0#e000002&|f|o@1|'| +0#0000000&@52
@12|\+0#e000e06&| +0#0000000&|?+0#af5f00255&| +0#0000000&|'+0#e000002&|b|a|z|'| +0#0000000&@53
@12|\+0#e000e06&| +0#0000000&|:+0#af5f00255&| +0#0000000&|'+0#e000002&|b|a|r|'| +0#0000000&@53
-|v+0#af5f00255&|a|r| +0#0000000&|q+0#00e0e07&|u|x| +0#0000000&|=+0#af5f00255&| +0#0000000&|f|o@1| |=+0#af5f00255&@1| +0#0000000&|'+0#e000002&|f|o@1|'| +0#0000000&@52
+|v+0#af5f00255&|a|r| +0#0000000&|q+0#00e0e07&|u|x| +0#0000000&|=+0#af5f00255&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|'+0#e000002&|f|o@1|'| +0#0000000&@52
@12|?+0#af5f00255&| +0#0000000&|'+0#e000002&|q|u|x|'| +0#0000000&@20|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@25
@57|9|1|,|7| @9|9|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_lambda_00.dump b/runtime/syntax/testdir/dumps/vim9_lambda_00.dump
new file mode 100644
index 0000000..6ae5c34
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_lambda_00.dump
@@ -0,0 +1,20 @@
+>v+0#af5f00255#ffffff0|i|m|9|s|c|r|i|p|t| +0#0000000&@64
+@75
+|#+0#0000e05&| |V|i|m| |9| |l|a|m|b|d|a| |e|x|p|r|e|s@1|i|o|n|s| +0#0000000&@48
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|F+0#00e0e07&|o@1|:+0#0000000&| |f+0#00e0003&|u|n|c| +0#0000000&@61
+|v+0#af5f00255&|a|r| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|0+0#e000002&| +0#0000000&@62
+@75
+|#+0#0000e05&| |w|i|t|h|o|u|t| |r|e|t|u|r|n| |t|y|p|e| +0#0000000&@53
+|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|)| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58
+|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|_+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+@75
+|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|.+0#0000000&@2|y+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|_+0#00e0e07&|,+0#0000000&| |.@2|y+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |.@2|y+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+@75
+|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |y+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+@75
+|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|_+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim9_lambda_01.dump b/runtime/syntax/testdir/dumps/vim9_lambda_01.dump
new file mode 100644
index 0000000..00b1a33
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_lambda_01.dump
@@ -0,0 +1,20 @@
+|F+0#00e0e07#ffffff0|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|_+0#00e0e07&|,+0#0000000&| |.@2|y+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |.@2|y+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+@75
+|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |y+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+@75
+>F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|_+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49
+|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49
+@75
+|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|.+0#0000000&@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@40
+|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|_+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |.@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@29
+|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |.@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@29
+@75
+|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |y+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@38
+@75
+|#+0#0000e05&| |w|i|t|h| |r|e|t|u|r|n| |t|y|p|e| +0#0000000&@56
+|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@50
+|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|_+0#00e0e07&|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49
+|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49
+@75
+@57|1|9|,|1| @9|1|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_lambda_02.dump b/runtime/syntax/testdir/dumps/vim9_lambda_02.dump
new file mode 100644
index 0000000..5848c5c
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_lambda_02.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|.+0#0000000&@2|y+0#00e0e07&|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@46
+|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|_+0#00e0e07&|,+0#0000000&| |.@2|y+0#00e0e07&|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@43
+|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |.@2|y+0#00e0e07&|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@43
+@75
+>F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |y+0#00e0e07&|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@46
+@75
+|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|_+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@41
+|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@41
+@75
+|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|.+0#0000000&@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@32
+|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|_+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |.@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@21
+|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |.@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@21
+@75
+|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |y+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@30
+@75
+@75
+|#+0#0000e05&| |p|o|s|t| |o|p|e|r|a|t|o|r| |c|o|m@1|e|n|t|s| +0#0000000&@50
+@75
+@57|3|7|,|1| @9|3|1|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_lambda_03.dump b/runtime/syntax/testdir/dumps/vim9_lambda_03.dump
new file mode 100644
index 0000000..9191fe5
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_lambda_03.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|)| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53
+@2|e+0#00e0e07&|x|p|r| +0#0000000&@68
+|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|)| +0#0000000&|=+0#af5f00255&|>| +0#0000000&@63
+@2|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@63
+@2>e+0#00e0e07&|x|p|r| +0#0000000&@68
+|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|)| +0#0000000&|=+0#af5f00255&|>| +0#0000000&@63
+@75
+@2|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@63
+@75
+@2|e+0#00e0e07&|x|p|r| +0#0000000&@68
+@75
+@75
+|#+0#0000e05&| |l|i|n|e| |c|o|n|t|i|n|u|a|t|i|o|n|s| +0#0000000&@54
+@75
+|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g|,+0#0000000&| @57
+@6|\+0#e000e06&| +0#0000000&|y+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| @56
+@6|\+0#e000e06&| +0#0000000&|z+0#00e0e07&|:+0#0000000&| |b+0#00e0003&|o@1|l|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@42
+|#+0#0000e05&| |F+0#0000001#ffff4012|I|X|M|E| +0#0000000#ffffff0@67
+@57|5@1|,|3| @9|5|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_lambda_04.dump b/runtime/syntax/testdir/dumps/vim9_lambda_04.dump
new file mode 100644
index 0000000..d0bf413
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_lambda_04.dump
@@ -0,0 +1,20 @@
+|#+0#0000e05#ffffff0| |F+0#0000001#ffff4012|I|X|M|E| +0#0000000#ffffff0@67
+|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g|,+0#0000000&| @57
+@6|\+0#e000e06&| +0#0000000&|y+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| @56
+@6|\+0#e000e06&| +0#0000000&|z+0#00e0e07&|:+0#0000000&| |b+0#00e0003&|o@1|l|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@50
+@6|\| |=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+> @74
+@75
+|#+0#0000e05&| |f|u|n|c|r|e|f| |c|a|l@1| +0#0000000&@60
+@75
+|e+0#af5f00255&|c|h|o| +0#0000000&|(+0#e000e06&@1|)| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|4+0#e000002&|2|)+0#e000e06&|(|)| +0#0000000&@57
+|e+0#af5f00255&|c|h|o| +0#0000000&|(+0#e000e06&@1|x+0#00e0e07&|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|4+0#e000002&|2|)+0#e000e06&|(|"+0#e000002&|f|o@1|"|)+0#e000e06&| +0#0000000&@35
+@75
+@75
+|#+0#0000e05&| |:|h|e|l|p| |v|i|m|9|-|l|a|m|b|d|a| +0#0000000&@55
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|l+0#00e0e07&|i|s|t| +0#0000000&|=+0#af5f00255&| +0#0000000&|[+0#e000e06&|1+0#e000002&|,+0#0000000&| |2+0#e000002&|,+0#0000000&| |3+0#e000002&|]+0#e000e06&| +0#0000000&@54
+|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|i|l|t|e|r|(+0#e000e06&|l+0#00e0e07&|i|s|t|,+0#0000000&| |(+0#e000e06&|k+0#00e0e07&|,+0#0000000&| |v+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&@47
+@16|v+0#00e0e07&| +0#0000000&|>+0#af5f00255&| +0#0000000&|0+0#e000002&|)+0#e000e06&| +0#0000000&@52
+|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|i|l|t|e|r|(+0#e000e06&|l+0#00e0e07&|i|s|t|,+0#0000000&| |(+0#e000e06&|k+0#00e0e07&|,+0#0000000&| @53
+@57|7|3|,|0|-|1| @7|6|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_lambda_05.dump b/runtime/syntax/testdir/dumps/vim9_lambda_05.dump
new file mode 100644
index 0000000..bfdea5e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_lambda_05.dump
@@ -0,0 +1,20 @@
+|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|f+0#00e0e07&|i|l|t|e|r|(+0#e000e06&|l+0#00e0e07&|i|s|t|,+0#0000000&| |(+0#e000e06&|k+0#00e0e07&|,+0#0000000&| @53
+@6|\+0#e000e06&| +0#0000000&|v+0#00e0e07&|)+0#e000e06&| +0#0000000&@64
+| +0#e000e06&@5|\| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|v+0#00e0e07&| +0#0000000&|>+0#af5f00255&| +0#0000000&|0+0#e000002&|)+0#e000e06&| +0#0000000&@57
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|C+0#00e0e07&|a|l@1|b|a|c|k| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|.+0#0000000&@2|_+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|'+0#e000002&|a|n|y|t|h|i|n|g|'| +0#0000000&@39
+>e+0#af5f00255&|c|h|o| +0#0000000&|C|a|l@1|b|a|c|k|(+0#e000e06&|1+0#e000002&|,+0#0000000&| |2+0#e000002&|,+0#0000000&| |3+0#e000002&|)+0#e000e06&| +0#0000000&@1|#| |d+0#00e0e07&|i|s|p|l|a|y|s| +0#0000000&|"+0#e000002&|a|n|y|t|h|i|n|g|"| +0#0000000&@29
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|L+0#00e0e07&|a|m|b|d|a| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|a+0#00e0e07&|r|g|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|{+0#e000e06&| +0#0000000&@51
+@8|g+0#00e0e07&|:|w|a|s|_|c|a|l@1|e|d| +0#0000000&|=+0#af5f00255&| +0#0000000&|'+0#e000002&|y|e|s|'| +0#0000000&@46
+@8|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@4|}+0#e000e06&| +0#0000000&@69
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|c+0#00e0e07&|o|u|n|t| +0#0000000&|=+0#af5f00255&| +0#0000000&|0+0#e000002&| +0#0000000&@61
+|v+0#af5f00255&|a|r| +0#0000000&|t+0#00e0e07&|i|m|e|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|t+0#00e0e07&|i|m|e|r|_|s|t|a|r|t|(+0#e000e06&|5+0#e000002&|0@1|,+0#0000000&| |(+0#e000e06&|_+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|{+0#e000e06&| +0#0000000&@37
+@8| +0#00e0e07&|c|o|u|n|t| +0#0000000&|++0#af5f00255&|=| +0#0000000&|1+0#e000002&| +0#0000000&@55
+@9|e+0#af5f00255&|c|h|o|m| +0#0000000&|'+0#e000002&|H|a|n|d|l|e|r| |c|a|l@1|e|d| |'| +0#0000000&|.+0#af5f00255&@1| +0#0000000&|c+0#00e0e07&|o|u|n|t| +0#0000000&@33
+@5|}+0#e000e06&|,+0#0000000&| |{+0#e000e06&|r+0#00e0e07&|e|p|e|a|t|:+0#0000000&| |3+0#e000002&|}+0#e000e06&|)| +0#0000000&@54
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|d+0#00e0e07&|i|c|t| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|}| +0#0000000&@61
+@57|9|1|,|1| @9|8|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_lambda_06.dump b/runtime/syntax/testdir/dumps/vim9_lambda_06.dump
new file mode 100644
index 0000000..da23ee2
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_lambda_06.dump
@@ -0,0 +1,20 @@
+|v+0#af5f00255#ffffff0|a|r| +0#0000000&|d+0#00e0e07&|i|c|t| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|}| +0#0000000&@61
+|v+0#af5f00255&|a|r| +0#0000000&|d+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|m+0#00e0e07&|a|p|n|e|w|(+0#e000e06&|d+0#00e0e07&|i|c|t|,+0#0000000&| |(+0#e000e06&|k+0#00e0e07&|,+0#0000000&| |v+0#00e0e07&|)+0#e000e06&|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|{+0#e000e06&| +0#0000000&@34
+@5|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|'+0#e000002&|v|a|l|u|e|'| +0#0000000&@55
+@3|}+0#e000e06&|)| +0#0000000&@69
+@75
+> @74
+|#+0#0000e05&| |I|s@1|u|e| |#|1|5|9|7|0| |(|v|i|m|9|:| |R|e|s|t|o|r|e| |a|n|d| |e|x|t|e|n|d| |t|h|e| |r|e|c|o|g|n|i|t|i|o|n| |o|f| |E|n|u|m| |b|o|d|y| |i|t|e|m|s
+|)| +0#0000000&@73
+@75
+|d+0#af5f00255&|e|f| +0#0000000&|O|p|(+0#e000e06&|)|:+0#0000000&| |f+0#00e0003&|u|n|c|(|f|u|n|c|(|n|u|m|b|e|r|,+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)|:+0#0000000&| |f+0#00e0003&|u|n|c|(|n|u|m|b|e|r|,+0#0000000&| |D|i|g|i|t|)+0#00e0003&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@1
+@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(+0#e000e06&|F+0#00e0e07&|:+0#0000000&| |f+0#00e0003&|u|n|c|(|n|u|m|b|e|r|,+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&@27
+@8|(+0#e000e06&|x+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |y+0#00e0e07&|:+0#0000000&| |D|i|g|i|t|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|F|(+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |y+0#00e0e07&|.+0#af5f00255&|v+0#00e0e07&|a|l|u|e|)+0#e000e06&| +0#0000000&@20
+|e+0#af5f00255&|n|d@1|e|f| +0#0000000&|#+0#0000e05&@22| |^| |v|i|m|C|o|m@1|a|n|d|?| +0#0000000&@30
+@75
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|0|9|,|0|-|1| @6|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim9_legacy_header_00.dump b/runtime/syntax/testdir/dumps/vim9_legacy_header_00.dump
index a5f1802..f9896e2 100644
--- a/runtime/syntax/testdir/dumps/vim9_legacy_header_00.dump
+++ b/runtime/syntax/testdir/dumps/vim9_legacy_header_00.dump
@@ -2,7 +2,7 @@
@75
|i+0#af5f00255&|f| +0#0000000&|!+0#af5f00255&|h+0#00e0e07&|a|s|(+0#e000e06&|'+0#e000002&|v|i|m|9|s|c|r|i|p|t|'|)+0#e000e06&| +0#0000000&@53
@2|#| |4+0#e000002&|2| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@58
-@2|s+0#af5f00255&|o|u|r|c|e| +0#0000000&|f|o@1|.+0#af5f00255&|v|i|m| +0#0000000&@58
+@2|s+0#af5f00255&|o|u|r|c|e| +0#00e0e07&|f|o@1|.+0#af5f00255&|v+0#00e0e07&|i|m| +0#0000000&@58
@2|f+0#af5f00255&|i|n|i|s|h| +0#0000000&@66
|e+0#af5f00255&|n|d|i|f| +0#0000000&@69
@75
diff --git a/runtime/syntax/testdir/dumps/vim9_super_this_keywords2_00.dump b/runtime/syntax/testdir/dumps/vim9_super_this_keywords2_00.dump
new file mode 100644
index 0000000..054bba1
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_super_this_keywords2_00.dump
@@ -0,0 +1,20 @@
+>v+0#af5f00255#ffffff0|i|m|9|s|c|r|i|p|t| +0#0000000&@64
+@75
+|#+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|9|S|u|p|e|r| |T|o|d|o| +0#0000000&@35
+|#+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|9|T|h|i|s| |T|o|d|o| +0#0000000&@36
+|#+0#0000e05&| +0#0000000&|S+0#e000e06&|e@1|:| +0#0000e05&|h|t@1|p|s|:|/@1|g|i|t|h|u|b|.|c|o|m|/|v|i|m|/|v|i|m|/|p|u|l@1|/|1|6|4|7|6|#|i|s@1|u|e|c|o|m@1|e|n|t|-|2|6|3|8|1|9|1@2|0| +0#0000000&@6
+@75
+@75
+|c+0#af5f00255&|l|a|s@1| +0#0000000&|A| @67
+@2|v+0#af5f00255&|a|r| +0#0000000&|_+0#00e0e07&|v|a|l|u|e|:+0#0000000&| |a+0#00e0003&|n|y| +0#0000000&@57
+@75
+@2|d+0#af5f00255&|e|f| +0#0000000&|n+0#00e0e07&|e|w|(+0#e000e06&|v+0#00e0e07&|a|l|u|e|:+0#0000000&| |a+0#00e0003&|n|y|)+0#e000e06&| +0#0000000&@53
+@3| +0#00e0e07&|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|_+0#0000000&|B|a|s|e|I|n|i|t|(+0#e000e06&|v+0#00e0e07&|a|l|u|e|)+0#e000e06&| +0#0000000&@49
+@2|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@66
+@75
+@2|d+0#af5f00255&|e|f| +0#0000000&|_|B|a|s|e|I|n|i|t|(+0#e000e06&|v+0#00e0e07&|a|l|u|e|:+0#0000000&| |a+0#00e0003&|n|y|)+0#e000e06&| +0#0000000&@47
+@3| +0#00e0e07&|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|_+0#00e0e07&|v|a|l|u|e| +0#0000000&|=+0#af5f00255&| +0#0000000&|v+0#00e0e07&|a|l|u|e| +0#0000000&@51
+@2|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@66
+@75
+@2|d+0#af5f00255&|e|f| +0#0000000&|V|a|l|u|e|(+0#e000e06&|)|:+0#0000000&| |a+0#00e0003&|n|y| +0#0000000&@56
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim9_super_this_keywords2_01.dump b/runtime/syntax/testdir/dumps/vim9_super_this_keywords2_01.dump
new file mode 100644
index 0000000..aaa99d7
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_super_this_keywords2_01.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+@2|d+0#af5f00255&|e|f| +0#0000000&|_|B|a|s|e|I|n|i|t|(+0#e000e06&|v+0#00e0e07&|a|l|u|e|:+0#0000000&| |a+0#00e0003&|n|y|)+0#e000e06&| +0#0000000&@47
+@3| +0#00e0e07&|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|_+0#00e0e07&|v|a|l|u|e| +0#0000000&|=+0#af5f00255&| +0#0000000&|v+0#00e0e07&|a|l|u|e| +0#0000000&@51
+@2|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@66
+@75
+@2>d+0#af5f00255&|e|f| +0#0000000&|V|a|l|u|e|(+0#e000e06&|)|:+0#0000000&| |a+0#00e0003&|n|y| +0#0000000&@56
+@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|_+0#00e0e07&|v|a|l|u|e| +0#0000000&@52
+@2|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@66
+|e+0#af5f00255&|n|d|c|l|a|s@1| +0#0000000&@66
+@75
+|c+0#af5f00255&|l|a|s@1| +0#0000000&|B| |e+0#af5f00255&|x|t|e|n|d|s| +0#0000000&|A| @57
+@2|d+0#af5f00255&|e|f| +0#0000000&|n+0#00e0e07&|e|w|(+0#e000e06&|v+0#00e0e07&|a|l|u|e|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#e000e06&| +0#0000000&@50
+@3| +0#00e0e07&|s+0#0000001#ffff4012|u|p|e|r|.+0#af5f00255#ffffff0|_+0#0000000&|B|a|s|e|I|n|i|t|(+0#e000e06&|v+0#00e0e07&|a|l|u|e|)+0#e000e06&| +0#0000000&@48
+@2|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@66
+@75
+@2|d+0#af5f00255&|e|f| +0#0000000&|V|a|l|u|e|(+0#e000e06&|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@53
+@4|e+0#af5f00255&|c|h|o| +0#0000000&|t+0#0000001#ffff4012|h|i|s| +0#0000000#ffffff0@61
+@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|s+0#0000001#ffff4012|u|p|e|r|.+0#af5f00255#ffffff0|_+0#00e0e07&|v|a|l|u|e| +0#0000000&@51
+@2|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@66
+@57|1|9|,|3| @9|2|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_super_this_keywords2_02.dump b/runtime/syntax/testdir/dumps/vim9_super_this_keywords2_02.dump
new file mode 100644
index 0000000..f9449f5
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_super_this_keywords2_02.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@1|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@66
+|e+0#af5f00255&|n|d|c|l|a|s@1| +0#0000000&@66
+@75
+|c+0#af5f00255&|l|a|s@1| +0#0000000&|C| |e+0#af5f00255&|x|t|e|n|d|s| +0#0000000&|A| @57
+@2|#+0#0000e05&@3| |E|1@1|7| +0#0000000&@63
+| +0#0000e05&@1>#| @2|d|e|f| |n|e|w|(|v|a|l|u|e|:| |s|t|r|i|n|g|)| +0#0000000&@46
+| +0#0000e05&@1|#| @6|s|u|p|e|r|(|v|a|l|u|e|)| +0#0000000&@52
+| +0#0000e05&@1|#| @2|e|n|d@1|e|f| +0#0000000&@62
+@75
+| +0#0000e05&@1|#@3| |E|1|0|3|4| +0#0000000&@62
+| +0#0000e05&@1|#| @2|d|e|f| |n|e|w|(|s|u|p|e|r|.|_|v|a|l|u|e|)| +0#0000000&@47
+| +0#0000e05&@1|#| @2|e|n|d@1|e|f| +0#0000000&@62
+@75
+| +0#0000e05&@1|#@3| |E|1|0|3|4| +0#0000000&@62
+| +0#0000e05&@1|#| @2|d|e|f| |n|e|w|(|v|a|l|u|e|:| |s|t|r|i|n|g|)| +0#0000000&@46
+| +0#0000e05&@1|#| @6|s|u|p|e|r|.|_|v|a|l|u|e| |=| |v|a|l|u|e| +0#0000000&@44
+| +0#0000e05&@1|#| @2|e|n|d@1|e|f| +0#0000000&@62
+@75
+| +0#0000e05&@1|#@3| |E|1|3|5|6| +0#0000000&@62
+@57|3|7|,|3| @9|7|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_super_this_keywords2_03.dump b/runtime/syntax/testdir/dumps/vim9_super_this_keywords2_03.dump
new file mode 100644
index 0000000..95ff495
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_super_this_keywords2_03.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#ffffff0@1|#@3| |E|1|3|5|6| +0#0000000&@62
+| +0#0000e05&@1|#| @2|d|e|f| |S|u|p|e|r|(|)|:| |A| +0#0000000&@54
+| +0#0000e05&@1|#| @6|r|e|t|u|r|n| |s|u|p|e|r| +0#0000000&@52
+| +0#0000e05&@1|#| @2|e|n|d@1|e|f| +0#0000000&@62
+@75
+@2>d+0#af5f00255&|e|f| +0#0000000&|T|h|i|s|(+0#e000e06&|)|:+0#0000000&| |C| @59
+@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|t+0#0000001#ffff4012|h|i|s| +0#0000000#ffffff0@59
+@2|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@66
+|e+0#af5f00255&|n|d|c|l|a|s@1| +0#0000000&@66
+@75
+|e+0#af5f00255&|c|h|o| +0#0000000&|1+0#e000002&| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|A|.|n+0#00e0e07&|e|w|(+0#e000e06&|1+0#e000002&|)+0#e000e06&|.+0#af5f00255&|V+0#0000000&|a|l|u|e|(+0#e000e06&|)| +0#0000000&@48
+|e+0#af5f00255&|c|h|o| +0#0000000&|2+0#e000002&| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|B|.|n+0#00e0e07&|e|w|(+0#e000e06&|2+0#e000002&|)+0#e000e06&|.+0#af5f00255&|V+0#0000000&|a|l|u|e|(+0#e000e06&|)| +0#0000000&@48
+|d+0#af5f00255&|e|f|c|o|m|p|i|l|e| +0#0000000&|C| @62
+@75
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|5@1|,|3| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim9_super_this_keywords3_00.dump b/runtime/syntax/testdir/dumps/vim9_super_this_keywords3_00.dump
new file mode 100644
index 0000000..7f5ddfd
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_super_this_keywords3_00.dump
@@ -0,0 +1,20 @@
+>v+0#af5f00255#ffffff0|i|m|9|s|c|r|i|p|t| +0#0000000&@64
+@75
+|#+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|9|S|u|p|e|r| |T|o|d|o| +0#0000000&@35
+|#+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|9|T|h|i|s| |T|o|d|o| +0#0000000&@36
+|#+0#0000e05&| +0#0000000&|S+0#e000e06&|e@1|:| +0#0000e05&|h|t@1|p|s|:|/@1|g|i|t|h|u|b|.|c|o|m|/|v|i|m|/|v|i|m|/|p|u|l@1|/|1|6|4|7|6|#|i|s@1|u|e|c|o|m@1|e|n|t|-|2|6|3|5|1@1|9|4|7|8| +0#0000000&@6
+@75
+@75
+|c+0#af5f00255&|l|a|s@1| +0#0000000&|A| @67
+@4|c+0#af5f00255&|o|n|s|t| +0#0000000&|_+0#00e0e07&|v|a|l|u|e|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@50
+@75
+@4|d+0#af5f00255&|e|f| +0#0000000&|n+0#00e0e07&|e|w|(+0#e000e06&|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|_+0#00e0e07&|v|a|l|u|e|)+0#e000e06&| +0#0000000&@50
+@4|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@64
+@75
+@4|d+0#af5f00255&|e|f| +0#0000000&|K|(+0#e000e06&|)|:+0#0000000&| |f+0#00e0003&|u|n|c|(|a|n|y|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@44
+@8|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(+0#e000e06&@1|_+0#00e0e07&|:+0#0000000&| |a+0#00e0003&|n|y|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|_+0#00e0e07&|v|a|l|u|e|)+0#e000e06&| +0#0000000&@34
+@4|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@64
+|e+0#af5f00255&|n|d|c|l|a|s@1| +0#0000000&@66
+@75
+|c+0#af5f00255&|l|a|s@1| +0#0000000&|B| |e+0#af5f00255&|x|t|e|n|d|s| +0#0000000&|A| @57
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim9_super_this_keywords3_01.dump b/runtime/syntax/testdir/dumps/vim9_super_this_keywords3_01.dump
new file mode 100644
index 0000000..f9aa042
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_super_this_keywords3_01.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|d+0#af5f00255&|e|f| +0#0000000&|K|(+0#e000e06&|)|:+0#0000000&| |f+0#00e0003&|u|n|c|(|a|n|y|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@44
+@8|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(+0#e000e06&@1|_+0#00e0e07&|:+0#0000000&| |a+0#00e0003&|n|y|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|_+0#00e0e07&|v|a|l|u|e|)+0#e000e06&| +0#0000000&@34
+@4|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@64
+|e+0#af5f00255&|n|d|c|l|a|s@1| +0#0000000&@66
+@75
+>c+0#af5f00255&|l|a|s@1| +0#0000000&|B| |e+0#af5f00255&|x|t|e|n|d|s| +0#0000000&|A| @57
+@4|d+0#af5f00255&|e|f| +0#0000000&|K|(+0#e000e06&|)|:+0#0000000&| |f+0#00e0003&|u|n|c|(|a|n|y|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@44
+@8|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(+0#e000e06&@1|_+0#00e0e07&|:+0#0000000&| |a+0#00e0003&|n|y|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|s+0#0000001#ffff4012|u|p|e|r|.+0#af5f00255#ffffff0|_+0#00e0e07&|v|a|l|u|e|)+0#e000e06&| +0#0000000&@33
+@4|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@64
+|e+0#af5f00255&|n|d|c|l|a|s@1| +0#0000000&@66
+@75
+|e+0#af5f00255&|c|h|o| +0#0000000&|1+0#e000002&| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|A|.|n+0#00e0e07&|e|w|(+0#e000e06&|1+0#e000002&|)+0#e000e06&|.+0#af5f00255&|K+0#0000000&|(+0#e000e06&|)|(|n+0#00e0e07&|u|l@1|)+0#e000e06&| +0#0000000&@46
+|e+0#af5f00255&|c|h|o| +0#0000000&|2+0#e000002&| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|B|.|n+0#00e0e07&|e|w|(+0#e000e06&|2+0#e000002&|)+0#e000e06&|.+0#af5f00255&|K+0#0000000&|(+0#e000e06&|)|(|n+0#00e0e07&|u|l@1|)+0#e000e06&| +0#0000000&@46
+@75
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|9|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim9_super_this_keywords_00.dump b/runtime/syntax/testdir/dumps/vim9_super_this_keywords_00.dump
new file mode 100644
index 0000000..f62ef1e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_super_this_keywords_00.dump
@@ -0,0 +1,20 @@
+>v+0#af5f00255#ffffff0|i|m|9|s|c|r|i|p|t| +0#0000000&@64
+@75
+|#+0#0000e05&| |V|i|m|9| |t|h|i|s| |a|n|d| |s|u|p|e|r| |k|e|y|w|o|r|d|s| +0#0000000&@44
+|#+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|9|T|h|i|s| |T|o|d|o| +0#0000000&@36
+|#+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|9|S|u|p|e|r| |T|o|d|o| +0#0000000&@35
+@75
+|d+0#af5f00255&|e|f| +0#0000000&|E|c|h|o|(+0#e000e06&|.+0#0000000&@2|a+0#00e0e07&|r|g|s|:+0#0000000&| |l+0#00e0003&|i|s|t|<|a|n|y|>|)+0#e000e06&| +0#0000000&@46
+@2|e+0#af5f00255&|c|h|o| +0#0000000&|a+0#00e0e07&|r|g|s| +0#0000000&@63
+|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68
+@75
+|c+0#af5f00255&|l|a|s@1| +0#0000000&|F|o@1| @65
+@2|v+0#af5f00255&|a|r| +0#0000000&|x+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|4+0#e000002&|2| +0#0000000&@54
+@2|v+0#af5f00255&|a|r| +0#0000000&|y+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|x+0#00e0e07&| +0#0000000&|++0#af5f00255&| +0#0000000&|4+0#e000002&|1| +0#0000000&@45
+@2|v+0#af5f00255&|a|r| +0#0000000&|z+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|x+0#00e0e07&| +0#0000000&|++0#af5f00255&| +0#0000000&|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|y+0#00e0e07&| +0#0000000&@41
+@75
+@2|d+0#af5f00255&|e|f| +0#0000000&|n+0#00e0e07&|e|w|(+0#e000e06&|)| +0#0000000&@63
+@4|e+0#af5f00255&|c|h|o| +0#0000000&|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|x+0#00e0e07&| +0#0000000&|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|y+0#00e0e07&| +0#0000000&|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|z+0#00e0e07&| +0#0000000&@45
+@2|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@66
+@75
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim9_super_this_keywords_01.dump b/runtime/syntax/testdir/dumps/vim9_super_this_keywords_01.dump
new file mode 100644
index 0000000..1777272
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_super_this_keywords_01.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@1|v+0#af5f00255&|a|r| +0#0000000&|z+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|x+0#00e0e07&| +0#0000000&|++0#af5f00255&| +0#0000000&|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|y+0#00e0e07&| +0#0000000&@41
+@75
+@2|d+0#af5f00255&|e|f| +0#0000000&|n+0#00e0e07&|e|w|(+0#e000e06&|)| +0#0000000&@63
+@4|e+0#af5f00255&|c|h|o| +0#0000000&|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|x+0#00e0e07&| +0#0000000&|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|y+0#00e0e07&| +0#0000000&|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|z+0#00e0e07&| +0#0000000&@45
+@2|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@66
+> @74
+@2|d+0#af5f00255&|e|f| +0#0000000&|n+0#00e0e07&|e|w|X|Y|(+0#e000e06&|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|x+0#00e0e07&|,+0#0000000&| |t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|y+0#00e0e07&|,+0#0000000&| |t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|z+0#00e0e07&|)+0#e000e06&| +0#0000000&@39
+@2|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@66
+@75
+@2|d+0#af5f00255&|e|f| +0#0000000&|D|e|f|1|(+0#e000e06&|a+0#00e0e07&|r|g| +0#0000000&|=+0#af5f00255&| +0#0000000&|t+0#0000001#ffff4012|h|i|s|.+0#0000000#ffffff0|x+0#00e0e07&|)+0#e000e06&| +0#0000000&@50
+@3| +0#00e0e07&|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|y+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|a+0#00e0e07&|r|g| +0#0000000&@58
+@3| +0#00e0e07&|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|z+0#00e0e07&| +0#0000000&|++0#af5f00255&|=| +0#0000000&|a+0#00e0e07&|r|g| +0#0000000&@57
+@2|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@66
+@75
+@2|d+0#af5f00255&|e|f| +0#0000000&|D|e|f|2|(+0#e000e06&|a+0#00e0e07&|r|g| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|x+0#00e0e07&| +0#0000000&|++0#af5f00255&| +0#0000000&|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|y+0#00e0e07&| +0#0000000&|++0#af5f00255&| +0#0000000&|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|z+0#00e0e07&|)+0#e000e06&@1| +0#0000000&@30
+@4|E|c|h|o|(+0#e000e06&|t+0#0000001#ffff4012|h|i|s|,+0#0000000#ffffff0| |t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|x+0#00e0e07&|,+0#0000000&| |t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|y+0#00e0e07&|,+0#0000000&| |t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|z+0#00e0e07&|)+0#e000e06&| +0#0000000&@36
+@3| +0#00e0e07&|t+0#0000001#ffff4012|h|i|s|-+0#af5f00255#ffffff0|>|E+0#0000000&|c|h|o|(+0#e000e06&|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|x+0#00e0e07&|,+0#0000000&| |t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|y+0#00e0e07&|,+0#0000000&| |t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|z+0#00e0e07&|)+0#e000e06&| +0#0000000&@36
+@2|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@66
+@75
+@57|1|9|,|0|-|1| @7|1|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_super_this_keywords_02.dump b/runtime/syntax/testdir/dumps/vim9_super_this_keywords_02.dump
new file mode 100644
index 0000000..6ec09d3
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_super_this_keywords_02.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+@2|d+0#af5f00255&|e|f| +0#0000000&|D|e|f|3|(+0#e000e06&|)|:+0#0000000&| |F|o@1| @57
+@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|t+0#0000001#ffff4012|h|i|s| +0#0000000#ffffff0@59
+@2|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@66
+@75
+@2>d+0#af5f00255&|e|f| +0#0000000&|D|e|f|4|(+0#e000e06&|a+0#00e0e07&|r|g|:+0#0000000&| |F|o@1| |=+0#af5f00255&| +0#0000000&|t+0#0000001#ffff4012|h|i|s|)+0#e000e06#ffffff0|:+0#0000000&| |F|o@1| @42
+@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|a+0#00e0e07&|r|g| +0#0000000&@60
+@2|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@66
+|e+0#af5f00255&|n|d|c|l|a|s@1| +0#0000000&@66
+@75
+|c+0#af5f00255&|l|a|s@1| +0#0000000&|B|a|r| |e+0#af5f00255&|x|t|e|n|d|s| +0#0000000&|F|o@1| @53
+@2|d+0#af5f00255&|e|f| +0#0000000&|D|e|f|1|(+0#e000e06&|)| +0#0000000&@62
+@3| +0#00e0e07&|s+0#0000001#ffff4012|u|p|e|r|.+0#af5f00255#ffffff0|D+0#0000000&|e|f|1|(+0#e000e06&|)| +0#0000000&@58
+@2|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@66
+@75
+@2|d+0#af5f00255&|e|f| +0#0000000&|D|e|f|2|(+0#e000e06&|)| +0#0000000&@62
+@4|v+0#af5f00255&|a|r| +0#0000000&|a+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|s+0#0000001#ffff4012|u|p|e|r|.+0#af5f00255#ffffff0|x+0#00e0e07&| +0#0000000&|*+0#af5f00255&| +0#0000000&|s+0#0000001#ffff4012|u|p|e|r|.+0#af5f00255#ffffff0|y+0#00e0e07&| +0#0000000&|*+0#af5f00255&| +0#0000000&|s+0#0000001#ffff4012|u|p|e|r|.+0#af5f00255#ffffff0|z+0#00e0e07&| +0#0000000&@35
+@4|v+0#af5f00255&|a|r| +0#0000000&|b+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|[+0#e000e06&|s+0#0000001#ffff4012|u|p|e|r|.+0#af5f00255#ffffff0|x+0#00e0e07&|,+0#0000000&| |s+0#0000001#ffff4012|u|p|e|r|.+0#af5f00255#ffffff0|y+0#00e0e07&|,+0#0000000&| |s+0#0000001#ffff4012|u|p|e|r|.+0#af5f00255#ffffff0|z+0#00e0e07&|]+0#e000e06&| +0#0000000&@35
+@4|v+0#af5f00255&|a|r| +0#0000000&|c+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|s+0#00e0e07&|u|p|e|r|:+0#0000000&| |s+0#0000001#ffff4012|u|p|e|r|.+0#af5f00255#ffffff0|x+0#00e0e07&|,+0#0000000&| |t+0#00e0e07&|h|i|s|:+0#0000000&| |s+0#0000001#ffff4012|u|p|e|r|.+0#af5f00255#ffffff0|y+0#00e0e07&|,+0#0000000&| |t+0#00e0e07&|r|u|e|:+0#0000000&| |s+0#0000001#ffff4012|u|p|e|r|.+0#af5f00255#ffffff0|z+0#00e0e07&|}+0#e000e06&| +0#0000000&@16
+@57|3|7|,|3| @9|4|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_super_this_keywords_03.dump b/runtime/syntax/testdir/dumps/vim9_super_this_keywords_03.dump
new file mode 100644
index 0000000..fb023e3
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_super_this_keywords_03.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|v+0#af5f00255&|a|r| +0#0000000&|c+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|s+0#00e0e07&|u|p|e|r|:+0#0000000&| |s+0#0000001#ffff4012|u|p|e|r|.+0#af5f00255#ffffff0|x+0#00e0e07&|,+0#0000000&| |t+0#00e0e07&|h|i|s|:+0#0000000&| |s+0#0000001#ffff4012|u|p|e|r|.+0#af5f00255#ffffff0|y+0#00e0e07&|,+0#0000000&| |t+0#00e0e07&|r|u|e|:+0#0000000&| |s+0#0000001#ffff4012|u|p|e|r|.+0#af5f00255#ffffff0|z+0#00e0e07&|}+0#e000e06&| +0#0000000&@16
+@4|v+0#af5f00255&|a|r| +0#0000000&|d+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|s+0#00e0e07&|u|p|e|r|:+0#0000000&| |c+0#00e0e07&|,+0#0000000&| |t+0#00e0e07&|h|i|s|:+0#0000000&| |c+0#00e0e07&|}+0#e000e06&| +0#0000000&@43
+@4|e+0#af5f00255&|c|h|o| +0#0000000&|c+0#00e0e07&|.+0#af5f00255&|s+0#00e0e07&|u|p|e|r| +0#0000000&@58
+@4|e+0#af5f00255&|c|h|o| +0#0000000&|c+0#00e0e07&|.+0#af5f00255&|t+0#00e0e07&|h|i|s| +0#0000000&@59
+@4|e+0#af5f00255&|c|h|o| +0#0000000&|d+0#00e0e07&|.+0#af5f00255&|s+0#00e0e07&|u|p|e|r|.+0#af5f00255&|t+0#00e0e07&|h|i|s| +0#0000000&@53
+@4>e+0#af5f00255&|c|h|o| +0#0000000&|d+0#00e0e07&|.+0#af5f00255&|t+0#00e0e07&|h|i|s|.+0#af5f00255&|s+0#00e0e07&|u|p|e|r| +0#0000000&@53
+@4|e+0#af5f00255&|c|h|o| +0#0000000&|a+0#00e0e07&| +0#0000000&|b+0#00e0e07&| +0#0000000&|c+0#00e0e07&| +0#0000000&@60
+@2|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@66
+@75
+@2|d+0#af5f00255&|e|f| +0#0000000&|D|e|f|5|(+0#e000e06&|)| +0#0000000&@62
+@4|v+0#af5f00255&|a|r| +0#0000000&|a+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|x+0#00e0e07&| +0#0000000&|*+0#af5f00255&| +0#0000000&|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|y+0#00e0e07&| +0#0000000&@47
+@4|v+0#af5f00255&|a|r| +0#0000000&|b+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|x+0#00e0e07&| +0#0000000&|*+0#af5f00255&| +0#0000000&|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|y+0#00e0e07&|)+0#e000e06&| +0#0000000&@45
+@4|v+0#af5f00255&|a|r| +0#0000000&|c+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|[+0#e000e06&|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|x+0#00e0e07&|,+0#0000000&| |t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|y+0#00e0e07&|]+0#e000e06&| +0#0000000&@46
+@4|v+0#af5f00255&|a|r| +0#0000000&|d+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|s+0#00e0e07&|u|p|e|r|:+0#0000000&| |t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|x+0#00e0e07&|,+0#0000000&| |t+0#00e0e07&|h|i|s|:+0#0000000&| |t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|y+0#00e0e07&|}+0#e000e06&| +0#0000000&@33
+@4|e+0#af5f00255&|c|h|o| +0#0000000&|a+0#00e0e07&| +0#0000000&|b+0#00e0e07&| +0#0000000&|c+0#00e0e07&| +0#0000000&|d+0#00e0e07&| +0#0000000&@58
+@2|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@66
+@75
+@2|d+0#af5f00255&|e|f| +0#0000000&|D|e|f|6|(+0#e000e06&|)| +0#0000000&@62
+@4|v+0#af5f00255&|a|r| +0#0000000&|x+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|t+0#0000001#ffff4012|h|i|s|#+0#00e0e07#ffffff0|s|u|p|e|r|#|x| +0#0000000&@50
+@57|5@1|,|5| @9|7|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_super_this_keywords_04.dump b/runtime/syntax/testdir/dumps/vim9_super_this_keywords_04.dump
new file mode 100644
index 0000000..4e9ce2c
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_super_this_keywords_04.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|v+0#af5f00255&|a|r| +0#0000000&|x+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|t+0#0000001#ffff4012|h|i|s|#+0#00e0e07#ffffff0|s|u|p|e|r|#|x| +0#0000000&@50
+@4|v+0#af5f00255&|a|r| +0#0000000&|y+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|s+0#00e0e07&|u|p|e|r|#|t+0#0000001#ffff4012|h|i|s|#+0#00e0e07#ffffff0|y| +0#0000000&@50
+@4|t+0#0000001#ffff4012|h|i|s|#+0#0000000#ffffff0|s|u|p|e|r|#|F|u|n|c|(+0#e000e06&|)| +0#0000000&@53
+@4|s|u|p|e|r|#|t+0#0000001#ffff4012|h|i|s|#+0#0000000#ffffff0|F|u|n|c|(+0#e000e06&|)| +0#0000000&@53
+@2|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@66
+> @74
+@2|d+0#af5f00255&|e|f| +0#0000000&|D|e|f|7|(+0#e000e06&|a+0#00e0e07&|r|g| +0#0000000&|=+0#af5f00255&| +0#0000000&|s+0#0000001#ffff4012|u|p|e|r|.+0#0000000#ffffff0|D|e|f|3|(+0#e000e06&|)@1| +0#0000000&@44
+@4|e+0#af5f00255&|c|h|o| +0#0000000&|a+0#00e0e07&|r|g| +0#0000000&@62
+@2|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@66
+@75
+@2|d+0#af5f00255&|e|f| +0#0000000&|D|e|f|8|(+0#e000e06&|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@54
+@4|v+0#af5f00255&|a|r| +0#0000000&|F+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|)| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|x+0#00e0e07&| +0#0000000&@50
+@4|v+0#af5f00255&|a|r| +0#0000000&|G+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|)| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|s+0#0000001#ffff4012|u|p|e|r|.+0#af5f00255#ffffff0|x+0#00e0e07&| +0#0000000&@49
+@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|F|(+0#e000e06&|)| +0#0000000&|++0#af5f00255&| +0#0000000&|G|(+0#e000e06&|)| +0#0000000&@54
+@2|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@66
+|e+0#af5f00255&|n|d|c|l|a|s@1| +0#0000000&@66
+@75
+|d+0#af5f00255&|e|f|c|o|m|p|i|l|e| +0#0000000&|F|o@1| @60
+|d+0#af5f00255&|e|f|c|o|m|p|i|l|e| +0#0000000&|B|a|r| @60
+@57|7|3|,|0|-|1| @7|9|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_super_this_keywords_05.dump b/runtime/syntax/testdir/dumps/vim9_super_this_keywords_05.dump
new file mode 100644
index 0000000..af95527
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_super_this_keywords_05.dump
@@ -0,0 +1,20 @@
+|d+0#af5f00255#ffffff0|e|f|c|o|m|p|i|l|e| +0#0000000&|B|a|r| @60
+> @74
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|8|7|,|0|-|1| @7|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim9_variables_00.dump b/runtime/syntax/testdir/dumps/vim9_variables_00.dump
new file mode 100644
index 0000000..766069e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_variables_00.dump
@@ -0,0 +1,20 @@
+>v+0#af5f00255#ffffff0|i|m|9|s|c|r|i|p|t| +0#0000000&@64
+@75
+|#+0#0000e05&| |V|i|m|9| |v|a|r|i|a|b|l|e| |h|i|g|h|l|i|g|h|t|i|n|g| +0#0000000&@46
+@75
+|#+0#0000e05&| |D|e|c|l|a|r|a|t|i|o|n|s| +0#0000000&@60
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60
+@75
+|b+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62
+|g+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62
+|t+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62
+|w+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62
+@75
+|v+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62
+@75
+|$+0#e000e06&|F|O@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@63
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|v+0#af5f00255&|a|r| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| @65
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim9_variables_01.dump b/runtime/syntax/testdir/dumps/vim9_variables_01.dump
new file mode 100644
index 0000000..35547c0
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_variables_01.dump
@@ -0,0 +1,20 @@
+|v+0#00e0e07#ffffff0|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62
+@75
+|$+0#e000e06&|F|O@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@63
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+>v+0#af5f00255&|a|r| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| @65
+@6|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+|v+0#af5f00255&|a|r| +0#0000000&|[|$+0#e000e06&|f|o@1|,+0#0000000&| |$+0#e000e06&|b|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+|v+0#af5f00255&|a|r| +0#0000000&|[|$+0#e000e06&|f|o@1|,+0#0000000&| @64
+@6|\+0#e000e06&| +0#0000000&|$+0#e000e06&|b|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|;+0#0000000&| |b+0#00e0e07&|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@48
+|v+0#af5f00255&|a|r| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| @65
+@6|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r|;+0#0000000&| @62
+@6|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+|v+0#af5f00255&|a|r| +0#0000000&|[|$+0#e000e06&|f|o@1|,+0#0000000&| |$+0#e000e06&|b|a|r|;+0#0000000&| |$+0#e000e06&|b|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@45
+|v+0#af5f00255&|a|r| +0#0000000&|[|$+0#e000e06&|f|o@1|,+0#0000000&| @64
+@6|\+0#e000e06&| +0#0000000&|$+0#e000e06&|b|a|r|;+0#0000000&| @61
+@6|\+0#e000e06&| +0#0000000&|$+0#e000e06&|b|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+@57|1|9|,|1| @10|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_variables_02.dump b/runtime/syntax/testdir/dumps/vim9_variables_02.dump
new file mode 100644
index 0000000..3b111f7
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_variables_02.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|$+0#e000e06&|b|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+@75
+|v+0#af5f00255&|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |E|N|D| +0#0000000&@59
+|.+0#e000002&@2| +0#0000000&@71
+|E+0#e000e06&|N|D| +0#0000000&@71
+>v+0#af5f00255&|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D| +0#0000000&@54
+|.+0#e000002&@2| +0#0000000&@71
+|E+0#e000e06&|N|D| +0#0000000&@71
+|v+0#af5f00255&|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |E|N|D| +0#0000000&@54
+|.+0#e000002&@2| +0#0000000&@71
+|E+0#e000e06&|N|D| +0#0000000&@71
+|v+0#af5f00255&|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |e|v|a|l| |E|N|D| +0#0000000&@49
+|.+0#e000002&@2| +0#0000000&@71
+|E+0#e000e06&|N|D| +0#0000000&@71
+|v+0#af5f00255&|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |t|r|i|m| |E|N|D| +0#0000000&@49
+|.+0#e000002&@2| +0#0000000&@71
+|E+0#e000e06&|N|D| +0#0000000&@71
+@75
+|#+0#0000e05&| |A|s@1|i|g|n|m|e|n|t|s| +0#0000000&@61
+@57|3|7|,|1| @9|1|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_variables_03.dump b/runtime/syntax/testdir/dumps/vim9_variables_03.dump
new file mode 100644
index 0000000..f2d245b
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_variables_03.dump
@@ -0,0 +1,20 @@
+|#+0#0000e05#ffffff0| |A|s@1|i|g|n|m|e|n|t|s| +0#0000000&@61
+@75
+|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@64
+@75
+|f+0#00e0e07&|o@1|[+0#0000000&|0+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+> @74
+|f+0#00e0e07&|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+|f+0#00e0e07&|o@1|[+0#0000000&|:|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60
+|f+0#00e0e07&|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60
+|f+0#00e0e07&|o@1|[+0#0000000&|:|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+@75
+|f+0#00e0e07&|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@63
+|f+0#00e0e07&|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@63
+|f+0#00e0e07&|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@63
+|f+0#00e0e07&|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@63
+|f+0#00e0e07&|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@63
+|f+0#00e0e07&|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62
+@75
+|b+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62
+@57|5@1|,|0|-|1| @7|2|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_variables_04.dump b/runtime/syntax/testdir/dumps/vim9_variables_04.dump
new file mode 100644
index 0000000..b54b1a6
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_variables_04.dump
@@ -0,0 +1,20 @@
+|b+0#00e0e07#ffffff0|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62
+|g+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62
+|t+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62
+|w+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62
+@75
+>b+0#00e0e07&|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+|g+0#00e0e07&|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+|t+0#00e0e07&|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+|w+0#00e0e07&|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+@75
+|b+0#00e0e07&|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+|g+0#00e0e07&|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+|t+0#00e0e07&|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+|w+0#00e0e07&|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+@75
+|b+0#00e0e07&|:|f|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+|g+0#00e0e07&|:|f|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+|t+0#00e0e07&|:|f|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+|w+0#00e0e07&|:|f|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+@57|7|3|,|1| @9|3|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_variables_05.dump b/runtime/syntax/testdir/dumps/vim9_variables_05.dump
new file mode 100644
index 0000000..2abfee7
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_variables_05.dump
@@ -0,0 +1,20 @@
+|w+0#00e0e07#ffffff0|:|f|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+@75
+|b+0#00e0e07&|:|f|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+|g+0#00e0e07&|:|f|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+|t+0#00e0e07&|:|f|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+>w+0#00e0e07&|:|f|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+@75
+|b+0#00e0e07&|:|f|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+|g+0#00e0e07&|:|f|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+|t+0#00e0e07&|:|f|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+|w+0#00e0e07&|:|f|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+@75
+|b+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60
+|g+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60
+|t+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60
+|w+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60
+@75
+|$+0#e000e06&|F|O@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@63
+|$+0#e000e06&|F|O@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+@57|9|1|,|1| @9|4|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_variables_06.dump b/runtime/syntax/testdir/dumps/vim9_variables_06.dump
new file mode 100644
index 0000000..b0380cb
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_variables_06.dump
@@ -0,0 +1,20 @@
+|$+0#e000e06#ffffff0|F|O@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+@75
+|@+0#e000e06&|f| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@65
+|@+0#e000e06&|f| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@63
+@75
+>&+0#00e0e07&|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@63
+@75
+|&+0#00e0e07&|t|_|k|1| +0#0000000&|=+0#af5f00255&| +0#0000000&|"+0#e000002&|\+0#e000e06&|<|E|s|c|>|[+0#e000002&|2|3|4|;|"| +0#0000000&@53
+@75
+|&+0#00e0e07&|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+@75
+|&+0#00e0e07&|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62
+|&+0#00e0e07&|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62
+@75
+|&+0#00e0e07&|l|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+@75
+|&+0#00e0e07&|l|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+|&+0#00e0e07&|l|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60
+|&+0#00e0e07&|l|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60
+@57|1|0|9|,|1| @8|5|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_variables_07.dump b/runtime/syntax/testdir/dumps/vim9_variables_07.dump
new file mode 100644
index 0000000..adf80f5
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_variables_07.dump
@@ -0,0 +1,20 @@
+|&+0#00e0e07#ffffff0|l|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60
+@75
+|&+0#00e0e07&|g|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+@75
+|&+0#00e0e07&|g|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+>&+0#00e0e07&|g|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60
+|&+0#00e0e07&|g|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60
+@75
+|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|[|f+0#00e0e07&|o@1|,+0#0000000&| @69
+@6|\| |b+0#00e0e07&|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+|[|v+0#00e0e07&|:|f|o@1|,+0#0000000&| |v+0#00e0e07&|:|b|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|[|v+0#00e0e07&|:|f|o@1|,+0#0000000&| @67
+@6|\| |v+0#00e0e07&|:|b|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|[|&+0#00e0e07&|f|o@1|,+0#0000000&| |&+0#00e0e07&|b|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+|[|&+0#00e0e07&|f|o@1|,+0#0000000&| @68
+@6|\| |&+0#00e0e07&|b|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+|[|$+0#e000e06&|f|o@1|,+0#0000000&| |$+0#e000e06&|b|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+|[|$+0#e000e06&|f|o@1|,+0#0000000&| @68
+@57|1|2|7|,|1| @8|6|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_variables_08.dump b/runtime/syntax/testdir/dumps/vim9_variables_08.dump
new file mode 100644
index 0000000..5348a7e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_variables_08.dump
@@ -0,0 +1,20 @@
+|[+0&#ffffff0|$+0#e000e06&|f|o@1|,+0#0000000&| @68
+@6|\| @1|$+0#e000e06&|b|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|[|@+0#e000e06&|a|,+0#0000000&| |@+0#e000e06&|b|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+|[|@+0#e000e06&|a|,+0#0000000&| @70
+@6|\| @1|@+0#e000e06&|a|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+> @74
+|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56
+|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56
+|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56
+|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56
+|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56
+@75
+|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|;+0#0000000&| |b+0#00e0e07&|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@52
+|[|f+0#00e0e07&|o@1|,+0#0000000&| @69
+@6|\| |b+0#00e0e07&|a|r|;+0#0000000&| @62
+@6|\| |b+0#00e0e07&|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+|[|v+0#00e0e07&|:|f|o@1|,+0#0000000&| |v+0#00e0e07&|:|b|a|r|;+0#0000000&| |v+0#00e0e07&|:|b|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@46
+|[|v+0#00e0e07&|:|f|o@1|,+0#0000000&| @67
+@57|1|4|5|,|0|-|1| @6|7|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_variables_09.dump b/runtime/syntax/testdir/dumps/vim9_variables_09.dump
new file mode 100644
index 0000000..1294cb1
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_variables_09.dump
@@ -0,0 +1,20 @@
+|[+0&#ffffff0|v+0#00e0e07&|:|f|o@1|,+0#0000000&| @67
+@6|\| |v+0#00e0e07&|:|b|a|r|;+0#0000000&| @60
+@6|\| |v+0#00e0e07&|:|b|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|[|$+0#e000e06&|f|o@1|,+0#0000000&| |$+0#e000e06&|b|a|r|;+0#0000000&| |$+0#e000e06&|b|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49
+|[|$+0#e000e06&|f|o@1|,+0#0000000&| @68
+@6>\| |$+0#e000e06&|b|a|r|;+0#0000000&| @61
+@6|\| |$+0#e000e06&|b|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+|[|&+0#00e0e07&|f|o@1|,+0#0000000&| |&+0#00e0e07&|b|a|r|;+0#0000000&| |&+0#00e0e07&|b|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49
+|[|&+0#00e0e07&|f|o@1|,+0#0000000&| @68
+@6|\| |&+0#00e0e07&|b|a|r|;+0#0000000&| @61
+@6|\| |&+0#00e0e07&|b|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+|[|@+0#e000e06&|a|,+0#0000000&| |@+0#e000e06&|b|;+0#0000000&| |@+0#e000e06&|c|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+|[|@+0#e000e06&|a|,+0#0000000&| @70
+@6|\| |@+0#e000e06&|b|;+0#0000000&| @63
+@6|\| |@+0#e000e06&|c|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56
+@75
+|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |E|N|D| +0#0000000&@63
+|.+0#e000002&@2| +0#0000000&@71
+|E+0#e000e06&|N|D| +0#0000000&@71
+@57|1|6|3|,|7| @8|8@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_variables_10.dump b/runtime/syntax/testdir/dumps/vim9_variables_10.dump
new file mode 100644
index 0000000..b2dd950
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_variables_10.dump
@@ -0,0 +1,20 @@
+|E+0#e000e06#ffffff0|N|D| +0#0000000&@71
+|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D| +0#0000000&@58
+|.+0#e000002&@2| +0#0000000&@71
+|E+0#e000e06&|N|D| +0#0000000&@71
+|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |E|N|D| +0#0000000&@58
+>.+0#e000002&@2| +0#0000000&@71
+|E+0#e000e06&|N|D| +0#0000000&@71
+|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |e|v|a|l| |E|N|D| +0#0000000&@53
+|.+0#e000002&@2| +0#0000000&@71
+|E+0#e000e06&|N|D| +0#0000000&@71
+|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |t|r|i|m| |E|N|D| +0#0000000&@53
+|.+0#e000002&@2| +0#0000000&@71
+|E+0#e000e06&|N|D| +0#0000000&@71
+@75
+|#+0#0000e05&| |:|f|o|r| +0#0000000&@68
+@75
+|f+0#af5f00255&|o|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68
+@75
+@57|1|8|1|,|1| @8|9|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_variables_11.dump b/runtime/syntax/testdir/dumps/vim9_variables_11.dump
new file mode 100644
index 0000000..9b3552e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_variables_11.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|f+0#af5f00255&|o|r| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |i+0#af5f00255&|n| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@52
+|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68
+> @74
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|9|7|,|0|-|1| @6|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_comment_03.dump b/runtime/syntax/testdir/dumps/vim_comment_03.dump
index 70c9519..107afd1 100644
--- a/runtime/syntax/testdir/dumps/vim_comment_03.dump
+++ b/runtime/syntax/testdir/dumps/vim_comment_03.dump
@@ -2,7 +2,7 @@
|"+0#0000e05&| +0#0000000&|I+0#e000e06&|s@1|u|e|:| +0#0000e05&|#|1|3|0|4|7| +0#0000000&@59
@75
|i+0#af5f00255&|f| +0#0000000&|!+0#af5f00255&|e+0#00e0e07&|x|i|s|t|s|(+0#e000e06&|"+0#e000002&|:|D|i|f@1|O|r|i|g|"|)+0#e000e06&| +0#0000000&@51
-@2|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|D|i|f@1|O|r|i|g| |v+0#af5f00255&|e|r|t| +0#0000000&|n+0#af5f00255&|e|w| +0#0000000&||| |s+0#af5f00255&|e|t| +0#0000000&|b+0#e000e06&|t|=+0#af5f00255&|n+0#0000000&|o|f|i|l|e| ||| |r+0#af5f00255&| +0#0000000&|++0#af5f00255&@1|e|d|i|t| +0#0000000&|#| ||| |0+0#e000002&|d+0#0000000&|_| ||| |d+0#af5f00255&|i|f@1|t|h|i|s| +0#0000000&@1
+@2|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|D|i|f@1|O|r|i|g| |v+0#af5f00255&|e|r|t| +0#0000000&|n+0#af5f00255&|e|w| +0#0000000&||| |s+0#af5f00255&|e|t| +0#0000000&|b+0#e000e06&|t|=+0#af5f00255&|n+0#0000000&|o|f|i|l|e| ||| |r+0#af5f00255&| +0#0000000&|++0#af5f00255&@1|e+0#00e0e07&|d|i|t| +0#0000000&|#| ||| |0+0#e000002&|d+0#0000000&|_| ||| |d+0#af5f00255&|i|f@1|t|h|i|s| +0#0000000&@1
@18>\+0#e000e06&| +0#0000000&||| |w+0#af5f00255&|i|n|c|m|d| +0#0000000&|p+0#af5f00255&| +0#0000000&||| |d+0#af5f00255&|i|f@1|t|h|i|s| +0#0000000&@33
|e+0#af5f00255&|n|d|i|f| +0#0000000&@69
@75
diff --git a/runtime/syntax/testdir/dumps/vim_ex_command_03.dump b/runtime/syntax/testdir/dumps/vim_ex_command_03.dump
index 43dbd55..0fe7a38 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_command_03.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_command_03.dump
@@ -2,7 +2,7 @@
@75
|"+0#0000e05&| |e|r@1|o|r|s| +0#0000000&@66
@75
-|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|-+0#ffffff16#ff404010|b|a|d|a|t@1|r|=+0#af5f00255#ffffff0|a+0#0000000&|r|g|u|m|e|n|t|s| |-+0#e000e06&|b|a|n|g| +0#0000000&|-+0#ffffff16#ff404010|b|a|d|a|t@1|r| +0#0000000#ffffff0|-+0#e000e06&|n|a|r|g|s|=|*+0#00e0003&| +0#0000000&|F|o@1| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@8
+|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|-+0#ffffff16#ff404010|b|a|d|a|t@1|r|=+0#af5f00255#ffffff0|a+0#00e0e07&|r|g|u|m|e|n|t|s| +0#0000000&|-+0#e000e06&|b|a|n|g| +0#0000000&|-+0#ffffff16#ff404010|b|a|d|a|t@1|r| +0#0000000#ffffff0|-+0#e000e06&|n|a|r|g|s|=|*+0#00e0003&| +0#0000000&|F|o@1| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@8
> @74
|"+0#0000e05&| |d|e|l|e|t|e| +0#0000000&@66
@75
diff --git a/runtime/syntax/testdir/dumps/vim_ex_command_04.dump b/runtime/syntax/testdir/dumps/vim_ex_command_04.dump
index 8e66db6..9700fc3 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_command_04.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_command_04.dump
@@ -4,7 +4,7 @@
@75
|"+0#0000e05&| |I|s@1|u|e| |#|1|4|1|3|5| +0#0000000&@60
> @74
-|c+0#af5f00255&|o|m| +0#0000000&|F|o@1| |c+0#af5f00255&|a|l@1| +0#0000000&|s+0#00e0e07&|y|s|t|e|m|(+0#0000000&|'+0#e000002&|l|s|'|)+0#0000000&| @49
+|c+0#af5f00255&|o|m| +0#0000000&|F|o@1| |c+0#af5f00255&|a|l@1| +0#0000000&|s+0#00e0e07&|y|s|t|e|m|(+0#e000e06&|'+0#e000002&|l|s|'|)+0#e000e06&| +0#0000000&@49
@75
|~+0#4040ff13&| @73
|~| @73
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_11.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_11.dump
index fda4e8f..1f36897 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_11.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_11.dump
@@ -5,7 +5,7 @@
|:|f+0#af5f00255&|o|l|d@1|o@1|p|e|n| +0#0000000&@63
>:|f+0#af5f00255&|o|l|d@1|o|c|l|o|s|e|d| +0#0000000&@61
|:|f+0#af5f00255&|o|l|d|o|p|e|n| +0#0000000&@65
-|:|f+0#af5f00255&|o|r| +0#0000000&@70
+|:|f+0#af5f00255&|o|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&||| |e+0#af5f00255&|n|d|f|o|r| +0#0000000&@50
|:|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&@65
|:|g+0#af5f00255&|l|o|b|a|l|/|.+0#0000000&@2|/+0#af5f00255&| +0#0000000&@62
|:|g+0#af5f00255&|o|t|o| +0#0000000&@69
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_33.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_33.dump
index 0bef65d..489f8b6 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_33.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_33.dump
@@ -14,7 +14,7 @@
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a|p@1|e|n|d| @55
@4|t|e|x|t| @66
|.+0#af5f00255&| +0#0000000&@73
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|b@1|r|e|v|i|a|t|e| +0#0000000&@51
+|c+0#00e0e07&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|b@1|r|e|v|i|a|t|e| +0#0000000&@51
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|b|c|l|e|a|r| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |a+0#af5f00255&|b|o|v|e|l|e|f|t| +0#0000000&@52
@57|5|9|5|,|1| @8|4|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_36.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_36.dump
index 462a76e..fee4ab8 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_36.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_36.dump
@@ -8,7 +8,7 @@
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|h|a|n|g|e| +0#0000000&@55
@4|t|e|x|t| @66
|.+0#af5f00255&| +0#0000000&@73
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|N|e|x|t| +0#0000000&@56
+|c+0#00e0e07&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|N|e|x|t| +0#0000000&@56
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|N|f|i|l|e| +0#0000000&@55
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|a|b@1|r|e|v| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |c+0#af5f00255&|a|b|c|l|e|a|r| +0#0000000&@53
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_43.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_43.dump
index 1d4a521..deb4613 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_43.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_43.dump
@@ -14,7 +14,7 @@
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|o|l|d@1|o@1|p|e|n| +0#0000000&@51
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|o|l|d@1|o|c|l|o|s|e|d| +0#0000000&@49
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|o|l|d|o|p|e|n| +0#0000000&@53
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|o|r| +0#0000000&@58
+|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|o|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&||| |e+0#af5f00255&|n|d|f|o|r| +0#0000000&@38
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |g+0#af5f00255&|l|o|b|a|l|/|.+0#0000000&@2|/+0#af5f00255&| +0#0000000&@50
@57|7@1|5|,|1| @8|6|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_45.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_45.dump
index 4948dd4..4229989 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_commands_45.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_45.dump
@@ -1,6 +1,6 @@
| +0&#ffffff0@3|t|e|x|t| @66
|.+0#af5f00255&| +0#0000000&@73
-|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|a|b@1|r|e|v| +0#0000000&@54
+|c+0#00e0e07&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|a|b@1|r|e|v| +0#0000000&@54
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|a|b|c|l|e|a|r| +0#0000000&@53
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|f| +0#0000000&@59
>c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |i+0#af5f00255&|j|u|m|p| +0#0000000&@56
diff --git a/runtime/syntax/testdir/dumps/vim_ex_def_06.dump b/runtime/syntax/testdir/dumps/vim_ex_def_06.dump
index edb15c7..35882b3 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_def_06.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_def_06.dump
@@ -1,5 +1,5 @@
| +0&#ffffff0@74
-|d+0#af5f00255&|e|f| +0#0000000&|T|e|s|t|(+0#e000e06&|l+0#00e0e07&|i|n|e|s|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>| +0#0000000&|=+0#af5f00255&| +0#0000000&|[|l+0#00e0e07&|i|n|e|(+0#e000e06&|'+0#e000002&|.|'|)+0#e000e06&|,+0#0000000&| |l+0#00e0e07&|i|n|e|(+0#e000e06&|'+0#e000002&|.|'|)+0#e000e06&|]+0#0000000&|)+0#e000e06&|:+0#0000000&| |v+0#00e0003&|o|i|d| +0#0000000&@14
+|d+0#af5f00255&|e|f| +0#0000000&|T|e|s|t|(+0#e000e06&|l+0#00e0e07&|i|n|e|s|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>| +0#0000000&|=+0#af5f00255&| +0#0000000&|[+0#e000e06&|l+0#00e0e07&|i|n|e|(+0#e000e06&|'+0#e000002&|.|'|)+0#e000e06&|,+0#0000000&| |l+0#00e0e07&|i|n|e|(+0#e000e06&|'+0#e000002&|.|'|)+0#e000e06&|]|)|:+0#0000000&| |v+0#00e0003&|o|i|d| +0#0000000&@14
|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68
@75
@75
diff --git a/runtime/syntax/testdir/dumps/vim_ex_def_nested_00.dump b/runtime/syntax/testdir/dumps/vim_ex_def_nested_00.dump
index 88cfca8..d9f765d 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_def_nested_00.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_def_nested_00.dump
@@ -1,5 +1,6 @@
>v+0#af5f00255#ffffff0|i|m|9|s|c|r|i|p|t| +0#0000000&@64
|#+0#0000e05&| |V|i|m|9| |:|d|e|f| |c|o|m@1|a|n|d| |(|n|e|s|t|e|d|)| +0#0000000&@46
+|#+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|9|T|h|i|s| |T|o|d|o| +0#0000000&@36
@75
|c+0#af5f00255&|l|a|s@1| +0#0000000&|T|e|s|t| @64
@4|c+0#af5f00255&|o|n|s|t| +0#0000000&|n+0#00e0e07&|a|m|e|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g| +0#0000000&@52
@@ -13,8 +14,7 @@
@12|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|G|i|v|e|N|a|m|e|(+0#e000e06&|)| +0#0000000&@45
@8|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@60
@75
-@8|t+0#00e0e07&|h|i|s|.+0#af5f00255&|n+0#0000000&|a|m|e| |=+0#af5f00255&| +0#0000000&|N|a|m|e|(+0#e000e06&|)| +0#0000000&@48
+| +0#00e0e07&@7|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|n+0#00e0e07&|a|m|e| +0#0000000&|=+0#af5f00255&| +0#0000000&|N|a|m|e|(+0#e000e06&|)| +0#0000000&@48
@4|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@64
|e+0#af5f00255&|n|d|c|l|a|s@1| +0#0000000&@66
-@75
@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_def_nested_01.dump b/runtime/syntax/testdir/dumps/vim_ex_def_nested_01.dump
index f8bbad4..e85f7ed 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_def_nested_01.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_def_nested_01.dump
@@ -1,9 +1,10 @@
-| +0&#ffffff0@7|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@60
+| +0&#ffffff0@11|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|G|i|v|e|N|a|m|e|(+0#e000e06&|)| +0#0000000&@45
+@8|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@60
@75
-@8|t+0#00e0e07&|h|i|s|.+0#af5f00255&|n+0#0000000&|a|m|e| |=+0#af5f00255&| +0#0000000&|N|a|m|e|(+0#e000e06&|)| +0#0000000&@48
+| +0#00e0e07&@7|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|n+0#00e0e07&|a|m|e| +0#0000000&|=+0#af5f00255&| +0#0000000&|N|a|m|e|(+0#e000e06&|)| +0#0000000&@48
@4|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@64
-|e+0#af5f00255&|n|d|c|l|a|s@1| +0#0000000&@66
-> @74
+>e+0#af5f00255&|n|d|c|l|a|s@1| +0#0000000&@66
+@75
|e+0#af5f00255&|c|h|o| +0#0000000&|T|e|s|t|.|n+0#00e0e07&|e|w|(+0#e000e06&|)| +0#0000000&@59
|~+0#4040ff13&| @73
|~| @73
@@ -16,5 +17,4 @@
|~| @73
|~| @73
|~| @73
-|~| @73
-| +0#0000000&@56|1|9|,|0|-|1| @7|B|o|t|
+| +0#0000000&@56|1|9|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_def_nested_fold_00.dump b/runtime/syntax/testdir/dumps/vim_ex_def_nested_fold_00.dump
index 122abd1..1b71d3a 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_def_nested_fold_00.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_def_nested_fold_00.dump
@@ -1,7 +1,9 @@
| +0#0000e05#a8a8a8255@1>v+0#af5f00255#ffffff0|i|m|9|s|c|r|i|p|t| +0#0000000&@62
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
| +0#0000e05#a8a8a8255@1|#+0&#ffffff0| |V|i|m|9| |:|d|e|f| |c|o|m@1|a|n|d| |(|n|e|s|t|e|d|)| +0#0000000&@44
| +0#0000e05#a8a8a8255@1|#+0&#ffffff0| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|v|i|m|s|y|n|_|f|o|l|d|i|n|g| |=| |'|f|'| +0#0000000&@29
| +0#0000e05#a8a8a8255@1|#+0&#ffffff0| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |s|e|t|l| |f|d|c|=|2| |f|d|m|=|s|y|n|t|a|x| +0#0000000&@34
+| +0#0000e05#a8a8a8255@1|#+0&#ffffff0| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|9|T|h|i|s| |T|o|d|o| +0#0000000&@34
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
| +0#0000e05#a8a8a8255@1|c+0#af5f00255#ffffff0|l|a|s@1| +0#0000000&|T|e|s|t| @62
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|c+0#af5f00255&|o|n|s|t| +0#0000000&|n+0#00e0e07&|a|m|e|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g| +0#0000000&@50
@@ -15,6 +17,4 @@
|~| @73
|~| @73
|~| @73
-|~| @73
-|~| @73
| +0#0000000&@56|1|,|1| @10|A|l@1|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_for_00.dump b/runtime/syntax/testdir/dumps/vim_ex_for_00.dump
new file mode 100644
index 0000000..c13feca
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_for_00.dump
@@ -0,0 +1,20 @@
+>"+0#0000e05#ffffff0| |V|i|m| |:|f|o|r| |c|o|m@1|a|n|d| +0#0000000&@56
+@75
+@75
+|"+0#0000e05&| |:|f|o|r| |{|v|a|r|}| |i|n| |{|o|b|j|e|c|t|}| +0#0000000&@50
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|[+0#e000e06&|4+0#e000002&|2|]+0#e000e06&| +0#0000000&@59
+@75
+|f+0#af5f00255&|o|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+@2|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@64
+|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68
+@75
+|f+0#af5f00255&|o|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@49
+@2|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@64
+|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68
+@75
+|f+0#af5f00255&|o|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|i+0#af5f00255&|n| +0#0000000&@64
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62
+@2|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@64
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_for_01.dump b/runtime/syntax/testdir/dumps/vim_ex_for_01.dump
new file mode 100644
index 0000000..3ee064a
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_for_01.dump
@@ -0,0 +1,20 @@
+|e+0#af5f00255#ffffff0|n|d|f|o|r| +0#0000000&@68
+@75
+|f+0#af5f00255&|o|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|i+0#af5f00255&|n| +0#0000000&@64
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62
+@2>e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@64
+|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68
+@75
+|f+0#af5f00255&|o|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&||| |e+0#af5f00255&|n|d|f|o|r| +0#0000000&@39
+@75
+|f+0#af5f00255&|o|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|[+0#e000e06&|4+0#e000002&|2|]+0#e000e06&| +0#0000000&@59
+@2|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@64
+|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68
+@75
+|f+0#af5f00255&|o|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|[+0#e000e06&|4+0#e000002&|2|]+0#e000e06&| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&||| |e+0#af5f00255&|n|d|f|o|r| +0#0000000&@39
+@75
+|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|f|o@1|"| +0#0000000&||| |f+0#af5f00255&|o|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@46
+@2|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@64
+|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68
+@57|1|9|,|3| @9|3|1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_for_02.dump b/runtime/syntax/testdir/dumps/vim_ex_for_02.dump
new file mode 100644
index 0000000..b67143f
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_for_02.dump
@@ -0,0 +1,20 @@
+|e+0#af5f00255#ffffff0|n|d|f|o|r| +0#0000000&@68
+@75
+@75
+|"+0#0000e05&| |:|f|o|r| |[|{|v|a|r|1|}|,| |{|v|a|r|2|}|,| |.@2|]| |i|n| |{|l|i|s|t|l|i|s|t|}| +0#0000000&@32
+@75
+>l+0#af5f00255&|e|t| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|[+0#e000e06&@1|4+0#e000002&|2|,+0#0000000&| |8+0#e000002&|3|]+0#e000e06&@1| +0#0000000&@53
+@75
+|f+0#af5f00255&|o|r| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |i+0#af5f00255&|n| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@52
+@2|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@60
+|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68
+@75
+|f+0#af5f00255&|o|r| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |i+0#af5f00255&|n| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@42
+@2|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@60
+|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68
+@75
+|f+0#af5f00255&|o|r| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |i+0#af5f00255&|n| +0#0000000&@57
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62
+@2|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@60
+@57|3|7|,|1| @9|7|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_for_03.dump b/runtime/syntax/testdir/dumps/vim_ex_for_03.dump
new file mode 100644
index 0000000..3851717
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_for_03.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@1|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@60
+|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68
+@75
+|f+0#af5f00255&|o|r| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |i+0#af5f00255&|n| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&||| |e+0#af5f00255&|n|d|f|o|r| +0#0000000&@28
+@75
+>f+0#af5f00255&|o|r| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |i+0#af5f00255&|n| +0#0000000&|[+0#e000e06&@1|4+0#e000002&|2|,+0#0000000&| |8+0#e000002&|3|]+0#e000e06&@1| +0#0000000&@46
+@2|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@60
+|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68
+@75
+|f+0#af5f00255&|o|r| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |i+0#af5f00255&|n| +0#0000000&|[+0#e000e06&@1|4+0#e000002&|2|,+0#0000000&| |8+0#e000002&|3|]+0#e000e06&@1| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&||| |e+0#af5f00255&|n|d|f|o|r| +0#0000000&@22
+@75
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|5@1|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_09.dump b/runtime/syntax/testdir/dumps/vim_ex_function_09.dump
index 8a5019d..46b3c93 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_09.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_09.dump
@@ -8,7 +8,7 @@
@75
|"+0#0000e05&| |I|s@1|u|e| |#|1|6|2|4|3| |(|v|i|m|s|c|r|i|p|t| |d|e|f| |p|a|r|a|m|e|t|e|r|s| |s|y|n|t|a|x| |h|i|g|h|l|i|g|h|t| |i|s| |w|r|o|n|g|)| +0#0000000&@7
@75
-|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|T|e|s|t|(+0#e000e06&|l+0#00e0e07&|i|n|e|s| +0#0000000&|=+0#af5f00255&| +0#0000000&|[|l+0#00e0e07&|i|n|e|(+0#e000e06&|'+0#e000002&|.|'|)+0#e000e06&|,+0#0000000&| |l+0#00e0e07&|i|n|e|(+0#e000e06&|'+0#e000002&|.|'|)+0#e000e06&|]+0#0000000&|)+0#e000e06&| +0#0000000&@29
+|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|T|e|s|t|(+0#e000e06&|l+0#00e0e07&|i|n|e|s| +0#0000000&|=+0#af5f00255&| +0#0000000&|[+0#e000e06&|l+0#00e0e07&|i|n|e|(+0#e000e06&|'+0#e000002&|.|'|)+0#e000e06&|,+0#0000000&| |l+0#00e0e07&|i|n|e|(+0#e000e06&|'+0#e000002&|.|'|)+0#e000e06&|]|)| +0#0000000&@29
|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
@75
@75
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_11.dump b/runtime/syntax/testdir/dumps/vim_ex_function_11.dump
index 62f65b4..c0e9e38 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_11.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_11.dump
@@ -1,8 +1,8 @@
| +0&#ffffff0@74
|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&|F|o@1| @59
-|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&|f|o@1|.+0#af5f00255&|b+0#0000000&|a|r| @55
+|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&|f|o@1|.+0#af5f00255&|b+0#00e0e07&|a|r| +0#0000000&@55
|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1| @58
-|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&|f|o@1|.+0#af5f00255&|b+0#0000000&|a|r| @55
+|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&|f|o@1|.+0#af5f00255&|b+0#00e0e07&|a|r| +0#0000000&@55
> @74
|~+0#4040ff13&| @73
|~| @73
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_fold_10.dump b/runtime/syntax/testdir/dumps/vim_ex_function_fold_10.dump
index c655a2f..0ced9e8 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_fold_10.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_fold_10.dump
@@ -15,6 +15,6 @@
| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |d|e|l|e|t|e| |f|u|n|c|t|i|o|n| +0#0000000&@55
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
| +0#0000e05#a8a8a8255@1|d+0#af5f00255#ffffff0|e|l|f|u|n|c|t|i|o|n| +0#0000000&|F|o@1| @57
-| +0#0000e05#a8a8a8255@1|d+0#af5f00255#ffffff0|e|l|f|u|n|c|t|i|o|n| +0#0000000&|f|o@1|.+0#af5f00255&|b+0#0000000&|a|r| @53
+| +0#0000e05#a8a8a8255@1|d+0#af5f00255#ffffff0|e|l|f|u|n|c|t|i|o|n| +0#0000000&|f|o@1|.+0#af5f00255&|b+0#00e0e07&|a|r| +0#0000000&@53
| +0#0000e05#a8a8a8255@1|d+0#af5f00255#ffffff0|e|l|f|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1| @56
@57|1|8|1|,|1| @8|6|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_fold_11.dump b/runtime/syntax/testdir/dumps/vim_ex_function_fold_11.dump
index b3f901f..32ddd8b 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_fold_11.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_fold_11.dump
@@ -1,5 +1,5 @@
| +0#0000e05#a8a8a8255@1|d+0#af5f00255#ffffff0|e|l|f|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1| @56
-| +0#0000e05#a8a8a8255@1|d+0#af5f00255#ffffff0|e|l|f|u|n|c|t|i|o|n| +0#0000000&|f|o@1|.+0#af5f00255&|b+0#0000000&|a|r| @53
+| +0#0000e05#a8a8a8255@1|d+0#af5f00255#ffffff0|e|l|f|u|n|c|t|i|o|n| +0#0000000&|f|o@1|.+0#af5f00255&|b+0#00e0e07&|a|r| +0#0000000&@53
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |f|o|l|d|-|r|e|g|i|o|n| |e|n|d|i|n|g| +0#0000000&@52
diff --git a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_10.dump b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_10.dump
index 93db587..80f43cf 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_10.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_10.dump
@@ -16,5 +16,5 @@
||+0#0000e05#a8a8a8255| |A+0#e000e06#ffffff0|!|@|#|$|%|^|&|*|(|)|_|+| +0#0000000&@59
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |e|r@1|o|r| |-| |l|e|a|d|i|n|g| |l|o|w|e|r|c|a|s|e| |c|h|a|r|a|c|t|e|r| +0#0000000&@35
-| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&|<@1| +0#0000000&|a+0#af5f00255&|!|@+0#0000000&|#|$|%+0#af5f00255&|^+0#0000000&|&|*+0#af5f00255&|(+0#e000e06&|)|_+0#0000000&|++0#af5f00255&| +0#0000000&@47
+| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&|<@1| +0#0000000&|a+0#00e0e07&|!+0#0000000&|@|#|$|%+0#af5f00255&|^+0#0000000&|&|*+0#af5f00255&|(+0#e000e06&|)|_+0#0000000&|++0#af5f00255&| +0#0000000&@47
@57|1|7|9|,|1| @8|9|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_11.dump b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_11.dump
index f63b3b6..761c210 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_11.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_11.dump
@@ -1,5 +1,5 @@
-| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&|<@1| +0#0000000&|a+0#af5f00255&|!|@+0#0000000&|#|$|%+0#af5f00255&|^+0#0000000&|&|*+0#af5f00255&|(+0#e000e06&|)|_+0#0000000&|++0#af5f00255&| +0#0000000&@47
-| +0#0000e05#a8a8a8255@1|l+0#0000000#ffffff0|i|n|e|1| @67
+| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&|<@1| +0#0000000&|a+0#00e0e07&|!+0#0000000&|@|#|$|%+0#af5f00255&|^+0#0000000&|&|*+0#af5f00255&|(+0#e000e06&|)|_+0#0000000&|++0#af5f00255&| +0#0000000&@47
+| +0#0000e05#a8a8a8255@1|l+0#00e0e07#ffffff0|i|n|e|1| +0#0000000&@67
| +0#0000e05#a8a8a8255@1|l+0#0000000#ffffff0|i|n|e|2| @67
| +0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|!|@+0#0000000&|#|$|%+0#af5f00255&|^+0#0000000&|&|*+0#af5f00255&|(+0#e000e06&|)|_+0#0000000&|++0#af5f00255&| +0#0000000&@59
| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
diff --git a/runtime/syntax/testdir/dumps/vim_ex_menu_04.dump b/runtime/syntax/testdir/dumps/vim_ex_menu_04.dump
index 5c804a5..17236e2 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_menu_04.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_menu_04.dump
@@ -12,7 +12,7 @@
|"+0#0000e05&| |a| |m|e|n|u| |i|t|e|m| |n|a|m|e| |c|a|n@1|o|t| |s|t|a|r|t| |w|i|t|h| |'|.|'| +0#0000000&@34
@75
|d+0#af5f00255&|e|f| +0#0000000&|H|i|s|t|o|r|y|J|u|m|p|M|e|n|u|(+0#e000e06&|)| +0#0000000&@53
-@4|p+0#af5f00255&|o|p|u|p|.|F+0#0000000&|i|l|t|e|r|M|e|n|u|(+0#e000e06&|"+0#e000002&|J|u|m|p| |h|i|s|t|o|r|y|"|,+0#0000000&| |d+0#00e0e07&|i|r|_|h|i|s|t|,+0#0000000&| @28
+@3| +0#00e0e07&|p|o|p|u|p|.+0#af5f00255&|F+0#0000000&|i|l|t|e|r|M|e|n|u|(+0#e000e06&|"+0#e000002&|J|u|m|p| |h|i|s|t|o|r|y|"|,+0#0000000&| |d+0#00e0e07&|i|r|_|h|i|s|t|,+0#0000000&| @28
@8|(+0#e000e06&|r+0#00e0e07&|e|s|,+0#0000000&| |_+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|{+0#e000e06&| +0#0000000&@53
@12|H|i|s|t|o|r|y|J|u|m|p|(+0#e000e06&|r+0#00e0e07&|e|s|.+0#af5f00255&|t+0#00e0e07&|e|x|t|)+0#e000e06&| +0#0000000&@41
@8|}+0#e000e06&|)| +0#0000000&@64
diff --git a/runtime/syntax/testdir/dumps/vim_ex_substitute_01.dump b/runtime/syntax/testdir/dumps/vim_ex_substitute_01.dump
index a9624de..253a239 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_substitute_01.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_substitute_01.dump
@@ -12,9 +12,9 @@
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|m|a|g|i|c|/+0#e000e06&|f+0#0000000&|o@1|/+0#e000e06&|b+0#0000000&|a|r|/+0#e000e06&|&| +0#0000000&@45
|c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&||| |s+0#af5f00255&|m|a|g|i|c|/+0#e000e06&|f+0#0000000&|o@1|/+0#e000e06&|b+0#0000000&|a|r|/+0#e000e06&|c|e|g|i|I|n|p|#|l|r| +0#0000000&@36
@75
-|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|s|t|r|-+0#af5f00255&|>|s+0#00e0e07&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|s+0#00e0e07&|t|r|,+0#0000000&| |p+0#00e0e07&|a|t|,+0#0000000&| |s+0#00e0e07&|u|b|,+0#0000000&| |f+0#00e0e07&|l|a|g|s|)+0#e000e06&| +0#0000000&@27
+|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|s+0#00e0e07&|t|r|-+0#af5f00255&|>|s+0#00e0e07&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|s+0#00e0e07&|t|r|,+0#0000000&| |p+0#00e0e07&|a|t|,+0#0000000&| |s+0#00e0e07&|u|b|,+0#0000000&| |f+0#00e0e07&|l|a|g|s|)+0#e000e06&| +0#0000000&@27
@75
|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@60
| +0#af5f00255&@1|s|u|b|s|t|i|t|u|t|e|/+0#e000e06&|f+0#0000000&|o@1|/+0#e000e06&|b+0#0000000&|a|r|/+0#e000e06&| +0#0000000&@53
-@2|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|s|t|r|-+0#af5f00255&|>|s+0#00e0e07&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|s+0#00e0e07&|t|r|,+0#0000000&| |p+0#00e0e07&|a|t|,+0#0000000&| |s+0#00e0e07&|u|b|,+0#0000000&| |f+0#00e0e07&|l|a|g|s|)+0#e000e06&| +0#0000000&@25
+@2|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|s+0#00e0e07&|t|r|-+0#af5f00255&|>|s+0#00e0e07&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|s+0#00e0e07&|t|r|,+0#0000000&| |p+0#00e0e07&|a|t|,+0#0000000&| |s+0#00e0e07&|u|b|,+0#0000000&| |f+0#00e0e07&|l|a|g|s|)+0#e000e06&| +0#0000000&@25
@57|1|9|,|1| @9|1|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_substitute_02.dump b/runtime/syntax/testdir/dumps/vim_ex_substitute_02.dump
index fed54f9..b133d65 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_substitute_02.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_substitute_02.dump
@@ -1,9 +1,9 @@
-| +0&#ffffff0@1|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|s|t|r|-+0#af5f00255&|>|s+0#00e0e07&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|s+0#00e0e07&|t|r|,+0#0000000&| |p+0#00e0e07&|a|t|,+0#0000000&| |s+0#00e0e07&|u|b|,+0#0000000&| |f+0#00e0e07&|l|a|g|s|)+0#e000e06&| +0#0000000&@25
+| +0&#ffffff0@1|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|s+0#00e0e07&|t|r|-+0#af5f00255&|>|s+0#00e0e07&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|s+0#00e0e07&|t|r|,+0#0000000&| |p+0#00e0e07&|a|t|,+0#0000000&| |s+0#00e0e07&|u|b|,+0#0000000&| |f+0#00e0e07&|l|a|g|s|)+0#e000e06&| +0#0000000&@25
|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
| +0#af5f00255&@1|s|u|b|s|t|i|t|u|t|e|/+0#e000e06&|f+0#0000000&|o@1|/+0#e000e06&|b+0#0000000&|a|r|/+0#e000e06&| +0#0000000&@53
-@2>l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|s|t|r|-+0#af5f00255&|>|s+0#00e0e07&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|s+0#00e0e07&|t|r|,+0#0000000&| |p+0#00e0e07&|a|t|,+0#0000000&| |s+0#00e0e07&|u|b|,+0#0000000&| |f+0#00e0e07&|l|a|g|s|)+0#e000e06&| +0#0000000&@25
+@2>l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|s+0#00e0e07&|t|r|-+0#af5f00255&|>|s+0#00e0e07&|u|b|s|t|i|t|u|t|e|(+0#e000e06&|s+0#00e0e07&|t|r|,+0#0000000&| |p+0#00e0e07&|a|t|,+0#0000000&| |s+0#00e0e07&|u|b|,+0#0000000&| |f+0#00e0e07&|l|a|g|s|)+0#e000e06&| +0#0000000&@25
|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68
@75
|"+0#0000e05&| |v|a|r|i|o|u|s| |d|e|l|i|m|i|t|e|r|s| +0#0000000&@54
diff --git a/runtime/syntax/testdir/dumps/vim_ex_substitute_08.dump b/runtime/syntax/testdir/dumps/vim_ex_substitute_08.dump
index f19c40e..28691c9 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_substitute_08.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_substitute_08.dump
@@ -1,5 +1,5 @@
|d+0#af5f00255#ffffff0|e|f| +0#0000000&|T|e|s|t|(+0#e000e06&|)| +0#0000000&@64
-@2|s|t|r|[|s|]| @66
+@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
|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68
> @74
diff --git a/runtime/syntax/testdir/dumps/vim_ex_syntax_09.dump b/runtime/syntax/testdir/dumps/vim_ex_syntax_09.dump
index 6295921..f48fb04 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_syntax_09.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_syntax_09.dump
@@ -14,7 +14,7 @@
@75
|f+0#af5f00255&|u|n|c|t|i|o|n|!| +0#0000000&|s+0#e000e06&|:|C+0#0000000&|o|n|t|a|i|n|e|d|G|r|o|u|p|(+0#e000e06&|)| +0#0000000&@46
@2|"+0#0000e05&| |.@2| +0#0000000&@67
-@2|f+0#af5f00255&|o|r| +0#0000000&|c+0#00e0e07&|l|u|s|t|e|r| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|[|'+0#e000002&|m|a|r|k|d|o|w|n|H|i|g|h|l|i|g|h|t|_|z|s|h|'|,+0#0000000&| |'+0#e000002&|z|s|h|'|]+0#0000000&| @25
+@2|f+0#af5f00255&|o|r| +0#0000000&|c+0#00e0e07&|l|u|s|t|e|r| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|[+0#e000e06&|'+0#e000002&|m|a|r|k|d|o|w|n|H|i|g|h|l|i|g|h|t|_|z|s|h|'|,+0#0000000&| |'+0#e000002&|z|s|h|'|]+0#e000e06&| +0#0000000&@25
@4|"+0#0000e05&| |.@2| +0#0000000&@65
@2|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@66
@57|1|6|2|,|7| @8|9|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_expr_01.dump b/runtime/syntax/testdir/dumps/vim_expr_01.dump
index 8dc7041..2423dc9 100644
--- a/runtime/syntax/testdir/dumps/vim_expr_01.dump
+++ b/runtime/syntax/testdir/dumps/vim_expr_01.dump
@@ -17,4 +17,4 @@
|e+0#af5f00255&|c|h|o| +0#0000000&|'+0#e000002&|f|o@1|'+0#e000e06&@1|'+0#e000002&| +0#0000000&@62
|e+0#af5f00255&|c|h|o| +0#0000000&|'+0#e000002&|f|o@1|'+0#e000e06&@1|b+0#e000002&|a|r|'| +0#0000000&@59
@75
-@57|1|5|,|1| @10|6|%|
+@57|1|5|,|1| @10|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim_expr_02.dump b/runtime/syntax/testdir/dumps/vim_expr_02.dump
index 901b5ff..d8f3bce 100644
--- a/runtime/syntax/testdir/dumps/vim_expr_02.dump
+++ b/runtime/syntax/testdir/dumps/vim_expr_02.dump
@@ -17,4 +17,4 @@
|e+0#af5f00255&|c|h|o| +0#0000000&|$+0#e000002&|'|'+0#e000e06&@1|f+0#e000002&|o@1|'| +0#0000000&@61
|e+0#af5f00255&|c|h|o| +0#0000000&|$+0#e000002&|'|f|o@1|'+0#e000e06&@1|'+0#e000002&| +0#0000000&@61
|e+0#af5f00255&|c|h|o| +0#0000000&|$+0#e000002&|'|f|o@1|'+0#e000e06&@1|b+0#e000002&|a|r|'| +0#0000000&@58
-@57|3|2|,|0|-|1| @7|1|4|%|
+@57|3|2|,|0|-|1| @7|1|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim_expr_03.dump b/runtime/syntax/testdir/dumps/vim_expr_03.dump
index bcffddf..cc6311a 100644
--- a/runtime/syntax/testdir/dumps/vim_expr_03.dump
+++ b/runtime/syntax/testdir/dumps/vim_expr_03.dump
@@ -17,4 +17,4 @@
|e+0#af5f00255&|c|h|o| +0#0000000&@1|0+0#e000002&|o|3|7@1| +0#0000000&@63
|e+0#af5f00255&|c|h|o| +0#0000000&@1|0+0#e000002&|O|3|7@1| +0#0000000&@63
|e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|0+0#e000002&|3|7@1| +0#0000000&@64
-@57|5|0|,|1| @9|2|4|%|
+@57|5|0|,|1| @9|2|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim_expr_04.dump b/runtime/syntax/testdir/dumps/vim_expr_04.dump
index 08c2f98..496b691 100644
--- a/runtime/syntax/testdir/dumps/vim_expr_04.dump
+++ b/runtime/syntax/testdir/dumps/vim_expr_04.dump
@@ -17,4 +17,4 @@
|e+0#af5f00255&|c|h|o| +0#0000000&|1+0#e000002&|.|0|E|-|6| +0#0000000&@63
|e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|3+0#e000002&|.|1|4|1|6|e|+|8@1| +0#0000000&@58
@75
-@57|6|8|,|1| @9|3|4|%|
+@57|6|8|,|1| @9|2|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim_expr_05.dump b/runtime/syntax/testdir/dumps/vim_expr_05.dump
index c927b11..9a327cb 100644
--- a/runtime/syntax/testdir/dumps/vim_expr_05.dump
+++ b/runtime/syntax/testdir/dumps/vim_expr_05.dump
@@ -5,16 +5,16 @@
|e+0#af5f00255&|c|h|o| +0#0000000&|0+0#e000002&|z|F@1|0@1|.|E|D|0|1|.|5|D|A|F| +0#0000000&@53
>e+0#af5f00255&|c|h|o| +0#0000000&|0+0#e000002&|z|F@1|.|0@1|.|E|D|.|0|1|.|5|D|.|A|F| +0#0000000&@50
@75
-|"+0#0000e05&| |O|p|e|r|a|t|o|r|s| +0#0000000&@63
+|"+0#0000e05&| |L|i|s|t| +0#0000000&@68
@75
-|"+0#0000e05&| |T|e|r|n|a|r|y| +0#0000000&@65
-|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|?+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|:+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+|e+0#af5f00255&|c|h|o| +0#0000000&|[+0#e000e06&|]| +0#0000000&@67
+|e+0#af5f00255&|c|h|o| +0#0000000&|[+0#e000e06&|4+0#e000002&|2|]+0#e000e06&| +0#0000000&@65
+|e+0#af5f00255&|c|h|o| +0#0000000&|[+0#e000e06&@1|1+0#e000002&@1|,+0#0000000&| |1+0#e000002&|2|]+0#e000e06&|,+0#0000000&| |[+0#e000e06&|2+0#e000002&|1|,+0#0000000&| |2+0#e000002&@1|]+0#e000e06&|,+0#0000000&| |[+0#e000e06&|3+0#e000002&|1|,+0#0000000&| |3+0#e000002&|2|]+0#e000e06&@1| +0#0000000&@39
+|e+0#af5f00255&|c|h|o| +0#0000000&|[+0#e000e06&|1+0#e000002&|,+0#0000000&| @66
+@6|\+0#e000e06&| +0#0000000&|2+0#e000002&|,+0#0000000&| @64
+@6|\+0#e000e06&| +0#0000000&|3+0#e000002&|,+0#0000000&| @64
+@6|\+0#e000e06&| +0#0000000&|4+0#e000002&| +0#0000000&@65
+@6|\+0#e000e06&|]| +0#0000000&@66
+|e+0#af5f00255&|c|h|o| +0#0000000&|[+0#e000e06&|1+0#e000002&|,+0#0000000&| |'+0#e000002&|t|w|o|'|,+0#0000000&| |1+0#e000002&| +0#0000000&|++0#af5f00255&| +0#0000000&|2+0#e000002&|,+0#0000000&| |"+0#e000002&|f|o|"| +0#0000000&|.+0#af5f00255&@1| +0#0000000&|"+0#e000002&|u|r|"|]+0#e000e06&| +0#0000000&@38
@75
-|e+0#af5f00255&|c|h|o| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|1+0#e000002&| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|t|o|p|"| +0#0000000&|:+0#af5f00255&| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&@45
-|e+0#af5f00255&|c|h|o| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|1+0#e000002&| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|t|o|p|"| +0#0000000&|:+0#af5f00255&| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|1+0#e000002&|0@2| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|l|a|s|t|"| +0#0000000&|:+0#af5f00255&| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&@21
-@75
-|e+0#af5f00255&|c|h|o| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|1+0#e000002&| +0#0000000&@60
-@6|\+0#e000e06&| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|t|o|p|"| +0#0000000&@59
-@6|\+0#e000e06&| +0#0000000&|:+0#af5f00255&| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|1+0#e000002&|0@2| +0#0000000&@52
-@6|\+0#e000e06&| +0#0000000&@8|?+0#af5f00255&| +0#0000000&|"+0#e000002&|l|a|s|t|"| +0#0000000&@50
-@57|8|6|,|1| @9|4@1|%|
+@57|8|6|,|1| @9|3|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_expr_06.dump b/runtime/syntax/testdir/dumps/vim_expr_06.dump
index b1b7e4b..b9ddc4f 100644
--- a/runtime/syntax/testdir/dumps/vim_expr_06.dump
+++ b/runtime/syntax/testdir/dumps/vim_expr_06.dump
@@ -1,20 +1,20 @@
-| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&@8|?+0#af5f00255&| +0#0000000&|"+0#e000002&|l|a|s|t|"| +0#0000000&@50
+| +0&#ffffff0@74
+|"+0#0000e05&| |I|s@1|u|e| |#|5|8|3|0| |(|I|n|c|o|r@1|e|c|t| |s|y|n|t|a|x| |h|i|g|h|l|i|g|h|t|i|n|g| |i|n| |V|i|m| |s|c|r|i|p|t| |w|h|e|n| |o|m|i|t@1|i|n|g| |s|p
+|a|c|e| |i|n| |l|i|s|t| |o|f| |s|t|r|i|n|g|)| +0#0000000&@52
+|l+0#af5f00255&|e|t| +0#0000000&|l+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|[+0#e000e06&|'+0#e000002&|a|'|,+0#0000000&|'+0#e000002&|b|'|,+0#0000000&|'+0#e000002&|c|'|]+0#e000e06&| +0#0000000&@53
+@75
+>"+0#0000e05&| |O|p|e|r|a|t|o|r|s| +0#0000000&@63
+@75
+|"+0#0000e05&| |T|e|r|n|a|r|y| +0#0000000&@65
+|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|?+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|:+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+@75
+|e+0#af5f00255&|c|h|o| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|1+0#e000002&| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|t|o|p|"| +0#0000000&|:+0#af5f00255&| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&@45
+|e+0#af5f00255&|c|h|o| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|1+0#e000002&| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|t|o|p|"| +0#0000000&|:+0#af5f00255&| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|1+0#e000002&|0@2| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|l|a|s|t|"| +0#0000000&|:+0#af5f00255&| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&@21
+@75
+|e+0#af5f00255&|c|h|o| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|1+0#e000002&| +0#0000000&@60
+@6|\+0#e000e06&| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|t|o|p|"| +0#0000000&@59
+@6|\+0#e000e06&| +0#0000000&|:+0#af5f00255&| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|1+0#e000002&|0@2| +0#0000000&@52
+@6|\+0#e000e06&| +0#0000000&@8|?+0#af5f00255&| +0#0000000&|"+0#e000002&|l|a|s|t|"| +0#0000000&@50
@6|\+0#e000e06&| +0#0000000&@8|:+0#af5f00255&| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&@52
|e+0#af5f00255&|c|h|o| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|1+0#e000002&| +0#0000000&|?+0#af5f00255&| +0#0000000&@58
-@6|\+0#e000e06&| +0#0000000&|"+0#e000002&|t|o|p|"| +0#0000000&|:+0#af5f00255&| +0#0000000&@59
-@6|\+0#e000e06&| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|1+0#e000002&|0@2| +0#0000000&|?+0#af5f00255&| +0#0000000&@52
-@6>\+0#e000e06&| +0#0000000&@8|"+0#e000002&|l|a|s|t|"| +0#0000000&|:+0#af5f00255&| +0#0000000&@50
-@6|\+0#e000e06&| +0#0000000&@8|l+0#00e0e07&|n|u|m| +0#0000000&@54
-@75
-|e+0#af5f00255&|c|h|o| +0#0000000&|1+0#e000002&| +0#0000000&|?+0#af5f00255&| +0#0000000&|1+0#e000002&| +0#0000000&|:+0#af5f00255&| +0#0000000&|0+0#e000002&| +0#0000000&@60
-|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|f|o@1|"| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|f|o@1|"| +0#0000000&|:+0#af5f00255&| +0#0000000&|"+0#e000002&|b|a|r|"| +0#0000000&@48
-|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|?+0#af5f00255&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|:+0#af5f00255&| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@54
-|e+0#af5f00255&|c|h|o| +0#0000000&|g+0#00e0e07&|:|f|o@1| +0#0000000&|?+0#af5f00255&| +0#0000000&|g+0#00e0e07&|:|f|o@1| +0#0000000&|:+0#af5f00255&| +0#0000000&|g+0#00e0e07&|:|b|a|r| +0#0000000&@48
-|e+0#af5f00255&|c|h|o| +0#0000000&|$+0#e000e06&|F|O@1| +0#0000000&|?+0#af5f00255&| +0#0000000&|$+0#e000e06&|F|O@1| +0#0000000&|:+0#af5f00255&| +0#0000000&|$+0#e000e06&|B|A|R| +0#0000000&@51
-|e+0#af5f00255&|c|h|o| +0#0000000&|T|r|u|e|(+0#e000e06&|)| +0#0000000&|?+0#af5f00255&| +0#0000000&|T|r|u|e|(+0#e000e06&|)| +0#0000000&|:+0#af5f00255&| +0#0000000&|F|a|l|s|e|(+0#e000e06&|)| +0#0000000&@44
-|e+0#af5f00255&|c|h|o| +0#0000000&|@+0#e000e06&|a| +0#0000000&|?+0#af5f00255&| +0#0000000&|@+0#e000e06&|a| +0#0000000&|:+0#af5f00255&| +0#0000000&|@+0#e000e06&|b| +0#0000000&@57
-|e+0#af5f00255&|c|h|o| +0#0000000&|(+0#e000e06&|1+0#e000002&|)+0#e000e06&| +0#0000000&|?+0#af5f00255&| +0#0000000&|(+0#e000e06&|1+0#e000002&|)+0#e000e06&| +0#0000000&|:+0#af5f00255&| +0#0000000&|(+0#e000e06&|0+0#e000002&|)+0#e000e06&| +0#0000000&@54
-@75
-|"+0#0000e05&| |F|a|l|s|y| +0#0000000&@67
-|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
-@57|1|0|4|,|7| @8|5|4|%|
+@57|1|0|3|,|1| @8|4|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim_expr_07.dump b/runtime/syntax/testdir/dumps/vim_expr_07.dump
index d0aafdd..ce41dd0 100644
--- a/runtime/syntax/testdir/dumps/vim_expr_07.dump
+++ b/runtime/syntax/testdir/dumps/vim_expr_07.dump
@@ -1,20 +1,20 @@
-|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|1+0#e000002&| +0#0000000&|?+0#af5f00255&| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|"+0#e000002&|t|o|p|"| +0#0000000&|:+0#af5f00255&| +0#0000000&@59
+@6|\+0#e000e06&| +0#0000000&|l+0#00e0e07&|n|u|m| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|1+0#e000002&|0@2| +0#0000000&|?+0#af5f00255&| +0#0000000&@52
+@6|\+0#e000e06&| +0#0000000&@8|"+0#e000002&|l|a|s|t|"| +0#0000000&|:+0#af5f00255&| +0#0000000&@50
+@6|\+0#e000e06&| +0#0000000&@8|l+0#00e0e07&|n|u|m| +0#0000000&@54
+> @74
+|e+0#af5f00255&|c|h|o| +0#0000000&|1+0#e000002&| +0#0000000&|?+0#af5f00255&| +0#0000000&|1+0#e000002&| +0#0000000&|:+0#af5f00255&| +0#0000000&|0+0#e000002&| +0#0000000&@60
+|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|f|o@1|"| +0#0000000&|?+0#af5f00255&| +0#0000000&|"+0#e000002&|f|o@1|"| +0#0000000&|:+0#af5f00255&| +0#0000000&|"+0#e000002&|b|a|r|"| +0#0000000&@48
+|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|?+0#af5f00255&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|:+0#af5f00255&| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@54
+|e+0#af5f00255&|c|h|o| +0#0000000&|g+0#00e0e07&|:|f|o@1| +0#0000000&|?+0#af5f00255&| +0#0000000&|g+0#00e0e07&|:|f|o@1| +0#0000000&|:+0#af5f00255&| +0#0000000&|g+0#00e0e07&|:|b|a|r| +0#0000000&@48
+|e+0#af5f00255&|c|h|o| +0#0000000&|$+0#e000e06&|F|O@1| +0#0000000&|?+0#af5f00255&| +0#0000000&|$+0#e000e06&|F|O@1| +0#0000000&|:+0#af5f00255&| +0#0000000&|$+0#e000e06&|B|A|R| +0#0000000&@51
+|e+0#af5f00255&|c|h|o| +0#0000000&|T|r|u|e|(+0#e000e06&|)| +0#0000000&|?+0#af5f00255&| +0#0000000&|T|r|u|e|(+0#e000e06&|)| +0#0000000&|:+0#af5f00255&| +0#0000000&|F|a|l|s|e|(+0#e000e06&|)| +0#0000000&@44
+|e+0#af5f00255&|c|h|o| +0#0000000&|@+0#e000e06&|a| +0#0000000&|?+0#af5f00255&| +0#0000000&|@+0#e000e06&|a| +0#0000000&|:+0#af5f00255&| +0#0000000&|@+0#e000e06&|b| +0#0000000&@57
+|e+0#af5f00255&|c|h|o| +0#0000000&|(+0#e000e06&|1+0#e000002&|)+0#e000e06&| +0#0000000&|?+0#af5f00255&| +0#0000000&|(+0#e000e06&|1+0#e000002&|)+0#e000e06&| +0#0000000&|:+0#af5f00255&| +0#0000000&|(+0#e000e06&|0+0#e000002&|)+0#e000e06&| +0#0000000&@54
+@75
+|"+0#0000e05&| |F|a|l|s|y| +0#0000000&@67
+|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
@75
|e+0#af5f00255&|c|h|o| +0#0000000&|t+0#00e0e07&|h|e|L|i|s|t| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|'+0#e000002&|l|i|s|t| |i|s| |e|m|p|t|y|'| +0#0000000&@43
-|e+0#af5f00255&|c|h|o| +0#0000000&|G|e|t|N|a|m|e|(+0#e000e06&|)| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|'+0#e000002&|u|n|k|n|o|w|n|'| +0#0000000&@47
-@75
->e+0#af5f00255&|c|h|o| +0#0000000&|t+0#00e0e07&|h|e|L|i|s|t| +0#0000000&@62
-@6|\+0#e000e06&| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|'+0#e000002&|l|i|s|t| |i|s| |e|m|p|t|y|'| +0#0000000&@48
-|e+0#af5f00255&|c|h|o| +0#0000000&|t+0#00e0e07&|h|e|L|i|s|t| +0#0000000&|?+0#af5f00255&@1| +0#0000000&@59
-@6|\+0#e000e06&| +0#0000000&|'+0#e000002&|l|i|s|t| |i|s| |e|m|p|t|y|'| +0#0000000&@51
-@75
-|e+0#af5f00255&|c|h|o| +0#0000000&|1+0#e000002&| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|1+0#e000002&| +0#0000000&@63
-|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|f|o@1|"| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|"+0#e000002&|f|o@1|"| +0#0000000&@55
-|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@59
-|e+0#af5f00255&|c|h|o| +0#0000000&|g+0#00e0e07&|:|f|o@1| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|g+0#00e0e07&|:|f|o@1| +0#0000000&@55
-|e+0#af5f00255&|c|h|o| +0#0000000&|$+0#e000e06&|F|O@1| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|$+0#e000e06&|F|O@1| +0#0000000&@57
-|e+0#af5f00255&|c|h|o| +0#0000000&|T|r|u|e|(+0#e000e06&|)| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|T|r|u|e|(+0#e000e06&|)| +0#0000000&@53
-|e+0#af5f00255&|c|h|o| +0#0000000&|@+0#e000e06&|a| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|@+0#e000e06&|a| +0#0000000&@61
-|e+0#af5f00255&|c|h|o| +0#0000000&|(+0#e000e06&|1+0#e000002&|)+0#e000e06&| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|(+0#e000e06&|1+0#e000002&|)+0#e000e06&| +0#0000000&@59
-@75
-@57|1|2@1|,|1| @8|6|4|%|
+@57|1|2|1|,|0|-|1| @6|5|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim_expr_08.dump b/runtime/syntax/testdir/dumps/vim_expr_08.dump
index 8670b55..fa3a2fe 100644
--- a/runtime/syntax/testdir/dumps/vim_expr_08.dump
+++ b/runtime/syntax/testdir/dumps/vim_expr_08.dump
@@ -1,20 +1,20 @@
-| +0&#ffffff0@74
+|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|t+0#00e0e07&|h|e|L|i|s|t| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|'+0#e000002&|l|i|s|t| |i|s| |e|m|p|t|y|'| +0#0000000&@43
+|e+0#af5f00255&|c|h|o| +0#0000000&|G|e|t|N|a|m|e|(+0#e000e06&|)| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|'+0#e000002&|u|n|k|n|o|w|n|'| +0#0000000&@47
+@75
+|e+0#af5f00255&|c|h|o| +0#0000000&|t+0#00e0e07&|h|e|L|i|s|t| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|'+0#e000002&|l|i|s|t| |i|s| |e|m|p|t|y|'| +0#0000000&@48
+>e+0#af5f00255&|c|h|o| +0#0000000&|t+0#00e0e07&|h|e|L|i|s|t| +0#0000000&|?+0#af5f00255&@1| +0#0000000&@59
+@6|\+0#e000e06&| +0#0000000&|'+0#e000002&|l|i|s|t| |i|s| |e|m|p|t|y|'| +0#0000000&@51
+@75
+|e+0#af5f00255&|c|h|o| +0#0000000&|1+0#e000002&| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|1+0#e000002&| +0#0000000&@63
+|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|f|o@1|"| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|"+0#e000002&|f|o@1|"| +0#0000000&@55
+|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@59
+|e+0#af5f00255&|c|h|o| +0#0000000&|g+0#00e0e07&|:|f|o@1| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|g+0#00e0e07&|:|f|o@1| +0#0000000&@55
+|e+0#af5f00255&|c|h|o| +0#0000000&|$+0#e000e06&|F|O@1| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|$+0#e000e06&|F|O@1| +0#0000000&@57
+|e+0#af5f00255&|c|h|o| +0#0000000&|T|r|u|e|(+0#e000e06&|)| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|T|r|u|e|(+0#e000e06&|)| +0#0000000&@53
+|e+0#af5f00255&|c|h|o| +0#0000000&|@+0#e000e06&|a| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|@+0#e000e06&|a| +0#0000000&@61
+|e+0#af5f00255&|c|h|o| +0#0000000&|(+0#e000e06&|1+0#e000002&|)+0#e000e06&| +0#0000000&|?+0#af5f00255&@1| +0#0000000&|(+0#e000e06&|1+0#e000002&|)+0#e000e06&| +0#0000000&@59
+@75
|"+0#0000e05&| |C|o|m|p|a|r|i|s|o|n| |-| |u|s|i|n|g| |'|i|g|n|o|r|c|a|s|e|'| +0#0000000&@42
|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|=+0#af5f00255&@1| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53
-|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|!+0#af5f00255&|=| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53
-|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|>+0#af5f00255&| +0#0000000&@5|e+0#00e0e07&|x|p|r| +0#0000000&@53
->e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|>+0#af5f00255&|=| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53
-|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|<+0#af5f00255&| +0#0000000&@5|e+0#00e0e07&|x|p|r| +0#0000000&@53
-|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|<+0#af5f00255&|=| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53
-|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|=+0#af5f00255&|~| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53
-|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|!+0#af5f00255&|~| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53
-|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|i+0#af5f00255&|s| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53
-|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|i+0#af5f00255&|s|n|o|t| +0#0000000&@1|e+0#00e0e07&|x|p|r| +0#0000000&@53
-@75
-|"+0#0000e05&| |C|o|m|p|a|r|i|s|o|n| |-| |m|a|t|c|h| |c|a|s|e| +0#0000000&@49
-|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|=+0#af5f00255&@1|#| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53
-|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|!+0#af5f00255&|=|#| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53
-|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|>+0#af5f00255&|#| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53
-|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|>+0#af5f00255&|=|#| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53
-|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|<+0#af5f00255&|#| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53
-@57|1|4|0|,|1| @8|7|4|%|
+@57|1|3|9|,|1| @8|6|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim_expr_09.dump b/runtime/syntax/testdir/dumps/vim_expr_09.dump
index 106ba75..786fbc3 100644
--- a/runtime/syntax/testdir/dumps/vim_expr_09.dump
+++ b/runtime/syntax/testdir/dumps/vim_expr_09.dump
@@ -1,20 +1,20 @@
-|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|<+0#af5f00255&|#| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|=+0#af5f00255&@1| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|!+0#af5f00255&|=| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|>+0#af5f00255&| +0#0000000&@5|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|>+0#af5f00255&|=| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|<+0#af5f00255&| +0#0000000&@5|e+0#00e0e07&|x|p|r| +0#0000000&@53
+>e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|<+0#af5f00255&|=| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|=+0#af5f00255&|~| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|!+0#af5f00255&|~| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|i+0#af5f00255&|s| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|i+0#af5f00255&|s|n|o|t| +0#0000000&@1|e+0#00e0e07&|x|p|r| +0#0000000&@53
+@75
+|"+0#0000e05&| |C|o|m|p|a|r|i|s|o|n| |-| |m|a|t|c|h| |c|a|s|e| +0#0000000&@49
+|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|=+0#af5f00255&@1|#| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|!+0#af5f00255&|=|#| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|>+0#af5f00255&|#| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|>+0#af5f00255&|=|#| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|<+0#af5f00255&|#| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53
|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|<+0#af5f00255&|=|#| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53
|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|=+0#af5f00255&|~|#| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53
-|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|!+0#af5f00255&|~|#| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53
-|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|i+0#af5f00255&|s|#| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53
->e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|i+0#af5f00255&|s|n|o|t|#| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
-@75
-|"+0#0000e05&| |C|o|m|p|a|r|i|s|o|n| |-| |i|g|n|o|r|e| |c|a|s|e| +0#0000000&@48
-|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|=+0#af5f00255&@1|?| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53
-|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|!+0#af5f00255&|=|?| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53
-|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|>+0#af5f00255&|?| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53
-|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|>+0#af5f00255&|=|?| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53
-|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|<+0#af5f00255&|?| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53
-|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|<+0#af5f00255&|=|?| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53
-|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|=+0#af5f00255&|~|?| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53
-|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|!+0#af5f00255&|~|?| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53
-|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|i+0#af5f00255&|s|?| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53
-|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|i+0#af5f00255&|s|n|o|t|?| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
-@75
-@57|1|5|8|,|1| @8|8|4|%|
+@57|1|5|7|,|1| @8|7|1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_expr_10.dump b/runtime/syntax/testdir/dumps/vim_expr_10.dump
index 35de769..6f6eeec 100644
--- a/runtime/syntax/testdir/dumps/vim_expr_10.dump
+++ b/runtime/syntax/testdir/dumps/vim_expr_10.dump
@@ -1,20 +1,20 @@
-| +0&#ffffff0@74
-|"+0#0000e05&| |U|n|r|e|p|o|r|t|e|d| |i|s@1|u|e| |(|i|n|c|o|r@1|e|c|t|l|y| |m|a|t|c|h|e|s| |a|s| |"+0#e000002&|e|c|h|o| |v|i|m|N|u|m|b|e|r| |*|v|i|m|C|o|m@1|a|n|d|*| |v|i|m
-|N|u|m|b|e|r|"|)+0#0000e05&| +0#0000000&@66
-|e+0#af5f00255&|c|h|o| +0#0000000&|4+0#e000002&|2| +0#0000000&|i+0#af5f00255&|s| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
+|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|=+0#af5f00255&|~|#| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|!+0#af5f00255&|~|#| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|i+0#af5f00255&|s|#| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|i+0#af5f00255&|s|n|o|t|#| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
@75
-> @74
-|"+0#0000e05&| |I|s@1|u|e| |#|1|6|2@1|1| |(|v|i|m|S|t|r|i|n|g| |b|e|c|o|m|e|s| |v|i|m|V|a|r| |w|h|e|n| |p|r|e|c|e|d|e|d| |b|y| |!|)| +0#0000000&@14
-|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|!+0#af5f00255&|'+0#e000002&|g|:|b|a|r|'|-+0#af5f00255&|>|e+0#00e0e07&|x|i|s|t|s|(+0#e000e06&|)| +0#0000000&@46
+>"+0#0000e05&| |C|o|m|p|a|r|i|s|o|n| |-| |i|g|n|o|r|e| |c|a|s|e| +0#0000000&@48
+|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|=+0#af5f00255&@1|?| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|!+0#af5f00255&|=|?| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|>+0#af5f00255&|?| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|>+0#af5f00255&|=|?| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|<+0#af5f00255&|?| +0#0000000&@4|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|<+0#af5f00255&|=|?| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|=+0#af5f00255&|~|?| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|!+0#af5f00255&|~|?| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|i+0#af5f00255&|s|?| +0#0000000&@3|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|e+0#af5f00255&|c|h|o| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|i+0#af5f00255&|s|n|o|t|?| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
@75
-@75
-|"+0#0000e05&| |I|s@1|u|e| |#|1|4@1|2|3| |(|v|i|m|.|v|i|m|:| |O|p|t| |o|u|t| |o|f| |v|i|m|S|e|a|r|c|h|*|)| +0#0000000&@27
-@75
-|?+0#e000e06&|t+0#e000002&|r|u|t|h|y| +0#0000000&@67
-|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|r|u|t|h|y| +0#0000000&|=+0#af5f00255&| +0#0000000&|0+0#e000002&| +0#0000000&@60
-|\+0#e000e06&| +0#0000000&@2|?+0#af5f00255&| +0#0000000&|(+0#e000e06&|0+0#e000002&| +0#0000000&@66
-|\+0#e000e06&| +0#0000000&@2|)+0#e000e06&| +0#0000000&@69
-|\+0#e000e06&| +0#0000000&@2|:+0#af5f00255&| +0#0000000&|(+0#e000e06&|1+0#e000002&| +0#0000000&@66
-|\+0#e000e06&| +0#0000000&@2|)+0#e000e06&| +0#0000000&@69
-|e+0#af5f00255&|c|h|o| +0#0000000&|t+0#00e0e07&|r|u|t|h|y| +0#0000000&@63
-@57|1|7|5|,|0|-|1| @6|9|3|%|
+|"+0#0000e05&| |U|n|r|e|p|o|r|t|e|d| |i|s@1|u|e| |(|"|i|s|"| |i|n|c|o|r@1|e|c|t|l|y| |m|a|t|c|h|e|s| |a|s| |"+0#e000002&|e|c|h|o| |v|i|m|N|u|m|b|e|r| |*|v|i|m|C|o|m@1|a|n|d
+|*| |v|i|m|N|u|m|b|e|r|"|)+0#0000e05&| +0#0000000&@61
+@57|1|7|5|,|1| @8|7|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim_expr_11.dump b/runtime/syntax/testdir/dumps/vim_expr_11.dump
index 50d5773..ddefe39 100644
--- a/runtime/syntax/testdir/dumps/vim_expr_11.dump
+++ b/runtime/syntax/testdir/dumps/vim_expr_11.dump
@@ -1,20 +1,20 @@
-|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|t+0#00e0e07&|r|u|t|h|y| +0#0000000&@63
+|"+0#0000e05#ffffff0| |U|n|r|e|p|o|r|t|e|d| |i|s@1|u|e| |(|"|i|s|"| |i|n|c|o|r@1|e|c|t|l|y| |m|a|t|c|h|e|s| |a|s| |"+0#e000002&|e|c|h|o| |v|i|m|N|u|m|b|e|r| |*|v|i|m|C|o|m@1|a|n|d
+|*| |v|i|m|N|u|m|b|e|r|"|)+0#0000e05&| +0#0000000&@61
+|e+0#af5f00255&|c|h|o| +0#0000000&|4+0#e000002&|2| +0#0000000&|i+0#af5f00255&|s| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
@75
-|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@60
-| +0#e000002&@1|?+0#e000e06&|t+0#e000002&|r|u|t|h|y| +0#0000000&@65
-@2|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|r|u|t|h|y| +0#0000000&|=+0#af5f00255&| +0#0000000&|0+0#e000002&| +0#0000000&@58
-@2>\+0#e000e06&| +0#0000000&@2|?+0#af5f00255&| +0#0000000&|(+0#e000e06&|0+0#e000002&| +0#0000000&@64
-@2|\+0#e000e06&| +0#0000000&@2|)+0#e000e06&| +0#0000000&@67
-@2|\+0#e000e06&| +0#0000000&@2|:+0#af5f00255&| +0#0000000&|(+0#e000e06&|1+0#e000002&| +0#0000000&@64
-@2|\+0#e000e06&| +0#0000000&@2|)+0#e000e06&| +0#0000000&@67
-@2|e+0#af5f00255&|c|h|o| +0#0000000&|t+0#00e0e07&|r|u|t|h|y| +0#0000000&@61
-|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
+|"+0#0000e05&| |L|i|n|e| |c|o|n|t|i|n|u|a|t|i|o|n| +0#0000000&@55
+>l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|++0#af5f00255&| +0#0000000&@59
+@6|\+0#e000e06&| +0#0000000&@67
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&@67
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|++0#af5f00255&| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|"+0#e000002&|b|a|z|"| +0#0000000&@61
@75
-|~+0#4040ff13&| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-| +0#0000000&@56|1|9|3|,|3| @8|B|o|t|
+|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|++0#af5f00255&| +0#0000000&@59
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&@67
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&@67
+@6|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|++0#af5f00255&| +0#0000000&@61
+@57|1|9|1|,|1| @8|8|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_expr_12.dump b/runtime/syntax/testdir/dumps/vim_expr_12.dump
new file mode 100644
index 0000000..4accca7
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_expr_12.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|++0#af5f00255&| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|"+0#e000002&|b|a|z|"| +0#0000000&@61
+@75
+@75
+|"+0#0000e05&| |I|s@1|u|e| |#|1|6|2@1|1| |(|v|i|m|S|t|r|i|n|g| |b|e|c|o|m|e|s| |v|i|m|V|a|r| |w|h|e|n| |p|r|e|c|e|d|e|d| |b|y| |!|)| +0#0000000&@14
+>l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|!+0#af5f00255&|'+0#e000002&|g|:|b|a|r|'|-+0#af5f00255&|>|e+0#00e0e07&|x|i|s|t|s|(+0#e000e06&|)| +0#0000000&@46
+@75
+@75
+|"+0#0000e05&| |I|s@1|u|e| |#|1|4@1|2|3| |(|v|i|m|.|v|i|m|:| |O|p|t| |o|u|t| |o|f| |v|i|m|S|e|a|r|c|h|*|)| +0#0000000&@27
+@75
+|?+0#e000e06&|t+0#e000002&|r|u|t|h|y| +0#0000000&@67
+|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|r|u|t|h|y| +0#0000000&|=+0#af5f00255&| +0#0000000&|0+0#e000002&| +0#0000000&@60
+|\+0#e000e06&| +0#0000000&@2|?+0#af5f00255&| +0#0000000&|(+0#e000e06&|0+0#e000002&| +0#0000000&@66
+|\+0#e000e06&| +0#0000000&@2|)+0#e000e06&| +0#0000000&@69
+|\+0#e000e06&| +0#0000000&@2|:+0#af5f00255&| +0#0000000&|(+0#e000e06&|1+0#e000002&| +0#0000000&@66
+|\+0#e000e06&| +0#0000000&@2|)+0#e000e06&| +0#0000000&@69
+|e+0#af5f00255&|c|h|o| +0#0000000&|t+0#00e0e07&|r|u|t|h|y| +0#0000000&@63
+@75
+|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@60
+@57|2|0|9|,|1| @8|9|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim_expr_13.dump b/runtime/syntax/testdir/dumps/vim_expr_13.dump
new file mode 100644
index 0000000..f5644bd
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_expr_13.dump
@@ -0,0 +1,20 @@
+|f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@60
+| +0#e000002&@1|?+0#e000e06&|t+0#e000002&|r|u|t|h|y| +0#0000000&@65
+@2|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|r|u|t|h|y| +0#0000000&|=+0#af5f00255&| +0#0000000&|0+0#e000002&| +0#0000000&@58
+@2|\+0#e000e06&| +0#0000000&@2|?+0#af5f00255&| +0#0000000&|(+0#e000e06&|0+0#e000002&| +0#0000000&@64
+@2|\+0#e000e06&| +0#0000000&@2|)+0#e000e06&| +0#0000000&@67
+@2>\+0#e000e06&| +0#0000000&@2|:+0#af5f00255&| +0#0000000&|(+0#e000e06&|1+0#e000002&| +0#0000000&@64
+@2|\+0#e000e06&| +0#0000000&@2|)+0#e000e06&| +0#0000000&@67
+@2|e+0#af5f00255&|c|h|o| +0#0000000&|t+0#00e0e07&|r|u|t|h|y| +0#0000000&@61
+|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
+@75
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|2@1|7|,|3| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_function_variables_00.dump b/runtime/syntax/testdir/dumps/vim_function_variables_00.dump
new file mode 100644
index 0000000..8e12eae
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_variables_00.dump
@@ -0,0 +1,20 @@
+>"+0#0000e05#ffffff0| |V|i|m| |f|u|n|c|t|i|o|n| |v|a|r|i|a|b|l|e| |h|i|g|h|l|i|g|h|t|i|n|g| +0#0000000&@38
+@75
+|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@60
+@2|"+0#0000e05&| |:|l|e|t| +0#0000000&@66
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1|[+0#0000000&|0+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+@2|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1|[+0#0000000&|:|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+@2|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+@2|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1|[+0#0000000&|:|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1|[+0#0000000&|"+0#e000002&|k|e|y|"|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+@2|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1|[+0#0000000&|'+0#e000002&|k|e|y|'|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+@2|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim_function_variables_01.dump b/runtime/syntax/testdir/dumps/vim_function_variables_01.dump
new file mode 100644
index 0000000..c86a8f5
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_variables_01.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+@2|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1|[+0#0000000&|"+0#e000002&|k|e|y|"|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+@2|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1|[+0#0000000&|'+0#e000002&|k|e|y|'|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+@2>l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+@2|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+@2|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+@2|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+@2|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|.+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+@2|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|:|f|o@1|[+0#0000000&|0+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|:|f|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+@2|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|:|f|o@1|[+0#0000000&|:|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@52
+@2|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|:|f|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@52
+@57|1|9|,|3| @10|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim_function_variables_02.dump b/runtime/syntax/testdir/dumps/vim_function_variables_02.dump
new file mode 100644
index 0000000..77fe629
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_variables_02.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@1|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|:|f|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@52
+@2|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|:|f|o@1|[+0#0000000&|:|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|f|o@1|[+0#0000000&|"+0#e000002&|k|e|y|"|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@50
+@2|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|f|o@1|[+0#0000000&|'+0#e000002&|k|e|y|'|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@50
+> @74
+@2|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|:|f|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|:|f|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|:|f|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|g+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|g+0#00e0e07&|:|f|o@1|[+0#0000000&|0+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|g+0#00e0e07&|:|f|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+@57|3|7|,|0|-|1| @8|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_function_variables_03.dump b/runtime/syntax/testdir/dumps/vim_function_variables_03.dump
new file mode 100644
index 0000000..64b3c01
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_variables_03.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@1|l+0#af5f00255&|e|t| +0#0000000&|g+0#00e0e07&|:|f|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+@2|l+0#af5f00255&|e|t| +0#0000000&|g+0#00e0e07&|:|f|o@1|[+0#0000000&|:|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@52
+@2|l+0#af5f00255&|e|t| +0#0000000&|g+0#00e0e07&|:|f|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@52
+@2|l+0#af5f00255&|e|t| +0#0000000&|g+0#00e0e07&|:|f|o@1|[+0#0000000&|:|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+@75
+@2>l+0#af5f00255&|e|t| +0#0000000&|g+0#00e0e07&|:|f|o@1|[+0#0000000&|"+0#e000002&|k|e|y|"|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49
+@2|l+0#af5f00255&|e|t| +0#0000000&|g+0#00e0e07&|:|f|o@1|[+0#0000000&|'+0#e000002&|k|e|y|'|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|g+0#00e0e07&|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|g+0#00e0e07&|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|g+0#00e0e07&|:|f|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|g+0#00e0e07&|:|f|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|g+0#00e0e07&|:|f|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|g+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|g+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|s+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|s+0#00e0e07&|:|f|o@1|[+0#0000000&|0+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+@57|5@1|,|3| @9|1|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim_function_variables_04.dump b/runtime/syntax/testdir/dumps/vim_function_variables_04.dump
new file mode 100644
index 0000000..3627334
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_variables_04.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@1|l+0#af5f00255&|e|t| +0#0000000&|s+0#00e0e07&|:|f|o@1|[+0#0000000&|0+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|s+0#00e0e07&|:|f|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+@2|l+0#af5f00255&|e|t| +0#0000000&|s+0#00e0e07&|:|f|o@1|[+0#0000000&|:|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@52
+@2|l+0#af5f00255&|e|t| +0#0000000&|s+0#00e0e07&|:|f|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@52
+@2>l+0#af5f00255&|e|t| +0#0000000&|s+0#00e0e07&|:|f|o@1|[+0#0000000&|:|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|s+0#00e0e07&|:|f|o@1|[+0#0000000&|"+0#e000002&|k|e|y|"|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49
+@2|l+0#af5f00255&|e|t| +0#0000000&|s+0#00e0e07&|:|f|o@1|[+0#0000000&|'+0#e000002&|k|e|y|'|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|s+0#00e0e07&|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|s+0#00e0e07&|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|s+0#00e0e07&|:|f|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|s+0#00e0e07&|:|f|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|s+0#00e0e07&|:|f|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|s+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|s+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56
+@57|7|3|,|3| @9|1|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_function_variables_05.dump b/runtime/syntax/testdir/dumps/vim_function_variables_05.dump
new file mode 100644
index 0000000..9e3716d
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_variables_05.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@1|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|:|f|o@1|[+0#0000000&|0+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|:|f|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+@2>l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|:|f|o@1|[+0#0000000&|:|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@52
+@2|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|:|f|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@52
+@2|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|:|f|o@1|[+0#0000000&|:|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|:|f|o@1|[+0#0000000&|"+0#e000002&|k|e|y|"|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49
+@2|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|:|f|o@1|[+0#0000000&|'+0#e000002&|k|e|y|'|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|:|f|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|:|f|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|:|f|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+@57|9|1|,|3| @9|2|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim_function_variables_06.dump b/runtime/syntax/testdir/dumps/vim_function_variables_06.dump
new file mode 100644
index 0000000..2606d3a
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_variables_06.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@1|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|v+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|v+0#00e0e07&|:|f|o@1|[+0#0000000&|0+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+> @74
+@2|l+0#af5f00255&|e|t| +0#0000000&|v+0#00e0e07&|:|f|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+@2|l+0#af5f00255&|e|t| +0#0000000&|v+0#00e0e07&|:|f|o@1|[+0#0000000&|:|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@52
+@2|l+0#af5f00255&|e|t| +0#0000000&|v+0#00e0e07&|:|f|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@52
+@2|l+0#af5f00255&|e|t| +0#0000000&|v+0#00e0e07&|:|f|o@1|[+0#0000000&|:|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|v+0#00e0e07&|:|f|o@1|[+0#0000000&|"+0#e000002&|k|e|y|"|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49
+@2|l+0#af5f00255&|e|t| +0#0000000&|v+0#00e0e07&|:|f|o@1|[+0#0000000&|'+0#e000002&|k|e|y|'|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|v+0#00e0e07&|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|v+0#00e0e07&|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|v+0#00e0e07&|:|f|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|v+0#00e0e07&|:|f|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|v+0#00e0e07&|:|f|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@57|1|0|9|,|0|-|1| @6|2|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_function_variables_07.dump b/runtime/syntax/testdir/dumps/vim_function_variables_07.dump
new file mode 100644
index 0000000..aa9dd94
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_variables_07.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@1|l+0#af5f00255&|e|t| +0#0000000&|v+0#00e0e07&|:|f|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|v+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|v+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|w+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56
+> @74
+@2|l+0#af5f00255&|e|t| +0#0000000&|w+0#00e0e07&|:|f|o@1|[+0#0000000&|0+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|w+0#00e0e07&|:|f|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+@2|l+0#af5f00255&|e|t| +0#0000000&|w+0#00e0e07&|:|f|o@1|[+0#0000000&|:|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@52
+@2|l+0#af5f00255&|e|t| +0#0000000&|w+0#00e0e07&|:|f|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@52
+@2|l+0#af5f00255&|e|t| +0#0000000&|w+0#00e0e07&|:|f|o@1|[+0#0000000&|:|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|w+0#00e0e07&|:|f|o@1|[+0#0000000&|"+0#e000002&|k|e|y|"|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49
+@2|l+0#af5f00255&|e|t| +0#0000000&|w+0#00e0e07&|:|f|o@1|[+0#0000000&|'+0#e000002&|k|e|y|'|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|w+0#00e0e07&|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|w+0#00e0e07&|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|w+0#00e0e07&|:|f|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@57|1|2|7|,|0|-|1| @6|3@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_function_variables_08.dump b/runtime/syntax/testdir/dumps/vim_function_variables_08.dump
new file mode 100644
index 0000000..59386ff
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_variables_08.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@1|l+0#af5f00255&|e|t| +0#0000000&|w+0#00e0e07&|:|f|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|w+0#00e0e07&|:|f|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|w+0#00e0e07&|:|f|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|w+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|w+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+> @74
+@2|l+0#af5f00255&|e|t| +0#0000000&|$+0#e000e06&|F|O@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+@2|l+0#af5f00255&|e|t| +0#0000000&|$+0#e000e06&|F|O@1| +0#0000000&|.+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56
+@2|l+0#af5f00255&|e|t| +0#0000000&|$+0#e000e06&|F|O@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|@+0#e000e06&|f| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+@2|l+0#af5f00255&|e|t| +0#0000000&|@+0#e000e06&|f| +0#0000000&|.+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58
+@2|l+0#af5f00255&|e|t| +0#0000000&|@+0#e000e06&|f| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|t|_|k|1| +0#0000000&|=+0#af5f00255&| +0#0000000&|"+0#e000002&|\+0#e000e06&|<|E|s|c|>|[+0#e000002&|2|3|4|;|"| +0#0000000&@47
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|f|o@1| +0#0000000&|.+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56
+@57|1|4|5|,|0|-|1| @6|3|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_function_variables_09.dump b/runtime/syntax/testdir/dumps/vim_function_variables_09.dump
new file mode 100644
index 0000000..63d7f7b
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_variables_09.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@1|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|f|o@1| +0#0000000&|.+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56
+@2|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56
+@2|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56
+@75
+@2>l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|l|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|l|:|f|o@1| +0#0000000&|.+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+@2|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|l|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+@2|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|l|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+@2|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|l|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|g|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|g|:|f|o@1| +0#0000000&|.+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+@2|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|g|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+@2|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|g|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+@2|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|g|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+@75
+@57|1|6|3|,|3| @8|4|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim_function_variables_10.dump b/runtime/syntax/testdir/dumps/vim_function_variables_10.dump
new file mode 100644
index 0000000..0022446
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_variables_10.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+@2|l+0#af5f00255&|e|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+@2|l+0#af5f00255&|e|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| @63
+@8|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+@2|l+0#af5f00255&|e|t| +0#0000000&|[|v+0#00e0e07&|:|f|o@1|,+0#0000000&| |v+0#00e0e07&|:|b|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@47
+@2>l+0#af5f00255&|e|t| +0#0000000&|[|v+0#00e0e07&|:|f|o@1|,+0#0000000&| @61
+@8|\+0#e000e06&| +0#0000000&|v+0#00e0e07&|:|b|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+@2|l+0#af5f00255&|e|t| +0#0000000&|[|&+0#00e0e07&|f|o@1|,+0#0000000&| |&+0#00e0e07&|b|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49
+@2|l+0#af5f00255&|e|t| +0#0000000&|[|&+0#00e0e07&|f|o@1|,+0#0000000&| @62
+@8|\+0#e000e06&| +0#0000000&@1|&+0#00e0e07&|b|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+@2|l+0#af5f00255&|e|t| +0#0000000&|[|$+0#e000e06&|f|o@1|,+0#0000000&| |$+0#e000e06&|b|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49
+@2|l+0#af5f00255&|e|t| +0#0000000&|[|$+0#e000e06&|f|o@1|,+0#0000000&| @62
+@8|\+0#e000e06&| +0#0000000&@1|$+0#e000e06&|b|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+@2|l+0#af5f00255&|e|t| +0#0000000&|[|@+0#e000e06&|a|,+0#0000000&| |@+0#e000e06&|b|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+@2|l+0#af5f00255&|e|t| +0#0000000&|[|@+0#e000e06&|a|,+0#0000000&| @64
+@8|\+0#e000e06&| +0#0000000&@1|@+0#e000e06&|b|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |.+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@50
+@2|l+0#af5f00255&|e|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49
+@57|1|8|1|,|3| @8|4|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_function_variables_11.dump b/runtime/syntax/testdir/dumps/vim_function_variables_11.dump
new file mode 100644
index 0000000..4c71758
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_variables_11.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@1|l+0#af5f00255&|e|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49
+@2|l+0#af5f00255&|e|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@50
+@2|l+0#af5f00255&|e|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@50
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|;+0#0000000&| |b+0#00e0e07&|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@46
+@2>l+0#af5f00255&|e|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| @63
+@8|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r|;+0#0000000&| @60
+@8|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+@2|l+0#af5f00255&|e|t| +0#0000000&|[|v+0#00e0e07&|:|f|o@1|,+0#0000000&| |v+0#00e0e07&|:|b|a|r|;+0#0000000&| |v+0#00e0e07&|:|b|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@40
+@2|l+0#af5f00255&|e|t| +0#0000000&|[|v+0#00e0e07&|:|f|o@1|,+0#0000000&| @61
+@8|\+0#e000e06&| +0#0000000&|v+0#00e0e07&|:|b|a|r|;+0#0000000&| @58
+@8|\+0#e000e06&| +0#0000000&|v+0#00e0e07&|:|b|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+@2|l+0#af5f00255&|e|t| +0#0000000&|[|$+0#e000e06&|f|o@1|,+0#0000000&| |$+0#e000e06&|b|a|r|;+0#0000000&| |$+0#e000e06&|b|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@43
+@2|l+0#af5f00255&|e|t| +0#0000000&|[|$+0#e000e06&|f|o@1|,+0#0000000&| @62
+@8|\+0#e000e06&| +0#0000000&|$+0#e000e06&|b|a|r|;+0#0000000&| @59
+@8|\+0#e000e06&| +0#0000000&|$+0#e000e06&|b|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@52
+@2|l+0#af5f00255&|e|t| +0#0000000&|[|&+0#00e0e07&|f|o@1|,+0#0000000&| |&+0#00e0e07&|b|a|r|;+0#0000000&| |&+0#00e0e07&|b|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@43
+@2|l+0#af5f00255&|e|t| +0#0000000&|[|&+0#00e0e07&|f|o@1|,+0#0000000&| @62
+@8|\+0#e000e06&| +0#0000000&|&+0#00e0e07&|b|a|r|;+0#0000000&| @59
+@57|1|9@1|,|3| @8|5|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim_function_variables_12.dump b/runtime/syntax/testdir/dumps/vim_function_variables_12.dump
new file mode 100644
index 0000000..0f70ff7
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_variables_12.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|\+0#e000e06&| +0#0000000&|&+0#00e0e07&|b|a|r|;+0#0000000&| @59
+@8|\+0#e000e06&| +0#0000000&|&+0#00e0e07&|b|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@52
+@2|l+0#af5f00255&|e|t| +0#0000000&|[|@+0#e000e06&|a|,+0#0000000&| |@+0#e000e06&|b|;+0#0000000&| |@+0#e000e06&|c|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49
+@2|l+0#af5f00255&|e|t| +0#0000000&|[|@+0#e000e06&|a|,+0#0000000&| @64
+@8|\+0#e000e06&| +0#0000000&|@+0#e000e06&|b|;+0#0000000&| @61
+@8>\+0#e000e06&| +0#0000000&|@+0#e000e06&|c|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |E|N|D| +0#0000000&@57
+|.+0#e000002&@2| +0#0000000&@71
+|E+0#e000e06&|N|D| +0#0000000&@71
+@2|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D| +0#0000000&@52
+| +0#e000002&@1|.@2| +0#0000000&@69
+| +0#e000e06&@1|E|N|D| +0#0000000&@69
+@2|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |E|N|D| +0#0000000&@52
+|.+0#e000002&@2| +0#0000000&@71
+|E+0#e000e06&|N|D| +0#0000000&@71
+@2|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |e|v|a|l| |E|N|D| +0#0000000&@47
+| +0#e000002&@1|.@2| +0#0000000&@69
+| +0#e000e06&@1|E|N|D| +0#0000000&@69
+@57|2|1|7|,|2|-|9| @6|5|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_function_variables_13.dump b/runtime/syntax/testdir/dumps/vim_function_variables_13.dump
new file mode 100644
index 0000000..3544a05
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_variables_13.dump
@@ -0,0 +1,20 @@
+| +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@69
+@2|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |t|r|i|m| |E|N|D| +0#0000000&@47
+| +0#e000002&@3|.@2| +0#0000000&@67
+| +0#e000e06&@1|E|N|D| +0#0000000&@69
+@75
+@2>"+0#0000e05&| |:|l|e|t| |l|i|s|t| |v|a|l|u|e|s| +0#0000000&@54
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@65
+@2|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b|a|r| @61
+@2|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@65
+@8|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05&@7|\| |b|a|r| +0#0000000&@61
+@75
+@2|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@55
+@2|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@54
+@2|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@52
+@2|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b|a|r| |"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@51
+@2|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b|a|r| ||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@48
+@2|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b|a|r| |"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@50
+@57|2|3|5|,|3| @8|6|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim_function_variables_14.dump b/runtime/syntax/testdir/dumps/vim_function_variables_14.dump
new file mode 100644
index 0000000..24e6ea1
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_variables_14.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@1|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b|a|r| |"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@50
+@75
+@2|"+0#0000e05&| |:|u|n|l|e|t| +0#0000000&@64
+@75
+@2|u+0#af5f00255&|n|l|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@63
+@2>u+0#af5f00255&|n|l|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@59
+@2|u+0#af5f00255&|n|l|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@63
+@8|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+@8|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@61
+@75
+@2|u+0#af5f00255&|n|l|e|t|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@62
+@2|u+0#af5f00255&|n|l|e|t|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@58
+@2|u+0#af5f00255&|n|l|e|t|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@62
+@8|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+@8|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@61
+@75
+@2|u+0#af5f00255&|n|l|e|t| +0#0000000&|$+0#e000e06&|F|O@1| +0#0000000&@62
+@2|u+0#af5f00255&|n|l|e|t|!| +0#0000000&|$+0#e000e06&|F|O@1| +0#0000000&@61
+@75
+@57|2|5|3|,|3| @8|6|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_function_variables_15.dump b/runtime/syntax/testdir/dumps/vim_function_variables_15.dump
new file mode 100644
index 0000000..589bb07
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_variables_15.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+@2|u+0#af5f00255&|n|l|e|t| +0#0000000&|l+0#00e0e07&|i|s|t|[+0#0000000&|3+0#e000002&|]+0#0000000&| @59
+@2|u+0#af5f00255&|n|l|e|t| +0#0000000&|l+0#00e0e07&|i|s|t|[+0#0000000&|3+0#e000002&|:+0#0000000&|]| @58
+@2|u+0#af5f00255&|n|l|e|t| +0#0000000&|d+0#00e0e07&|i|c|t|[+0#0000000&|'+0#e000002&|t|w|o|'|]+0#0000000&| @55
+@2|u+0#af5f00255&|n|l|e|t| +0#0000000&|d+0#00e0e07&|i|c|t|.+0#0000000&|t+0#00e0e07&|w|o| +0#0000000&@58
+> @74
+@2|u+0#af5f00255&|n|l|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53
+@2|u+0#af5f00255&|n|l|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@52
+@2|u+0#af5f00255&|n|l|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@50
+@2|u+0#af5f00255&|n|l|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@49
+@2|u+0#af5f00255&|n|l|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@48
+@2|u+0#af5f00255&|n|l|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@46
+@75
+@2|"+0#0000e05&| |:|c|o|n|s|t| +0#0000000&@64
+@75
+@2|c+0#af5f00255&|o|n|s|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56
+@75
+@2|c+0#af5f00255&|o|n|s|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49
+@75
+@57|2|7|1|,|0|-|1| @6|7|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim_function_variables_16.dump b/runtime/syntax/testdir/dumps/vim_function_variables_16.dump
new file mode 100644
index 0000000..049cea6
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_variables_16.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+@2|c+0#af5f00255&|o|n|s|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|;+0#0000000&| |b+0#00e0e07&|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@44
+@75
+@2|c+0#af5f00255&|o|n|s|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |E|N|D| +0#0000000&@55
+|.+0#e000002&@2| +0#0000000&@71
+>E+0#e000e06&|N|D| +0#0000000&@71
+@2|c+0#af5f00255&|o|n|s|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D| +0#0000000&@50
+| +0#e000002&@1|.@2| +0#0000000&@69
+| +0#e000e06&@1|E|N|D| +0#0000000&@69
+@2|c+0#af5f00255&|o|n|s|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |E|N|D| +0#0000000&@50
+|.+0#e000002&@2| +0#0000000&@71
+|E+0#e000e06&|N|D| +0#0000000&@71
+@2|c+0#af5f00255&|o|n|s|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |e|v|a|l| |E|N|D| +0#0000000&@45
+| +0#e000002&@1|.@2| +0#0000000&@69
+| +0#e000e06&@1|E|N|D| +0#0000000&@69
+@2|c+0#af5f00255&|o|n|s|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |t|r|i|m| |E|N|D| +0#0000000&@45
+| +0#e000002&@3|.@2| +0#0000000&@67
+| +0#e000e06&@1|E|N|D| +0#0000000&@69
+@75
+@57|2|8|9|,|1| @8|7@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_function_variables_17.dump b/runtime/syntax/testdir/dumps/vim_function_variables_17.dump
new file mode 100644
index 0000000..7033588
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_variables_17.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+@2|c+0#af5f00255&|o|n|s|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@63
+@2|c+0#af5f00255&|o|n|s|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b|a|r| @59
+@75
+@2|"+0#0000e05&| |:|f|o|r| +0#0000000&@66
+> @74
+@2|f+0#af5f00255&|o|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+@2|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@66
+@75
+@2|f+0#af5f00255&|o|r| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |i+0#af5f00255&|n| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@50
+@2|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@66
+@75
+@2|"+0#0000e05&| |:|l|o|c|k|v|a|r| +0#0000000&@62
+@75
+@2|l+0#af5f00255&|o|c|k|v|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@61
+@2|l+0#af5f00255&|o|c|k|v|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@57
+@2|l+0#af5f00255&|o|c|k|v|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@61
+@8|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+@8|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@61
+@57|3|0|7|,|0|-|1| @6|8|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim_function_variables_18.dump b/runtime/syntax/testdir/dumps/vim_function_variables_18.dump
new file mode 100644
index 0000000..2d1a2cd
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_variables_18.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@61
+@75
+@2|l+0#af5f00255&|o|c|k|v|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@51
+@2|l+0#af5f00255&|o|c|k|v|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@48
+@2|l+0#af5f00255&|o|c|k|v|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@47
+@2>l+0#af5f00255&|o|c|k|v|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@44
+@75
+@2|l+0#af5f00255&|o|c|k|v|a|r|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@60
+@2|l+0#af5f00255&|o|c|k|v|a|r|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@56
+@2|l+0#af5f00255&|o|c|k|v|a|r|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@60
+@8|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+@8|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@61
+@75
+@2|l+0#af5f00255&|o|c|k|v|a|r|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@50
+@2|l+0#af5f00255&|o|c|k|v|a|r|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@47
+@2|l+0#af5f00255&|o|c|k|v|a|r|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@46
+@2|l+0#af5f00255&|o|c|k|v|a|r|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@43
+@75
+@2|l+0#af5f00255&|o|c|k|v|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@59
+@57|3|2|5|,|3| @8|8|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_function_variables_19.dump b/runtime/syntax/testdir/dumps/vim_function_variables_19.dump
new file mode 100644
index 0000000..960ded8
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_variables_19.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@1|l+0#af5f00255&|o|c|k|v|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@59
+@2|l+0#af5f00255&|o|c|k|v|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@55
+@2|l+0#af5f00255&|o|c|k|v|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@59
+@8|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+@8|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@61
+> @74
+@2|l+0#af5f00255&|o|c|k|v|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@49
+@2|l+0#af5f00255&|o|c|k|v|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@46
+@2|l+0#af5f00255&|o|c|k|v|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@45
+@2|l+0#af5f00255&|o|c|k|v|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@42
+@75
+@2|"+0#0000e05&| |:|u|n|l|o|c|k|v|a|r| +0#0000000&@60
+@75
+@2|u+0#af5f00255&|n|l|o|c|k|v|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@59
+@2|u+0#af5f00255&|n|l|o|c|k|v|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@55
+@2|u+0#af5f00255&|n|l|o|c|k|v|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@59
+@8|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+@8|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@61
+@75
+@57|3|4|3|,|0|-|1| @6|9|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim_function_variables_20.dump b/runtime/syntax/testdir/dumps/vim_function_variables_20.dump
new file mode 100644
index 0000000..59dcf21
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_variables_20.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+@2|u+0#af5f00255&|n|l|o|c|k|v|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@49
+@2|u+0#af5f00255&|n|l|o|c|k|v|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@46
+@2|u+0#af5f00255&|n|l|o|c|k|v|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@45
+@2|u+0#af5f00255&|n|l|o|c|k|v|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@42
+> @74
+@2|u+0#af5f00255&|n|l|o|c|k|v|a|r|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@58
+@2|u+0#af5f00255&|n|l|o|c|k|v|a|r|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@54
+@2|u+0#af5f00255&|n|l|o|c|k|v|a|r|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@58
+@8|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+@8|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@61
+@75
+@2|u+0#af5f00255&|n|l|o|c|k|v|a|r|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@48
+@2|u+0#af5f00255&|n|l|o|c|k|v|a|r|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@45
+@2|u+0#af5f00255&|n|l|o|c|k|v|a|r|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@44
+@2|u+0#af5f00255&|n|l|o|c|k|v|a|r|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@41
+@75
+@2|u+0#af5f00255&|n|l|o|c|k|v|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@57
+@2|u+0#af5f00255&|n|l|o|c|k|v|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@53
+@57|3|6|1|,|0|-|1| @6|9|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_function_variables_21.dump b/runtime/syntax/testdir/dumps/vim_function_variables_21.dump
new file mode 100644
index 0000000..58ee05f
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_function_variables_21.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@1|u+0#af5f00255&|n|l|o|c|k|v|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@53
+@2|u+0#af5f00255&|n|l|o|c|k|v|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@57
+@8|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+@8|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@61
+@75
+@2>u+0#af5f00255&|n|l|o|c|k|v|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@47
+@2|u+0#af5f00255&|n|l|o|c|k|v|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@44
+@2|u+0#af5f00255&|n|l|o|c|k|v|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@43
+@2|u+0#af5f00255&|n|l|o|c|k|v|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@40
+|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
+@75
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|3|7|9|,|3| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_lambda_00.dump b/runtime/syntax/testdir/dumps/vim_lambda_00.dump
new file mode 100644
index 0000000..671354a
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_lambda_00.dump
@@ -0,0 +1,20 @@
+>"+0#0000e05#ffffff0| |V|i|m| |l|a|m|b|d|a| |e|x|p|r|e|s@1|i|o|n|s| +0#0000000&@50
+@75
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|-+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r|}+0#e000e06&| +0#0000000&@55
+|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|_+0#00e0e07&| +0#0000000&|-+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r|}+0#e000e06&| +0#0000000&@53
+|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|.+0#00e0e07&@2| +0#0000000&|-+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r|}+0#e000e06&| +0#0000000&@51
+|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|x+0#00e0e07&| +0#0000000&|-+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r|}+0#e000e06&| +0#0000000&@53
+|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |_+0#00e0e07&| +0#0000000&|-+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r|}+0#e000e06&| +0#0000000&@50
+|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |.+0#00e0e07&@2| +0#0000000&|-+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r|}+0#e000e06&| +0#0000000&@48
+|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |y+0#00e0e07&| +0#0000000&|-+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r|}+0#e000e06&| +0#0000000&@50
+@75
+@75
+|"+0#0000e05&| |l|i|n|e| |c|o|n|t|i|n|u|a|t|i|o|n|s| +0#0000000&@54
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|-+0#af5f00255&|>| +0#0000000&@61
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim_lambda_01.dump b/runtime/syntax/testdir/dumps/vim_lambda_01.dump
new file mode 100644
index 0000000..79a52d6
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_lambda_01.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|"+0#0000e05&| |l|i|n|e| |c|o|n|t|i|n|u|a|t|i|o|n|s| +0#0000000&@54
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|-+0#af5f00255&|>| +0#0000000&@61
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6>\+0#e000e06&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|}+0#e000e06&| +0#0000000&@65
+|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|_+0#00e0e07&| +0#0000000&|-+0#af5f00255&|>| +0#0000000&@59
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|}+0#e000e06&| +0#0000000&@65
+|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|.+0#00e0e07&@2| +0#0000000&|-+0#af5f00255&|>| +0#0000000&@57
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|}+0#e000e06&| +0#0000000&@65
+|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|x+0#00e0e07&| +0#0000000&|-+0#af5f00255&|>| +0#0000000&@59
+@6|\+0#e000e06&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|}+0#e000e06&| +0#0000000&@65
+@57|1|9|,|7| @9|1|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim_lambda_02.dump b/runtime/syntax/testdir/dumps/vim_lambda_02.dump
new file mode 100644
index 0000000..40899d7
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_lambda_02.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|}+0#e000e06&| +0#0000000&@65
+|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |y+0#00e0e07&| +0#0000000&|-+0#af5f00255&|>| +0#0000000&@56
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|}+0#e000e06&| +0#0000000&@65
+> @74
+|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&| +0#0000000&@63
+@6|\+0#e000e06&| +0#0000000&|-+0#af5f00255&|>| +0#0000000&@64
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|}+0#e000e06&| +0#0000000&@65
+|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|x+0#00e0e07&| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|-+0#af5f00255&|>| +0#0000000&@64
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|}+0#e000e06&| +0#0000000&@65
+|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |y+0#00e0e07&| +0#0000000&@59
+@6|\+0#e000e06&| +0#0000000&|-+0#af5f00255&|>| +0#0000000&@64
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@57|3|7|,|0|-|1| @7|3|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim_lambda_03.dump b/runtime/syntax/testdir/dumps/vim_lambda_03.dump
new file mode 100644
index 0000000..892cfab
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_lambda_03.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|}+0#e000e06&| +0#0000000&@65
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|x+0#00e0e07&|,+0#0000000&| @61
+@6>\+0#e000e06&| +0#0000000&|y+0#00e0e07&|,+0#0000000&| @64
+@6|\+0#e000e06&| +0#0000000&|z+0#00e0e07&| +0#0000000&|-+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r|}+0#e000e06&| +0#0000000&@56
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&| +0#0000000&@63
+@6|\+0#e000e06&| +0#0000000&|x+0#00e0e07&|,+0#0000000&| @64
+@6|\+0#e000e06&| +0#0000000&|y+0#00e0e07&|,+0#0000000&| @64
+@6|\+0#e000e06&| +0#0000000&|z+0#00e0e07&| +0#0000000&@65
+@6|\+0#e000e06&| +0#0000000&|-+0#af5f00255&|>| +0#0000000&@64
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|}+0#e000e06&| +0#0000000&@65
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|-+0#af5f00255&|>| +0#0000000&|[+0#e000e06&| +0#0000000&@59
+@6|\+0#e000e06&| +0#0000000&|4+0#e000002&|2|,+0#0000000&| @63
+@57|5@1|,|7| @9|4|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_lambda_04.dump b/runtime/syntax/testdir/dumps/vim_lambda_04.dump
new file mode 100644
index 0000000..a26e67e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_lambda_04.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|4+0#e000002&|2|,+0#0000000&| @63
+@6|\+0#e000e06&| +0#0000000&|8+0#e000002&|3| +0#0000000&@64
+@6|\+0#e000e06&|]|}| +0#0000000&@65
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|-+0#af5f00255&|>| +0#0000000&|{+0#e000e06&| +0#0000000&@59
+@6>\+0#e000e06&| +0#0000000&|'+0#e000002&|a|'|:+0#0000000&| |4+0#e000002&|2|,+0#0000000&| @58
+@6|\+0#e000e06&| +0#0000000&|'+0#e000002&|b|'|:+0#0000000&| |8+0#e000002&|3| +0#0000000&@59
+@6|\+0#e000e06&|}@1| +0#0000000&@65
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|-+0#af5f00255&|>| +0#0000000&|#+0#e000e06&|{| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|a+0#00e0e07&|:+0#0000000&| |4+0#e000002&|2|,+0#0000000&| @60
+@6|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|:+0#0000000&| |8+0#e000002&|3| +0#0000000&@61
+@6|\+0#e000e06&|}@1| +0#0000000&@65
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|-+0#af5f00255&|>| +0#0000000&|{+0#e000e06&|-+0#af5f00255&|>|[+0#e000e06&| +0#0000000&@56
+@6|\+0#e000e06&| +0#0000000&|4+0#e000002&|2|,+0#0000000&| @63
+@6|\+0#e000e06&| +0#0000000&|8+0#e000002&|3| +0#0000000&@64
+@6|\+0#e000e06&|]|}@1| +0#0000000&@64
+@75
+@57|7|3|,|7| @9|6@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_lambda_05.dump b/runtime/syntax/testdir/dumps/vim_lambda_05.dump
new file mode 100644
index 0000000..01e9e22
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_lambda_05.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|-+0#af5f00255&|>| +0#0000000&|{+0#e000e06&|-+0#af5f00255&|>| +0#0000000&|{+0#e000e06&| +0#0000000&@55
+@6|\+0#e000e06&| +0#0000000&|'+0#e000002&|a|'|:+0#0000000&| |4+0#e000002&|2|,+0#0000000&| @58
+@6|\+0#e000e06&| +0#0000000&|'+0#e000002&|b|'|:+0#0000000&| |8+0#e000002&|3| +0#0000000&@59
+@6|\+0#e000e06&|}@2| +0#0000000&@64
+> @74
+|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|-+0#af5f00255&|>| +0#0000000&|{+0#e000e06&|-+0#af5f00255&|>| +0#0000000&|#+0#e000e06&|{| +0#0000000&@54
+@6|\+0#e000e06&| +0#0000000&|a+0#00e0e07&|:+0#0000000&| |4+0#e000002&|2|,+0#0000000&| @60
+@6|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|:+0#0000000&| |8+0#e000002&|3| +0#0000000&@61
+@6|\+0#e000e06&|}@2| +0#0000000&@64
+@75
+|"+0#0000e05&| |:|h|e|l|p| |l|a|m|b|d|a| +0#0000000&@60
+@75
+|:|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|a+0#00e0e07&|r|g|1|,+0#0000000&| |a+0#00e0e07&|r|g|2| +0#0000000&|-+0#af5f00255&|>| +0#0000000&|a+0#00e0e07&|r|g|1| +0#0000000&|-+0#af5f00255&| +0#0000000&|a+0#00e0e07&|r|g|2|}+0#e000e06&| +0#0000000&@38
+|:|e+0#af5f00255&|c|h|o| +0#0000000&|F|(+0#e000e06&|5+0#e000002&|,+0#0000000&| |2+0#e000002&|)+0#e000e06&| +0#0000000&@61
+@75
+|:|l+0#af5f00255&|e|t| +0#0000000&|F+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|-+0#af5f00255&|>| +0#0000000&|'+0#e000002&|e|r@1|o|r| |f|u|n|c|t|i|o|n|'|}+0#e000e06&| +0#0000000&@44
+|:|e+0#af5f00255&|c|h|o| +0#0000000&|F|(+0#e000e06&|'+0#e000002&|i|g|n|o|r|e|d|'|)+0#e000e06&| +0#0000000&@56
+@75
+@57|9|1|,|0|-|1| @7|8|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim_lambda_06.dump b/runtime/syntax/testdir/dumps/vim_lambda_06.dump
new file mode 100644
index 0000000..5338e68
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_lambda_06.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|:|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|a+0#00e0e07&|r|g|)+0#e000e06&| +0#0000000&@56
+|:| @1|l+0#af5f00255&|e|t| +0#0000000&|i+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|3+0#e000002&| +0#0000000&@62
+|:| @1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|{+0#e000e06&|x+0#00e0e07&| +0#0000000&|-+0#af5f00255&|>| +0#0000000&|x+0#00e0e07&| +0#0000000&|++0#af5f00255&| +0#0000000&|i+0#00e0e07&| +0#0000000&|-+0#af5f00255&| +0#0000000&|a+0#00e0e07&|:|a|r|g|}+0#e000e06&| +0#0000000&@44
+|:|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@62
+>:|l+0#af5f00255&|e|t| +0#0000000&|B+0#00e0e07&|a|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|F|o@1|(+0#e000e06&|4+0#e000002&|)+0#e000e06&| +0#0000000&@57
+|:|e+0#af5f00255&|c|h|o| +0#0000000&|B|a|r|(+0#e000e06&|6+0#e000002&|)+0#e000e06&| +0#0000000&@62
+@75
+|:|e+0#af5f00255&|c|h|o| +0#0000000&|m+0#00e0e07&|a|p|(+0#e000e06&|[|1+0#e000002&|,+0#0000000&| |2+0#e000002&|,+0#0000000&| |3+0#e000002&|]+0#e000e06&|,+0#0000000&| |{+0#e000e06&|i+0#00e0e07&|d|x|,+0#0000000&| |v+0#00e0e07&|a|l| +0#0000000&|-+0#af5f00255&|>| +0#0000000&|v+0#00e0e07&|a|l| +0#0000000&|++0#af5f00255&| +0#0000000&|1+0#e000002&|}+0#e000e06&|)| +0#0000000&@31
+|"+0#0000e05&| |[|2|,| |3|,| |4|]| @1| +0#0000000&@61
+@75
+|:|e+0#af5f00255&|c|h|o| +0#0000000&|s+0#00e0e07&|o|r|t|(+0#e000e06&|[|3+0#e000002&|,+0#0000000&|7+0#e000002&|,+0#0000000&|2+0#e000002&|,+0#0000000&|1+0#e000002&|,+0#0000000&|4+0#e000002&|]+0#e000e06&|,+0#0000000&| |{+0#e000e06&|a+0#00e0e07&|,+0#0000000&| |b+0#00e0e07&| +0#0000000&|-+0#af5f00255&|>| +0#0000000&|a+0#00e0e07&| +0#0000000&|-+0#af5f00255&| +0#0000000&|b+0#00e0e07&|}+0#e000e06&|)| +0#0000000&@34
+|"+0#0000e05&| |[|1|,| |2|,| |3|,| |4|,| |7|]| +0#0000000&@57
+|:|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|i|m|e|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|t+0#00e0e07&|i|m|e|r|_|s|t|a|r|t|(+0#e000e06&|5+0#e000002&|0@1|,+0#0000000&| @45
+@16|\+0#e000e06&| +0#0000000&|{+0#e000e06&|-+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|e|c|u|t|e|(+0#e000e06&|"+0#e000002&|e|c|h|o| |'|H|a|n|d|l|e|r| |c|a|l@1|e|d|'|"|,+0#0000000&| |"+0#e000002&@1|)+0#e000e06&|}|,+0#0000000&| @14
+@16|\+0#e000e06&| +0#0000000&|{+0#e000e06&|'+0#e000002&|r|e|p|e|a|t|'|:+0#0000000&| |3+0#e000002&|}+0#e000e06&|)| +0#0000000&@42
+@75
+|~+0#4040ff13&| @73
+|~| @73
+| +0#0000000&@56|1|0|9|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_line_continuation_02.dump b/runtime/syntax/testdir/dumps/vim_line_continuation_02.dump
index e18a56d..3dde6fa 100644
--- a/runtime/syntax/testdir/dumps/vim_line_continuation_02.dump
+++ b/runtime/syntax/testdir/dumps/vim_line_continuation_02.dump
@@ -8,13 +8,13 @@
@6|\+0#e000e06&| +0#0000000&|c+0#00e0e07&|:+0#0000000&| |3+0#e000002&| +0#0000000&@62
@6|\+0#e000e06&|}| +0#0000000&@66
@75
-|l+0#af5f00255&|e|t| +0#0000000&|a+0#00e0e07&|r@1|a|y| +0#0000000&|=+0#af5f00255&| +0#0000000&|[| @61
+|l+0#af5f00255&|e|t| +0#0000000&|a+0#00e0e07&|r@1|a|y| +0#0000000&|=+0#af5f00255&| +0#0000000&|[+0#e000e06&| +0#0000000&@61
@6|"+0#0000e05&|\| |e|l|e|m|e|n|t| |1| +0#0000000&@56
@6|\+0#e000e06&| +0#0000000&|1+0#e000002&|,+0#0000000&| @64
@6|"+0#0000e05&|\| |e|l|e|m|e|n|t| |2| +0#0000000&@56
@6|\+0#e000e06&| +0#0000000&|2+0#e000002&|,+0#0000000&| @64
@6|"+0#0000e05&|\| |e|l|e|m|e|n|t| |3| +0#0000000&@56
@6|\+0#e000e06&| +0#0000000&|3+0#e000002&| +0#0000000&@65
-@6|\+0#e000e06&|]+0#0000000&| @66
+@6|\+0#e000e06&|]| +0#0000000&@66
|~+0#4040ff13&| @73
| +0#0000000&@56|3|7|,|7| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_object_methods_00.dump b/runtime/syntax/testdir/dumps/vim_object_methods_00.dump
index d9ea0cc..8ac6f21 100644
--- a/runtime/syntax/testdir/dumps/vim_object_methods_00.dump
+++ b/runtime/syntax/testdir/dumps/vim_object_methods_00.dump
@@ -1,5 +1,7 @@
>v+0#af5f00255#ffffff0|i|m|9|s|c|r|i|p|t| +0#0000000&@64
-|#+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|M|e|t|h|o|d|N|a|m|e| |T|o|d|o| +0#0000000&@31
+@75
+|#+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|9|M|e|t|h|o|d|N|a|m|e| |S|p|e|c|i|a|l| +0#0000000&@27
+|#+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|9|T|h|i|s| |T|o|d|o| +0#0000000&@36
@75
@75
|#+0#0000e05&| |V|i|m| |||b|u|i|l|t|i|n|-|o|b|j|e|c|t|-|m|e|t|h|o|d|s||| |a|n|d| |n|a|m|e|s|a|k|e| |b|u|i|l|t|i|n| |f|u|n|c|t|i|o|n|s|.| +0#0000000&@12
@@ -7,14 +9,12 @@
@8|p+0#af5f00255&|u|b|l|i|c| +0#0000000&|c+0#af5f00255&|o|n|s|t| +0#0000000&|a+0#00e0e07&|:+0#0000000&| |a+0#00e0003&|n|y| +0#0000000&@47
@8|p+0#af5f00255&|u|b|l|i|c| +0#0000000&|c+0#af5f00255&|o|n|s|t| +0#0000000&|b+0#00e0e07&|:+0#0000000&| |a+0#00e0003&|n|y| +0#0000000&@47
@75
-@8|d+0#af5f00255&|e|f| +0#0000000&|n+0#00e0e07&|e|w|(+0#e000e06&|a+0#00e0e07&|:+0#0000000&| |a+0#00e0003&|n|y|,+0#0000000&| |b+0#00e0e07&|:+0#0000000&| |a+0#00e0003&|n|y|)+0#e000e06&| +0#0000000&@43
-@16|t+0#00e0e07&|h|i|s|.+0#af5f00255&|a| +0#0000000&|=+0#af5f00255&| +0#0000000&|a+0#af5f00255&| +0#0000000&@48
-@16|t+0#00e0e07&|h|i|s|.+0#af5f00255&|b| +0#0000000&|=+0#af5f00255&| +0#0000000&|b+0#af5f00255&| +0#0000000&@48
+@8|d+0#af5f00255&|e|f| +0#0000000&|n+0#e000e06&|e|w|(|a+0#00e0e07&|:+0#0000000&| |a+0#00e0003&|n|y|,+0#0000000&| |b+0#00e0e07&|:+0#0000000&| |a+0#00e0003&|n|y|)+0#e000e06&| +0#0000000&@43
+@8| +0#00e0e07&@7|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|a+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|a+0#00e0e07&| +0#0000000&@48
+@8| +0#00e0e07&@7|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|b+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|b+0#00e0e07&| +0#0000000&@48
@8|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@60
@75
-@8|d+0#af5f00255&|e|f| +0#0000000&|e+0#00e0e07&|m|p|t|y|(+0#e000e06&|)|:+0#0000000&| |b+0#00e0003&|o@1|l| +0#0000000&@49
+@8|d+0#af5f00255&|e|f| +0#0000000&|e+0#e000e06&|m|p|t|y|(|)|:+0#0000000&| |b+0#00e0003&|o@1|l| +0#0000000&@49
@16|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|f+0#e000002&|a|l|s|e| +0#0000000&@46
@8|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@60
-@8|d+0#af5f00255&|e|f| +0#0000000&|l+0#00e0e07&|e|n|(+0#e000e06&|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@49
-@16|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|2+0#e000002&| +0#0000000&@50
@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim_object_methods_01.dump b/runtime/syntax/testdir/dumps/vim_object_methods_01.dump
index 7989781..9af5000 100644
--- a/runtime/syntax/testdir/dumps/vim_object_methods_01.dump
+++ b/runtime/syntax/testdir/dumps/vim_object_methods_01.dump
@@ -1,12 +1,14 @@
-| +0&#ffffff0@74
-@8|d+0#af5f00255&|e|f| +0#0000000&|e+0#00e0e07&|m|p|t|y|(+0#e000e06&|)|:+0#0000000&| |b+0#00e0003&|o@1|l| +0#0000000&@49
+| +0&#ffffff0@7| +0#00e0e07&@7|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|b+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|b+0#00e0e07&| +0#0000000&@48
+@8|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@60
+@75
+@8|d+0#af5f00255&|e|f| +0#0000000&|e+0#e000e06&|m|p|t|y|(|)|:+0#0000000&| |b+0#00e0003&|o@1|l| +0#0000000&@49
@16|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|f+0#e000002&|a|l|s|e| +0#0000000&@46
+@8>e+0#af5f00255&|n|d@1|e|f| +0#0000000&@60
+@8|d+0#af5f00255&|e|f| +0#0000000&|l+0#e000e06&|e|n|(|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@49
+@16|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|2+0#e000002&| +0#0000000&@50
@8|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@60
-@8|d+0#af5f00255&|e|f| +0#0000000&|l+0#00e0e07&|e|n|(+0#e000e06&|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@49
-@16>r+0#af5f00255&|e|t|u|r|n| +0#0000000&|2+0#e000002&| +0#0000000&@50
-@8|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@60
-@8|d+0#af5f00255&|e|f| +0#0000000&|s+0#00e0e07&|t|r|i|n|g|(+0#e000e06&|)|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g| +0#0000000&@46
-@16|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|p+0#00e0e07&|r|i|n|t|f|(+0#e000e06&|'+0#e000002&|(|%|s|,| |%|s|)|'|,+0#0000000&| |t+0#00e0e07&|h|i|s|.+0#af5f00255&|a+0#00e0e07&|,+0#0000000&| |t+0#00e0e07&|h|i|s|.+0#af5f00255&|b+0#00e0e07&|)+0#e000e06&| +0#0000000&@17
+@8|d+0#af5f00255&|e|f| +0#0000000&|s+0#e000e06&|t|r|i|n|g|(|)|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g| +0#0000000&@46
+@16|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|p+0#00e0e07&|r|i|n|t|f|(+0#e000e06&|'+0#e000002&|(|%|s|,| |%|s|)|'|,+0#0000000&| |t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|a+0#00e0e07&|,+0#0000000&| |t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|b+0#00e0e07&|)+0#e000e06&| +0#0000000&@17
@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
@@ -15,6 +17,4 @@
@75
@8|d+0#af5f00255&|e|f| +0#0000000&|N|o|O|p|(+0#e000e06&|)| +0#0000000&@56
@8|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@60
-@75
-@8|d+0#af5f00255&|e|f| +0#0000000&|e+0#00e0e07&|m|p|t|y|(+0#e000e06&|)|:+0#0000000&| |b+0#00e0003&|o@1|l| +0#0000000&@49
-@57|1|9|,|3|-|1|7| @6|3|5|%|
+@57|1|9|,|2|-|9| @7|3@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_object_methods_02.dump b/runtime/syntax/testdir/dumps/vim_object_methods_02.dump
index 1ca93f0..4ecdffa 100644
--- a/runtime/syntax/testdir/dumps/vim_object_methods_02.dump
+++ b/runtime/syntax/testdir/dumps/vim_object_methods_02.dump
@@ -1,20 +1,20 @@
-| +0&#ffffff0@7|d+0#af5f00255&|e|f| +0#0000000&|e+0#00e0e07&|m|p|t|y|(+0#e000e06&|)|:+0#0000000&| |b+0#00e0003&|o@1|l| +0#0000000&@49
+| +0&#ffffff0@7|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@60
+@75
+@8|d+0#af5f00255&|e|f| +0#0000000&|e+0#e000e06&|m|p|t|y|(|)|:+0#0000000&| |b+0#00e0003&|o@1|l| +0#0000000&@49
@16|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|t+0#e000002&|r|u|e| +0#0000000&@47
@8|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@60
-@8|d+0#af5f00255&|e|f| +0#0000000&|l+0#00e0e07&|e|n|(+0#e000e06&|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@49
+@8>d+0#af5f00255&|e|f| +0#0000000&|l+0#e000e06&|e|n|(|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@49
@16|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|0+0#e000002&| +0#0000000&@50
-@8>e+0#af5f00255&|n|d@1|e|f| +0#0000000&@60
-@8|d+0#af5f00255&|e|f| +0#0000000&|s+0#00e0e07&|t|r|i|n|g|(+0#e000e06&|)|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g| +0#0000000&@46
-@16|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|t+0#00e0e07&|h|i|s|.+0#af5f00255&|n+0#0000000&|a|m|e| @42
+@8|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@60
+@8|d+0#af5f00255&|e|f| +0#0000000&|s+0#e000e06&|t|r|i|n|g|(|)|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g| +0#0000000&@46
+@16|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|t+0#0000001#ffff4012|h|i|s|.+0#af5f00255#ffffff0|n+0#00e0e07&|a|m|e| +0#0000000&@42
@8|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@60
|e+0#af5f00255&|n|d|e|n|u|m| +0#0000000&@67
@75
|c+0#af5f00255&|o|n|s|t| +0#0000000&|b+0#00e0e07&|1|:+0#0000000&| |b+0#00e0003&|o@1|l| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|m|p|t|y|(+0#e000e06&|M+0#00e0e07&|a|r|k|e|r|E|n|u|m|T|e|s|t|.+0#af5f00255&|I+0#00e0e07&|N|S|T|A|N|C|E|)+0#e000e06&| +0#0000000&@27
|c+0#af5f00255&|o|n|s|t| +0#0000000&|n+0#00e0e07&|1|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|l+0#00e0e07&|e|n|(+0#e000e06&|M+0#00e0e07&|a|r|k|e|r|E|n|u|m|T|e|s|t|.+0#af5f00255&|I+0#00e0e07&|N|S|T|A|N|C|E|)+0#e000e06&| +0#0000000&@27
|c+0#af5f00255&|o|n|s|t| +0#0000000&|s+0#00e0e07&|1|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g| +0#0000000&|=+0#af5f00255&| +0#0000000&|s+0#00e0e07&|t|r|i|n|g|(+0#e000e06&|M+0#00e0e07&|a|r|k|e|r|E|n|u|m|T|e|s|t|.+0#af5f00255&|I+0#00e0e07&|N|S|T|A|N|C|E|)+0#e000e06&| +0#0000000&@24
-|e+0#af5f00255&|c|h|o| +0#0000000&|b+0#00e0e07&|1| +0#0000000&|&+0#af5f00255&@1| +0#0000000&|M|a|r|k|e|r|E|n|u|m|T|e|s|t|.|I|N|S|T|A|N|C|E|.|e+0#00e0e07&|m|p|t|y|(+0#e000e06&|)| +0#0000000&@32
-|e+0#af5f00255&|c|h|o| +0#0000000&|n+0#00e0e07&|1| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|0+0#e000002&| +0#0000000&|&+0#af5f00255&@1| +0#0000000&|M|a|r|k|e|r|E|n|u|m|T|e|s|t|.|I|N|S|T|A|N|C|E|.|l+0#00e0e07&|e|n|(+0#e000e06&|)| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|0+0#e000002&| +0#0000000&@24
-|e+0#af5f00255&|c|h|o| +0#0000000&|s+0#00e0e07&|1| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|'+0#e000002&|I|N|S|T|A|N|C|E|'| +0#0000000&|&+0#af5f00255&@1| +0#0000000&|M|a|r|k|e|r|E|n|u|m|T|e|s|t|.|I|N|S|T|A|N|C|E|.|s+0#00e0e07&|t|r|i|n|g|(+0#e000e06&|)| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|'+0#e000002&|I|N|S|T|A|N|C|E|'| +0#0000000&@3
-@75
-|c+0#af5f00255&|o|n|s|t| +0#0000000&|p+0#00e0e07&|a|i|r|:+0#0000000&| |P|a|i|r|C|l|a|s@1|T|e|s|t| |=+0#af5f00255&| +0#0000000&|P|a|i|r|C|l|a|s@1|T|e|s|t|.|n+0#00e0e07&|e|w|(+0#e000e06&|0+0#e000002&|,+0#0000000&| |1+0#e000002&|)+0#e000e06&| +0#0000000&@23
-@57|3|7|,|2|-|9| @7|8|3|%|
+|e+0#af5f00255&|c|h|o| +0#0000000&|b+0#00e0e07&|1| +0#0000000&|&+0#af5f00255&@1| +0#0000000&|M|a|r|k|e|r|E|n|u|m|T|e|s|t|.|I|N|S|T|A|N|C|E|.|e+0#e000e06&|m|p|t|y|(|)| +0#0000000&@32
+|e+0#af5f00255&|c|h|o| +0#0000000&|n+0#00e0e07&|1| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|0+0#e000002&| +0#0000000&|&+0#af5f00255&@1| +0#0000000&|M|a|r|k|e|r|E|n|u|m|T|e|s|t|.|I|N|S|T|A|N|C|E|.|l+0#e000e06&|e|n|(|)| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|0+0#e000002&| +0#0000000&@24
+|e+0#af5f00255&|c|h|o| +0#0000000&|s+0#00e0e07&|1| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|'+0#e000002&|I|N|S|T|A|N|C|E|'| +0#0000000&|&+0#af5f00255&@1| +0#0000000&|M|a|r|k|e|r|E|n|u|m|T|e|s|t|.|I|N|S|T|A|N|C|E|.|s+0#e000e06&|t|r|i|n|g|(|)| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|'+0#e000002&|I|N|S|T|A|N|C|E|'| +0#0000000&@3
+@57|3|7|,|2|-|9| @7|7|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim_object_methods_03.dump b/runtime/syntax/testdir/dumps/vim_object_methods_03.dump
index fe5bf51..255c8b5 100644
--- a/runtime/syntax/testdir/dumps/vim_object_methods_03.dump
+++ b/runtime/syntax/testdir/dumps/vim_object_methods_03.dump
@@ -1,9 +1,11 @@
-|c+0#af5f00255#ffffff0|o|n|s|t| +0#0000000&|p+0#00e0e07&|a|i|r|:+0#0000000&| |P|a|i|r|C|l|a|s@1|T|e|s|t| |=+0#af5f00255&| +0#0000000&|P|a|i|r|C|l|a|s@1|T|e|s|t|.|n+0#00e0e07&|e|w|(+0#e000e06&|0+0#e000002&|,+0#0000000&| |1+0#e000002&|)+0#e000e06&| +0#0000000&@23
-|c+0#af5f00255&|o|n|s|t| +0#0000000&|b+0#00e0e07&|2|:+0#0000000&| |b+0#00e0003&|o@1|l| +0#0000000&|=+0#af5f00255&| +0#0000000&|!+0#af5f00255&|p+0#0000000&|a|i|r|.|e+0#00e0e07&|m|p|t|y|(+0#e000e06&|)| +0#0000000&@44
-|c+0#af5f00255&|o|n|s|t| +0#0000000&|n+0#00e0e07&|2|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|p|a|i|r|.|l+0#00e0e07&|e|n|(+0#e000e06&|)| +0#0000000&@45
-|c+0#af5f00255&|o|n|s|t| +0#0000000&|s+0#00e0e07&|2|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g| +0#0000000&|=+0#af5f00255&| +0#0000000&|p|a|i|r|.|s+0#00e0e07&|t|r|i|n|g|(+0#e000e06&|)| +0#0000000&@42
+|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|s+0#00e0e07&|1| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|'+0#e000002&|I|N|S|T|A|N|C|E|'| +0#0000000&|&+0#af5f00255&@1| +0#0000000&|M|a|r|k|e|r|E|n|u|m|T|e|s|t|.|I|N|S|T|A|N|C|E|.|s+0#e000e06&|t|r|i|n|g|(|)| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|'+0#e000002&|I|N|S|T|A|N|C|E|'| +0#0000000&@3
+@75
+|c+0#af5f00255&|o|n|s|t| +0#0000000&|p+0#00e0e07&|a|i|r|:+0#0000000&| |P|a|i|r|C|l|a|s@1|T|e|s|t| |=+0#af5f00255&| +0#0000000&|P|a|i|r|C|l|a|s@1|T|e|s|t|.|n+0#e000e06&|e|w|(|0+0#e000002&|,+0#0000000&| |1+0#e000002&|)+0#e000e06&| +0#0000000&@23
+|c+0#af5f00255&|o|n|s|t| +0#0000000&|b+0#00e0e07&|2|:+0#0000000&| |b+0#00e0003&|o@1|l| +0#0000000&|=+0#af5f00255&| +0#0000000&|!+0#af5f00255&|p+0#0000000&|a|i|r|.|e+0#e000e06&|m|p|t|y|(|)| +0#0000000&@44
+|c+0#af5f00255&|o|n|s|t| +0#0000000&|n+0#00e0e07&|2|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|p|a|i|r|.|l+0#e000e06&|e|n|(|)| +0#0000000&@45
+>c+0#af5f00255&|o|n|s|t| +0#0000000&|s+0#00e0e07&|2|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g| +0#0000000&|=+0#af5f00255&| +0#0000000&|p|a|i|r|.|s+0#e000e06&|t|r|i|n|g|(|)| +0#0000000&@42
|e+0#af5f00255&|c|h|o| +0#0000000&|b+0#00e0e07&|2| +0#0000000&|&+0#af5f00255&@1| +0#0000000&|!+0#af5f00255&|e+0#00e0e07&|m|p|t|y|(+0#e000e06&|p+0#00e0e07&|a|i|r|)+0#e000e06&| +0#0000000&@51
->e+0#af5f00255&|c|h|o| +0#0000000&|n+0#00e0e07&|2| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|2+0#e000002&| +0#0000000&|&+0#af5f00255&@1| +0#0000000&|l+0#00e0e07&|e|n|(+0#e000e06&|p+0#00e0e07&|a|i|r|)+0#e000e06&| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|2+0#e000002&| +0#0000000&@44
+|e+0#af5f00255&|c|h|o| +0#0000000&|n+0#00e0e07&|2| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|2+0#e000002&| +0#0000000&|&+0#af5f00255&@1| +0#0000000&|l+0#00e0e07&|e|n|(+0#e000e06&|p+0#00e0e07&|a|i|r|)+0#e000e06&| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|2+0#e000002&| +0#0000000&@44
|e+0#af5f00255&|c|h|o| +0#0000000&|s+0#00e0e07&|2| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|'+0#e000002&|(|0|,| |1|)|'| +0#0000000&|&+0#af5f00255&@1| +0#0000000&|s+0#00e0e07&|t|r|i|n|g|(+0#e000e06&|p+0#00e0e07&|a|i|r|)+0#e000e06&| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|'+0#e000002&|(|0|,| |1|)|'| +0#0000000&@27
|~+0#4040ff13&| @73
|~| @73
@@ -15,6 +17,4 @@
|~| @73
|~| @73
|~| @73
-|~| @73
-|~| @73
| +0#0000000&@56|5@1|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_variables_00.dump b/runtime/syntax/testdir/dumps/vim_variables_00.dump
index da77064..f676448 100644
--- a/runtime/syntax/testdir/dumps/vim_variables_00.dump
+++ b/runtime/syntax/testdir/dumps/vim_variables_00.dump
@@ -2,19 +2,19 @@
@75
|"+0#0000e05&| |:|l|e|t| +0#0000000&@68
@75
-|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e|x|p|r| @60
+|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60
@75
-|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1|[+0#0000000&|0+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e|x|p|r| @57
+|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1|[+0#0000000&|0+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
@75
-|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e|x|p|r| @55
-|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1|[+0#0000000&|:|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e|x|p|r| @56
-|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|]| |=+0#af5f00255&| +0#0000000&|e|x|p|r| @56
-|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1|[+0#0000000&|:|]| |=+0#af5f00255&| +0#0000000&|e|x|p|r| @57
+|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1|[+0#0000000&|:|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56
+|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56
+|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1|[+0#0000000&|:|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
@75
-|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e|x|p|r| @59
-|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e|x|p|r| @59
-|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e|x|p|r| @59
-|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e|x|p|r| @59
-|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e|x|p|r| @59
-|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|.+0#af5f00255&|=| +0#0000000&|e|x|p|r| @59
+|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1|[+0#0000000&|"+0#e000002&|k|e|y|"|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1|[+0#0000000&|'+0#e000002&|k|e|y|'|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim_variables_01.dump b/runtime/syntax/testdir/dumps/vim_variables_01.dump
index 02f6819..8f13398 100644
--- a/runtime/syntax/testdir/dumps/vim_variables_01.dump
+++ b/runtime/syntax/testdir/dumps/vim_variables_01.dump
@@ -1,20 +1,20 @@
-|l+0#af5f00255#ffffff0|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e|x|p|r| @59
-|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e|x|p|r| @59
-|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e|x|p|r| @59
-|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e|x|p|r| @59
-|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e|x|p|r| @59
->l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|.+0#af5f00255&|=| +0#0000000&|e|x|p|r| @59
-|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e|x|p|r| @58
+|l+0#af5f00255#ffffff0|e|t| +0#0000000&|f+0#00e0e07&|o@1|[+0#0000000&|"+0#e000002&|k|e|y|"|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1|[+0#0000000&|'+0#e000002&|k|e|y|'|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
@75
-|l+0#af5f00255&|e|t| +0#0000000&|$+0#e000e06&|F|O@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e|x|p|r| @59
-|l+0#af5f00255&|e|t| +0#0000000&|$+0#e000e06&|F|O@1| +0#0000000&|.+0#af5f00255&|=| +0#0000000&|e|x|p|r| @58
+|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+>l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|.+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58
@75
-|l+0#af5f00255&|e|t| +0#0000000&|@+0#e000e06&|f| +0#0000000&|=+0#af5f00255&| +0#0000000&|e|x|p|r| @61
-|l+0#af5f00255&|e|t| +0#0000000&|@+0#e000e06&|f| +0#0000000&|.+0#af5f00255&|=| +0#0000000&|e|x|p|r| @60
+|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58
@75
-|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e|x|p|r| @59
+|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|:|f|o@1|[+0#0000000&|0+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
@75
-|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|t|_|k|1| +0#0000000&|=+0#af5f00255&| +0#0000000&|"+0#e000002&|\+0#e000e06&|<|E|s|c|>|[+0#e000002&|2|3|4|;|"| +0#0000000&@49
-@75
-|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|f|o@1| +0#0000000&|.+0#af5f00255&|=| +0#0000000&|e|x|p|r| @58
-@57|1|9|,|1| @9|1|0|%|
+|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|:|f|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|:|f|o@1|[+0#0000000&|:|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|:|f|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|:|f|o@1|[+0#0000000&|:|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@57|1|9|,|1| @10|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim_variables_02.dump b/runtime/syntax/testdir/dumps/vim_variables_02.dump
index 8f31c47..bd23de5 100644
--- a/runtime/syntax/testdir/dumps/vim_variables_02.dump
+++ b/runtime/syntax/testdir/dumps/vim_variables_02.dump
@@ -1,20 +1,20 @@
-|l+0#af5f00255#ffffff0|e|t| +0#0000000&|&+0#00e0e07&|f|o@1| +0#0000000&|.+0#af5f00255&|=| +0#0000000&|e|x|p|r| @58
+|l+0#af5f00255#ffffff0|e|t| +0#0000000&|b+0#00e0e07&|:|f|o@1|[+0#0000000&|:|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
@75
-|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e|x|p|r| @58
-|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e|x|p|r| @58
+|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|f|o@1|[+0#0000000&|"+0#e000002&|k|e|y|"|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@52
+|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|f|o@1|[+0#0000000&|'+0#e000002&|k|e|y|'|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@52
@75
->l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|l|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e|x|p|r| @57
+>l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|:|f|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|:|f|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|:|f|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56
@75
-|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|l|:|f|o@1| +0#0000000&|.+0#af5f00255&|=| +0#0000000&|e|x|p|r| @56
-|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|l|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e|x|p|r| @56
-|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|l|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e|x|p|r| @56
+|l+0#af5f00255&|e|t| +0#0000000&|g+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58
@75
-|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|g|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e|x|p|r| @57
+|l+0#af5f00255&|e|t| +0#0000000&|g+0#00e0e07&|:|f|o@1|[+0#0000000&|0+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
@75
-|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|g|:|f|o@1| +0#0000000&|.+0#af5f00255&|=| +0#0000000&|e|x|p|r| @56
-|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|g|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e|x|p|r| @56
-|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|g|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e|x|p|r| @56
-@75
-|l+0#af5f00255&|e|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e|x|p|r| @53
-|l+0#af5f00255&|e|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| @65
-@57|3|7|,|1| @9|2|6|%|
+|l+0#af5f00255&|e|t| +0#0000000&|g+0#00e0e07&|:|f|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|l+0#af5f00255&|e|t| +0#0000000&|g+0#00e0e07&|:|f|o@1|[+0#0000000&|:|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+@57|3|7|,|1| @10|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_variables_03.dump b/runtime/syntax/testdir/dumps/vim_variables_03.dump
index 3e8d21c..e2ff94d 100644
--- a/runtime/syntax/testdir/dumps/vim_variables_03.dump
+++ b/runtime/syntax/testdir/dumps/vim_variables_03.dump
@@ -1,20 +1,20 @@
-|l+0#af5f00255#ffffff0|e|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| @65
-@6|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e|x|p|r| @55
+|l+0#af5f00255#ffffff0|e|t| +0#0000000&|g+0#00e0e07&|:|f|o@1|[+0#0000000&|:|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+|l+0#af5f00255&|e|t| +0#0000000&|g+0#00e0e07&|:|f|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+|l+0#af5f00255&|e|t| +0#0000000&|g+0#00e0e07&|:|f|o@1|[+0#0000000&|:|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
@75
-|l+0#af5f00255&|e|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |.+0#af5f00255&|=| +0#0000000&|e|x|p|r| @52
-|l+0#af5f00255&|e|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |++0#af5f00255&|=| +0#0000000&|e|x|p|r| @52
->l+0#af5f00255&|e|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |-+0#af5f00255&|=| +0#0000000&|e|x|p|r| @52
+|l+0#af5f00255&|e|t| +0#0000000&|g+0#00e0e07&|:|f|o@1|[+0#0000000&|"+0#e000002&|k|e|y|"|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+>l+0#af5f00255&|e|t| +0#0000000&|g+0#00e0e07&|:|f|o@1|[+0#0000000&|'+0#e000002&|k|e|y|'|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
@75
-|l+0#af5f00255&|e|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|;+0#0000000&| |b+0#00e0e07&|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e|x|p|r| @48
-|l+0#af5f00255&|e|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| @65
-@6|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r|;+0#0000000&| @62
-@6|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e|x|p|r| @55
+|l+0#af5f00255&|e|t| +0#0000000&|g+0#00e0e07&|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|g+0#00e0e07&|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|g+0#00e0e07&|:|f|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|g+0#00e0e07&|:|f|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|g+0#00e0e07&|:|f|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|g+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|g+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56
@75
-|l+0#af5f00255&|e|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|;+0#0000000&| |b+0#00e0e07&|a|z|]+0#0000000&| |.+0#af5f00255&|=| +0#0000000&|e|x|p|r| @47
-|l+0#af5f00255&|e|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|;+0#0000000&| |b+0#00e0e07&|a|z|]+0#0000000&| |++0#af5f00255&|=| +0#0000000&|e|x|p|r| @47
-|l+0#af5f00255&|e|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|;+0#0000000&| |b+0#00e0e07&|a|z|]+0#0000000&| |-+0#af5f00255&|=| +0#0000000&|e|x|p|r| @47
+|l+0#af5f00255&|e|t| +0#0000000&|s+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58
@75
-|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |E|N|D| +0#0000000&@59
-|.+0#e000002&@2| +0#0000000&@71
-|E+0#e000e06&|N|D| +0#0000000&@71
-@57|5@1|,|1| @9|4|1|%|
+|l+0#af5f00255&|e|t| +0#0000000&|s+0#00e0e07&|:|f|o@1|[+0#0000000&|0+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@75
+@57|5@1|,|1| @9|1|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim_variables_04.dump b/runtime/syntax/testdir/dumps/vim_variables_04.dump
index 97d240c..2958aed 100644
--- a/runtime/syntax/testdir/dumps/vim_variables_04.dump
+++ b/runtime/syntax/testdir/dumps/vim_variables_04.dump
@@ -1,20 +1,20 @@
-|E+0#e000e06#ffffff0|N|D| +0#0000000&@71
-|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D| +0#0000000&@54
-|.+0#e000002&@2| +0#0000000&@71
-|E+0#e000e06&|N|D| +0#0000000&@71
-|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |E|N|D| +0#0000000&@54
->.+0#e000002&@2| +0#0000000&@71
-|E+0#e000e06&|N|D| +0#0000000&@71
-|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |e|v|a|l| |E|N|D| +0#0000000&@49
-|.+0#e000002&@2| +0#0000000&@71
-|E+0#e000e06&|N|D| +0#0000000&@71
-|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |t|r|i|m| |E|N|D| +0#0000000&@49
-|.+0#e000002&@2| +0#0000000&@71
-|E+0#e000e06&|N|D| +0#0000000&@71
+| +0&#ffffff0@74
+|l+0#af5f00255&|e|t| +0#0000000&|s+0#00e0e07&|:|f|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|l+0#af5f00255&|e|t| +0#0000000&|s+0#00e0e07&|:|f|o@1|[+0#0000000&|:|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+|l+0#af5f00255&|e|t| +0#0000000&|s+0#00e0e07&|:|f|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+|l+0#af5f00255&|e|t| +0#0000000&|s+0#00e0e07&|:|f|o@1|[+0#0000000&|:|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+> @74
+|l+0#af5f00255&|e|t| +0#0000000&|s+0#00e0e07&|:|f|o@1|[+0#0000000&|"+0#e000002&|k|e|y|"|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+|l+0#af5f00255&|e|t| +0#0000000&|s+0#00e0e07&|:|f|o@1|[+0#0000000&|'+0#e000002&|k|e|y|'|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
@75
-|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@67
-|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b|a|r| @63
+|l+0#af5f00255&|e|t| +0#0000000&|s+0#00e0e07&|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|s+0#00e0e07&|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|s+0#00e0e07&|:|f|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|s+0#00e0e07&|:|f|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|s+0#00e0e07&|:|f|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|s+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|s+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56
@75
-|"+0#0000e05&| |:|u|n|l|e|t| +0#0000000&@66
+|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58
@75
-@57|7|3|,|1| @9|5|6|%|
+@57|7|3|,|0|-|1| @7|1|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_variables_05.dump b/runtime/syntax/testdir/dumps/vim_variables_05.dump
index 8254fbe..3933933 100644
--- a/runtime/syntax/testdir/dumps/vim_variables_05.dump
+++ b/runtime/syntax/testdir/dumps/vim_variables_05.dump
@@ -1,20 +1,20 @@
| +0&#ffffff0@74
-|u+0#af5f00255&|n|l|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@65
-|u+0#af5f00255&|n|l|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@61
-|u+0#af5f00255&|n|l|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@65
-@6|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@63
-> @74
-|u+0#af5f00255&|n|l|e|t|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@64
-|u+0#af5f00255&|n|l|e|t|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@60
-|u+0#af5f00255&|n|l|e|t|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@64
-@6|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@63
+|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|:|f|o@1|[+0#0000000&|0+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
@75
-|u+0#af5f00255&|n|l|e|t| +0#0000000&|$+0#e000e06&|F|O@1| +0#0000000&@64
-|u+0#af5f00255&|n|l|e|t|!| +0#0000000&|$+0#e000e06&|F|O@1| +0#0000000&@63
+|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|:|f|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|:|f|o@1|[+0#0000000&|:|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+>l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|:|f|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|:|f|o@1|[+0#0000000&|:|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
@75
-|u+0#af5f00255&|n|l|e|t| +0#0000000&|l+0#00e0e07&|i|s|t|[+0#0000000&|3+0#e000002&|]+0#0000000&| @61
-|u+0#af5f00255&|n|l|e|t| +0#0000000&|l+0#00e0e07&|i|s|t|[+0#0000000&|3+0#e000002&|:+0#0000000&|]| @60
-|u+0#af5f00255&|n|l|e|t| +0#0000000&|d+0#00e0e07&|i|c|t|[+0#0000000&|'+0#e000002&|t|w|o|'|]+0#0000000&| @57
-|u+0#af5f00255&|n|l|e|t| +0#0000000&|d+0#00e0e07&|i|c|t|.+0#0000000&|t+0#00e0e07&|w|o| +0#0000000&@60
+|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|:|f|o@1|[+0#0000000&|"+0#e000002&|k|e|y|"|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|:|f|o@1|[+0#0000000&|'+0#e000002&|k|e|y|'|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
@75
-@57|9|1|,|0|-|1| @7|7|1|%|
+|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|:|f|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|:|f|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|:|f|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|t+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56
+@75
+@57|9|1|,|1| @9|2|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim_variables_06.dump b/runtime/syntax/testdir/dumps/vim_variables_06.dump
index 89b3d41..be006fc 100644
--- a/runtime/syntax/testdir/dumps/vim_variables_06.dump
+++ b/runtime/syntax/testdir/dumps/vim_variables_06.dump
@@ -1,20 +1,20 @@
| +0&#ffffff0@74
-|"+0#0000e05&| |:|c|o|n|s|t| +0#0000000&@66
+|l+0#af5f00255&|e|t| +0#0000000&|v+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58
@75
-|c+0#af5f00255&|o|n|s|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e|x|p|r| @58
+|l+0#af5f00255&|e|t| +0#0000000&|v+0#00e0e07&|:|f|o@1|[+0#0000000&|0+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
@75
->c+0#af5f00255&|o|n|s|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e|x|p|r| @51
+>l+0#af5f00255&|e|t| +0#0000000&|v+0#00e0e07&|:|f|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|l+0#af5f00255&|e|t| +0#0000000&|v+0#00e0e07&|:|f|o@1|[+0#0000000&|:|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+|l+0#af5f00255&|e|t| +0#0000000&|v+0#00e0e07&|:|f|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+|l+0#af5f00255&|e|t| +0#0000000&|v+0#00e0e07&|:|f|o@1|[+0#0000000&|:|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
@75
-|c+0#af5f00255&|o|n|s|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|;+0#0000000&| |b+0#00e0e07&|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e|x|p|r| @46
+|l+0#af5f00255&|e|t| +0#0000000&|v+0#00e0e07&|:|f|o@1|[+0#0000000&|"+0#e000002&|k|e|y|"|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+|l+0#af5f00255&|e|t| +0#0000000&|v+0#00e0e07&|:|f|o@1|[+0#0000000&|'+0#e000002&|k|e|y|'|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
@75
-|c+0#af5f00255&|o|n|s|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |E|N|D| +0#0000000&@57
-|.+0#e000002&@2| +0#0000000&@71
-|E+0#e000e06&|N|D| +0#0000000&@71
-|c+0#af5f00255&|o|n|s|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D| +0#0000000&@52
-|.+0#e000002&@2| +0#0000000&@71
-|E+0#e000e06&|N|D| +0#0000000&@71
-|c+0#af5f00255&|o|n|s|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |E|N|D| +0#0000000&@52
-|.+0#e000002&@2| +0#0000000&@71
-|E+0#e000e06&|N|D| +0#0000000&@71
-|c+0#af5f00255&|o|n|s|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |e|v|a|l| |E|N|D| +0#0000000&@47
-@57|1|0|9|,|1| @8|8|6|%|
+|l+0#af5f00255&|e|t| +0#0000000&|v+0#00e0e07&|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|v+0#00e0e07&|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|v+0#00e0e07&|:|f|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|v+0#00e0e07&|:|f|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|v+0#00e0e07&|:|f|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|v+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+@57|1|0|9|,|1| @8|2|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_variables_07.dump b/runtime/syntax/testdir/dumps/vim_variables_07.dump
index f0288f0..7851c85 100644
--- a/runtime/syntax/testdir/dumps/vim_variables_07.dump
+++ b/runtime/syntax/testdir/dumps/vim_variables_07.dump
@@ -1,20 +1,20 @@
-|c+0#af5f00255#ffffff0|o|n|s|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |e|v|a|l| |E|N|D| +0#0000000&@47
-|.+0#e000002&@2| +0#0000000&@71
-|E+0#e000e06&|N|D| +0#0000000&@71
-|c+0#af5f00255&|o|n|s|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |t|r|i|m| |E|N|D| +0#0000000&@47
-|.+0#e000002&@2| +0#0000000&@71
->E+0#e000e06&|N|D| +0#0000000&@71
+|l+0#af5f00255#ffffff0|e|t| +0#0000000&|v+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|v+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56
@75
-|c+0#af5f00255&|o|n|s|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@65
-|c+0#af5f00255&|o|n|s|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b|a|r| @61
+|l+0#af5f00255&|e|t| +0#0000000&|w+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58
@75
-|"+0#0000e05&| |:|f|o|r| +0#0000000&@68
+>l+0#af5f00255&|e|t| +0#0000000&|w+0#00e0e07&|:|f|o@1|[+0#0000000&|0+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
@75
-|f+0#af5f00255&|o|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|e|x|p|r| @59
-|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68
+|l+0#af5f00255&|e|t| +0#0000000&|w+0#00e0e07&|:|f|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|l+0#af5f00255&|e|t| +0#0000000&|w+0#00e0e07&|:|f|o@1|[+0#0000000&|:|2+0#e000002&|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+|l+0#af5f00255&|e|t| +0#0000000&|w+0#00e0e07&|:|f|o@1|[+0#0000000&|1+0#e000002&|:+0#0000000&|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+|l+0#af5f00255&|e|t| +0#0000000&|w+0#00e0e07&|:|f|o@1|[+0#0000000&|:|]| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
@75
-|f+0#af5f00255&|o|r| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |i+0#af5f00255&|n| +0#0000000&|e|x|p|r| @52
-|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68
-|~+0#4040ff13&| @73
-|~| @73
-| +0#0000000&@56|1|2|7|,|1| @8|B|o|t|
+|l+0#af5f00255&|e|t| +0#0000000&|w+0#00e0e07&|:|f|o@1|[+0#0000000&|"+0#e000002&|k|e|y|"|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+|l+0#af5f00255&|e|t| +0#0000000&|w+0#00e0e07&|:|f|o@1|[+0#0000000&|'+0#e000002&|k|e|y|'|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|w+0#00e0e07&|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|w+0#00e0e07&|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|w+0#00e0e07&|:|f|o@1| +0#0000000&|*+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|w+0#00e0e07&|:|f|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+@57|1|2|7|,|1| @8|3@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_variables_08.dump b/runtime/syntax/testdir/dumps/vim_variables_08.dump
new file mode 100644
index 0000000..33de2cf
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_variables_08.dump
@@ -0,0 +1,20 @@
+|l+0#af5f00255#ffffff0|e|t| +0#0000000&|w+0#00e0e07&|:|f|o@1| +0#0000000&|/+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|w+0#00e0e07&|:|f|o@1| +0#0000000&|%+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|w+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|w+0#00e0e07&|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56
+@75
+>l+0#af5f00255&|e|t| +0#0000000&|$+0#e000e06&|F|O@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+|l+0#af5f00255&|e|t| +0#0000000&|$+0#e000e06&|F|O@1| +0#0000000&|.+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58
+|l+0#af5f00255&|e|t| +0#0000000&|$+0#e000e06&|F|O@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|@+0#e000e06&|f| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@61
+|l+0#af5f00255&|e|t| +0#0000000&|@+0#e000e06&|f| +0#0000000&|.+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@60
+|l+0#af5f00255&|e|t| +0#0000000&|@+0#e000e06&|f| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|t|_|k|1| +0#0000000&|=+0#af5f00255&| +0#0000000&|"+0#e000002&|\+0#e000e06&|<|E|s|c|>|[+0#e000002&|2|3|4|;|"| +0#0000000&@49
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|f|o@1| +0#0000000&|.+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58
+|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+@57|1|4|5|,|1| @8|3|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_variables_09.dump b/runtime/syntax/testdir/dumps/vim_variables_09.dump
new file mode 100644
index 0000000..101d7a2
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_variables_09.dump
@@ -0,0 +1,20 @@
+|l+0#af5f00255#ffffff0|e|t| +0#0000000&|&+0#00e0e07&|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58
+|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|l|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+> @74
+|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|l|:|f|o@1| +0#0000000&|.+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56
+|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|l|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|l|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56
+|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|l|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|g|:|f|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|g|:|f|o@1| +0#0000000&|.+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56
+|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|g|:|f|o@1| +0#0000000&|.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|g|:|f|o@1| +0#0000000&|++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56
+|l+0#af5f00255&|e|t| +0#0000000&|&+0#00e0e07&|g|:|f|o@1| +0#0000000&|-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+@57|1|6|3|,|0|-|1| @6|4|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim_variables_10.dump b/runtime/syntax/testdir/dumps/vim_variables_10.dump
new file mode 100644
index 0000000..254ec89
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_variables_10.dump
@@ -0,0 +1,20 @@
+|l+0#af5f00255#ffffff0|e|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|l+0#af5f00255&|e|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| @65
+@6|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+|l+0#af5f00255&|e|t| +0#0000000&|[|v+0#00e0e07&|:|f|o@1|,+0#0000000&| |v+0#00e0e07&|:|b|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49
+|l+0#af5f00255&|e|t| +0#0000000&|[|v+0#00e0e07&|:|f|o@1|,+0#0000000&| @63
+@6>\+0#e000e06&| +0#0000000&|v+0#00e0e07&|:|b|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|l+0#af5f00255&|e|t| +0#0000000&|[|&+0#00e0e07&|f|o@1|,+0#0000000&| |&+0#00e0e07&|b|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+|l+0#af5f00255&|e|t| +0#0000000&|[|&+0#00e0e07&|f|o@1|,+0#0000000&| @64
+@6|\+0#e000e06&| +0#0000000&@1|&+0#00e0e07&|b|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|l+0#af5f00255&|e|t| +0#0000000&|[|$+0#e000e06&|f|o@1|,+0#0000000&| |$+0#e000e06&|b|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+|l+0#af5f00255&|e|t| +0#0000000&|[|$+0#e000e06&|f|o@1|,+0#0000000&| @64
+@6|\+0#e000e06&| +0#0000000&@1|$+0#e000e06&|b|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|l+0#af5f00255&|e|t| +0#0000000&|[|@+0#e000e06&|a|,+0#0000000&| |@+0#e000e06&|b|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+|l+0#af5f00255&|e|t| +0#0000000&|[|@+0#e000e06&|a|,+0#0000000&| @66
+@6|\+0#e000e06&| +0#0000000&@1|@+0#e000e06&|b|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |.+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@52
+|l+0#af5f00255&|e|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |.+0#af5f00255&@1|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+|l+0#af5f00255&|e|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@52
+@57|1|8|1|,|7| @8|4|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_variables_11.dump b/runtime/syntax/testdir/dumps/vim_variables_11.dump
new file mode 100644
index 0000000..7bb6003
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_variables_11.dump
@@ -0,0 +1,20 @@
+|l+0#af5f00255#ffffff0|e|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |++0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@52
+|l+0#af5f00255&|e|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |-+0#af5f00255&|=| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@52
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|;+0#0000000&| |b+0#00e0e07&|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@48
+|l+0#af5f00255&|e|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| @65
+@6>\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r|;+0#0000000&| @62
+@6|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@55
+|l+0#af5f00255&|e|t| +0#0000000&|[|v+0#00e0e07&|:|f|o@1|,+0#0000000&| |v+0#00e0e07&|:|b|a|r|;+0#0000000&| |v+0#00e0e07&|:|b|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@42
+|l+0#af5f00255&|e|t| +0#0000000&|[|v+0#00e0e07&|:|f|o@1|,+0#0000000&| @63
+@6|\+0#e000e06&| +0#0000000&|v+0#00e0e07&|:|b|a|r|;+0#0000000&| @60
+@6|\+0#e000e06&| +0#0000000&|v+0#00e0e07&|:|b|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@53
+|l+0#af5f00255&|e|t| +0#0000000&|[|$+0#e000e06&|f|o@1|,+0#0000000&| |$+0#e000e06&|b|a|r|;+0#0000000&| |$+0#e000e06&|b|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@45
+|l+0#af5f00255&|e|t| +0#0000000&|[|$+0#e000e06&|f|o@1|,+0#0000000&| @64
+@6|\+0#e000e06&| +0#0000000&|$+0#e000e06&|b|a|r|;+0#0000000&| @61
+@6|\+0#e000e06&| +0#0000000&|$+0#e000e06&|b|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+|l+0#af5f00255&|e|t| +0#0000000&|[|&+0#00e0e07&|f|o@1|,+0#0000000&| |&+0#00e0e07&|b|a|r|;+0#0000000&| |&+0#00e0e07&|b|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@45
+|l+0#af5f00255&|e|t| +0#0000000&|[|&+0#00e0e07&|f|o@1|,+0#0000000&| @64
+@6|\+0#e000e06&| +0#0000000&|&+0#00e0e07&|b|a|r|;+0#0000000&| @61
+@6|\+0#e000e06&| +0#0000000&|&+0#00e0e07&|b|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+@57|1|9@1|,|7| @8|5|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim_variables_12.dump b/runtime/syntax/testdir/dumps/vim_variables_12.dump
new file mode 100644
index 0000000..db1c966
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_variables_12.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|&+0#00e0e07&|b|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
+|l+0#af5f00255&|e|t| +0#0000000&|[|@+0#e000e06&|a|,+0#0000000&| |@+0#e000e06&|b|;+0#0000000&| |@+0#e000e06&|c|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+|l+0#af5f00255&|e|t| +0#0000000&|[|@+0#e000e06&|a|,+0#0000000&| @66
+@6|\+0#e000e06&| +0#0000000&|@+0#e000e06&|b|;+0#0000000&| @63
+@6|\+0#e000e06&| +0#0000000&|@+0#e000e06&|c|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@56
+> @74
+|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |E|N|D| +0#0000000&@59
+|.+0#e000002&@2| +0#0000000&@71
+|E+0#e000e06&|N|D| +0#0000000&@71
+|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D| +0#0000000&@54
+|.+0#e000002&@2| +0#0000000&@71
+|E+0#e000e06&|N|D| +0#0000000&@71
+|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |E|N|D| +0#0000000&@54
+|.+0#e000002&@2| +0#0000000&@71
+|E+0#e000e06&|N|D| +0#0000000&@71
+|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |e|v|a|l| |E|N|D| +0#0000000&@49
+|.+0#e000002&@2| +0#0000000&@71
+|E+0#e000e06&|N|D| +0#0000000&@71
+|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |t|r|i|m| |E|N|D| +0#0000000&@49
+@57|2|1|7|,|0|-|1| @6|5|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_variables_13.dump b/runtime/syntax/testdir/dumps/vim_variables_13.dump
new file mode 100644
index 0000000..64706fd
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_variables_13.dump
@@ -0,0 +1,20 @@
+|l+0#af5f00255#ffffff0|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |t|r|i|m| |E|N|D| +0#0000000&@49
+|.+0#e000002&@2| +0#0000000&@71
+|E+0#e000e06&|N|D| +0#0000000&@71
+@75
+|"+0#0000e05&| |:|l|e|t| |l|i|s|t| |v|a|l|u|e|s| +0#0000000&@56
+> @74
+|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@67
+|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b|a|r| @63
+|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@67
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|b|a|r| @63
+@75
+|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@57
+|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@54
+|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b|a|r| |"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53
+|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b|a|r| ||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@50
+|l+0#af5f00255&|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b|a|r| |"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@52
+@75
+@57|2|3|5|,|0|-|1| @6|6|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim_variables_14.dump b/runtime/syntax/testdir/dumps/vim_variables_14.dump
new file mode 100644
index 0000000..cdda808
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_variables_14.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|"+0#0000e05&| |:|u|n|l|e|t| +0#0000000&@66
+@75
+|u+0#af5f00255&|n|l|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@65
+|u+0#af5f00255&|n|l|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@61
+>u+0#af5f00255&|n|l|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@65
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@63
+@75
+|u+0#af5f00255&|n|l|e|t|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@64
+|u+0#af5f00255&|n|l|e|t|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@60
+|u+0#af5f00255&|n|l|e|t|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@64
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@63
+@75
+|u+0#af5f00255&|n|l|e|t| +0#0000000&|$+0#e000e06&|F|O@1| +0#0000000&@64
+|u+0#af5f00255&|n|l|e|t|!| +0#0000000&|$+0#e000e06&|F|O@1| +0#0000000&@63
+@75
+|u+0#af5f00255&|n|l|e|t| +0#0000000&|l+0#00e0e07&|i|s|t|[+0#0000000&|3+0#e000002&|]+0#0000000&| @61
+@57|2|5|3|,|1| @8|6|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_variables_15.dump b/runtime/syntax/testdir/dumps/vim_variables_15.dump
new file mode 100644
index 0000000..44a9223
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_variables_15.dump
@@ -0,0 +1,20 @@
+|u+0#af5f00255#ffffff0|n|l|e|t| +0#0000000&|l+0#00e0e07&|i|s|t|[+0#0000000&|3+0#e000002&|]+0#0000000&| @61
+|u+0#af5f00255&|n|l|e|t| +0#0000000&|l+0#00e0e07&|i|s|t|[+0#0000000&|3+0#e000002&|:+0#0000000&|]| @60
+|u+0#af5f00255&|n|l|e|t| +0#0000000&|d+0#00e0e07&|i|c|t|[+0#0000000&|'+0#e000002&|t|w|o|'|]+0#0000000&| @57
+|u+0#af5f00255&|n|l|e|t| +0#0000000&|d+0#00e0e07&|i|c|t|.+0#0000000&|t+0#00e0e07&|w|o| +0#0000000&@60
+@75
+>u+0#af5f00255&|n|l|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@55
+|u+0#af5f00255&|n|l|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@54
+|u+0#af5f00255&|n|l|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@52
+|u+0#af5f00255&|n|l|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@51
+|u+0#af5f00255&|n|l|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@50
+|u+0#af5f00255&|n|l|e|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@48
+@75
+|"+0#0000e05&| |:|c|o|n|s|t| +0#0000000&@66
+@75
+|c+0#af5f00255&|o|n|s|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58
+@75
+|c+0#af5f00255&|o|n|s|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
+@75
+|c+0#af5f00255&|o|n|s|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|;+0#0000000&| |b+0#00e0e07&|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@46
+@57|2|7|1|,|1| @8|7|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim_variables_16.dump b/runtime/syntax/testdir/dumps/vim_variables_16.dump
new file mode 100644
index 0000000..5821a4c
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_variables_16.dump
@@ -0,0 +1,20 @@
+|c+0#af5f00255#ffffff0|o|n|s|t| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|;+0#0000000&| |b+0#00e0e07&|a|z|]+0#0000000&| |=+0#af5f00255&| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@46
+@75
+|c+0#af5f00255&|o|n|s|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |E|N|D| +0#0000000&@57
+|.+0#e000002&@2| +0#0000000&@71
+|E+0#e000e06&|N|D| +0#0000000&@71
+>c+0#af5f00255&|o|n|s|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D| +0#0000000&@52
+|.+0#e000002&@2| +0#0000000&@71
+|E+0#e000e06&|N|D| +0#0000000&@71
+|c+0#af5f00255&|o|n|s|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |E|N|D| +0#0000000&@52
+|.+0#e000002&@2| +0#0000000&@71
+|E+0#e000e06&|N|D| +0#0000000&@71
+|c+0#af5f00255&|o|n|s|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |e|v|a|l| |E|N|D| +0#0000000&@47
+|.+0#e000002&@2| +0#0000000&@71
+|E+0#e000e06&|N|D| +0#0000000&@71
+|c+0#af5f00255&|o|n|s|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |t|r|i|m| |E|N|D| +0#0000000&@47
+|.+0#e000002&@2| +0#0000000&@71
+|E+0#e000e06&|N|D| +0#0000000&@71
+@75
+|c+0#af5f00255&|o|n|s|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@65
+@57|2|8|9|,|1| @8|7@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_variables_17.dump b/runtime/syntax/testdir/dumps/vim_variables_17.dump
new file mode 100644
index 0000000..1ba8505
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_variables_17.dump
@@ -0,0 +1,20 @@
+|c+0#af5f00255#ffffff0|o|n|s|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@65
+|c+0#af5f00255&|o|n|s|t| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b|a|r| @61
+@75
+|"+0#0000e05&| |:|f|o|r| +0#0000000&@68
+@75
+>f+0#af5f00255&|o|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
+|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68
+@75
+|f+0#af5f00255&|o|r| +0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&| |i+0#af5f00255&|n| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@52
+|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@68
+@75
+|"+0#0000e05&| |:|l|o|c|k|v|a|r| +0#0000000&@64
+@75
+|l+0#af5f00255&|o|c|k|v|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@63
+|l+0#af5f00255&|o|c|k|v|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@59
+|l+0#af5f00255&|o|c|k|v|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@63
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@63
+@75
+@57|3|0|7|,|1| @8|8|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim_variables_18.dump b/runtime/syntax/testdir/dumps/vim_variables_18.dump
new file mode 100644
index 0000000..9a79802
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_variables_18.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|l+0#af5f00255&|o|c|k|v|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53
+|l+0#af5f00255&|o|c|k|v|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@50
+|l+0#af5f00255&|o|c|k|v|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@49
+|l+0#af5f00255&|o|c|k|v|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@46
+> @74
+|l+0#af5f00255&|o|c|k|v|a|r|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@62
+|l+0#af5f00255&|o|c|k|v|a|r|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@58
+|l+0#af5f00255&|o|c|k|v|a|r|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@62
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@63
+@75
+|l+0#af5f00255&|o|c|k|v|a|r|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@52
+|l+0#af5f00255&|o|c|k|v|a|r|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@49
+|l+0#af5f00255&|o|c|k|v|a|r|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@48
+|l+0#af5f00255&|o|c|k|v|a|r|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@45
+@75
+|l+0#af5f00255&|o|c|k|v|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@61
+|l+0#af5f00255&|o|c|k|v|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@57
+@57|3|2|5|,|0|-|1| @6|8|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_variables_19.dump b/runtime/syntax/testdir/dumps/vim_variables_19.dump
new file mode 100644
index 0000000..dcaa8aa
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_variables_19.dump
@@ -0,0 +1,20 @@
+|l+0#af5f00255#ffffff0|o|c|k|v|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@57
+|l+0#af5f00255&|o|c|k|v|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@61
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@63
+@75
+>l+0#af5f00255&|o|c|k|v|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@51
+|l+0#af5f00255&|o|c|k|v|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@48
+|l+0#af5f00255&|o|c|k|v|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@47
+|l+0#af5f00255&|o|c|k|v|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@44
+@75
+|"+0#0000e05&| |:|u|n|l|o|c|k|v|a|r| +0#0000000&@62
+@75
+|u+0#af5f00255&|n|l|o|c|k|v|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@61
+|u+0#af5f00255&|n|l|o|c|k|v|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@57
+|u+0#af5f00255&|n|l|o|c|k|v|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@61
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@63
+@75
+|u+0#af5f00255&|n|l|o|c|k|v|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@51
+@57|3|4|3|,|1| @8|9|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim_variables_20.dump b/runtime/syntax/testdir/dumps/vim_variables_20.dump
new file mode 100644
index 0000000..4eb79fd
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_variables_20.dump
@@ -0,0 +1,20 @@
+|u+0#af5f00255#ffffff0|n|l|o|c|k|v|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@51
+|u+0#af5f00255&|n|l|o|c|k|v|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@48
+|u+0#af5f00255&|n|l|o|c|k|v|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@47
+|u+0#af5f00255&|n|l|o|c|k|v|a|r| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@44
+@75
+>u+0#af5f00255&|n|l|o|c|k|v|a|r|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@60
+|u+0#af5f00255&|n|l|o|c|k|v|a|r|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@56
+|u+0#af5f00255&|n|l|o|c|k|v|a|r|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@60
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@63
+@75
+|u+0#af5f00255&|n|l|o|c|k|v|a|r|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@50
+|u+0#af5f00255&|n|l|o|c|k|v|a|r|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@47
+|u+0#af5f00255&|n|l|o|c|k|v|a|r|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@46
+|u+0#af5f00255&|n|l|o|c|k|v|a|r|!| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@43
+@75
+|u+0#af5f00255&|n|l|o|c|k|v|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@59
+|u+0#af5f00255&|n|l|o|c|k|v|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@55
+|u+0#af5f00255&|n|l|o|c|k|v|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@59
+@57|3|6|1|,|1| @8|9|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_variables_21.dump b/runtime/syntax/testdir/dumps/vim_variables_21.dump
new file mode 100644
index 0000000..36a08af
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_variables_21.dump
@@ -0,0 +1,20 @@
+|u+0#af5f00255#ffffff0|n|l|o|c|k|v|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&@59
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&@63
+@75
+|u+0#af5f00255&|n|l|o|c|k|v|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@49
+>u+0#af5f00255&|n|l|o|c|k|v|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@46
+|u+0#af5f00255&|n|l|o|c|k|v|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@45
+|u+0#af5f00255&|n|l|o|c|k|v|a|r| +0#0000000&|2+0#e000002&| +0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@42
+@75
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|3|7|9|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/input/setup/vim9_block.vim b/runtime/syntax/testdir/input/setup/vim9_block.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim9_block.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim9_comment.vim b/runtime/syntax/testdir/input/setup/vim9_comment.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim9_comment.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim9_def_variables.vim b/runtime/syntax/testdir/input/setup/vim9_def_variables.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim9_def_variables.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim9_ex_class_fold.vim b/runtime/syntax/testdir/input/setup/vim9_ex_class_fold.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim9_ex_class_fold.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim9_ex_commands.vim b/runtime/syntax/testdir/input/setup/vim9_ex_commands.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim9_ex_commands.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim9_ex_for.vim b/runtime/syntax/testdir/input/setup/vim9_ex_for.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim9_ex_for.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim9_ex_function_def_tail_comment_errors.vim b/runtime/syntax/testdir/input/setup/vim9_ex_function_def_tail_comment_errors.vim
new file mode 100644
index 0000000..c039651
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim9_ex_function_def_tail_comment_errors.vim
@@ -0,0 +1,2 @@
+highlight link vimVar Identifier
+highlight link vimFuncScope Special
diff --git a/runtime/syntax/testdir/input/setup/vim9_ex_function_def_tail_comments.vim b/runtime/syntax/testdir/input/setup/vim9_ex_function_def_tail_comments.vim
new file mode 100644
index 0000000..c039651
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim9_ex_function_def_tail_comments.vim
@@ -0,0 +1,2 @@
+highlight link vimVar Identifier
+highlight link vimFuncScope Special
diff --git a/runtime/syntax/testdir/input/setup/vim9_ex_interface_fold.vim b/runtime/syntax/testdir/input/setup/vim9_ex_interface_fold.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim9_ex_interface_fold.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim9_ex_loadkeymap.vim b/runtime/syntax/testdir/input/setup/vim9_ex_loadkeymap.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim9_ex_loadkeymap.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim9_expr.vim b/runtime/syntax/testdir/input/setup/vim9_expr.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim9_expr.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim9_lambda.vim b/runtime/syntax/testdir/input/setup/vim9_lambda.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim9_lambda.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim9_legacy_header.vim b/runtime/syntax/testdir/input/setup/vim9_legacy_header.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim9_legacy_header.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim9_super_this_keywords.vim b/runtime/syntax/testdir/input/setup/vim9_super_this_keywords.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim9_super_this_keywords.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim9_super_this_keywords2.vim b/runtime/syntax/testdir/input/setup/vim9_super_this_keywords2.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim9_super_this_keywords2.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim9_super_this_keywords3.vim b/runtime/syntax/testdir/input/setup/vim9_super_this_keywords3.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim9_super_this_keywords3.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim9_variables.vim b/runtime/syntax/testdir/input/setup/vim9_variables.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim9_variables.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim_comment.vim b/runtime/syntax/testdir/input/setup/vim_comment.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim_comment.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim_ex_call.vim b/runtime/syntax/testdir/input/setup/vim_ex_call.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim_ex_call.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim_ex_command.vim b/runtime/syntax/testdir/input/setup/vim_ex_command.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim_ex_command.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim_ex_commands.vim b/runtime/syntax/testdir/input/setup/vim_ex_commands.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim_ex_commands.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim_ex_def.vim b/runtime/syntax/testdir/input/setup/vim_ex_def.vim
new file mode 100644
index 0000000..c039651
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim_ex_def.vim
@@ -0,0 +1,2 @@
+highlight link vimVar Identifier
+highlight link vimFuncScope Special
diff --git a/runtime/syntax/testdir/input/setup/vim_ex_def_fold.vim b/runtime/syntax/testdir/input/setup/vim_ex_def_fold.vim
new file mode 100644
index 0000000..c039651
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim_ex_def_fold.vim
@@ -0,0 +1,2 @@
+highlight link vimVar Identifier
+highlight link vimFuncScope Special
diff --git a/runtime/syntax/testdir/input/setup/vim_ex_def_nested.vim b/runtime/syntax/testdir/input/setup/vim_ex_def_nested.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim_ex_def_nested.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim_ex_def_nested_fold.vim b/runtime/syntax/testdir/input/setup/vim_ex_def_nested_fold.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim_ex_def_nested_fold.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim_ex_echo.vim b/runtime/syntax/testdir/input/setup/vim_ex_echo.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim_ex_echo.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim_ex_execute.vim b/runtime/syntax/testdir/input/setup/vim_ex_execute.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim_ex_execute.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim_ex_for.vim b/runtime/syntax/testdir/input/setup/vim_ex_for.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim_ex_for.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim_ex_function.vim b/runtime/syntax/testdir/input/setup/vim_ex_function.vim
new file mode 100644
index 0000000..c039651
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim_ex_function.vim
@@ -0,0 +1,2 @@
+highlight link vimVar Identifier
+highlight link vimFuncScope Special
diff --git a/runtime/syntax/testdir/input/setup/vim_ex_function_def_tail_comment_errors.vim b/runtime/syntax/testdir/input/setup/vim_ex_function_def_tail_comment_errors.vim
new file mode 100644
index 0000000..c039651
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim_ex_function_def_tail_comment_errors.vim
@@ -0,0 +1,2 @@
+highlight link vimVar Identifier
+highlight link vimFuncScope Special
diff --git a/runtime/syntax/testdir/input/setup/vim_ex_function_def_tail_comments.vim b/runtime/syntax/testdir/input/setup/vim_ex_function_def_tail_comments.vim
new file mode 100644
index 0000000..c039651
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim_ex_function_def_tail_comments.vim
@@ -0,0 +1,2 @@
+highlight link vimVar Identifier
+highlight link vimFuncScope Special
diff --git a/runtime/syntax/testdir/input/setup/vim_ex_function_fold.vim b/runtime/syntax/testdir/input/setup/vim_ex_function_fold.vim
new file mode 100644
index 0000000..c039651
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim_ex_function_fold.vim
@@ -0,0 +1,2 @@
+highlight link vimVar Identifier
+highlight link vimFuncScope Special
diff --git a/runtime/syntax/testdir/input/setup/vim_ex_let_heredoc.vim b/runtime/syntax/testdir/input/setup/vim_ex_let_heredoc.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim_ex_let_heredoc.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim_ex_loadkeymap.vim b/runtime/syntax/testdir/input/setup/vim_ex_loadkeymap.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim_ex_loadkeymap.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim_ex_loadkeymap_after_bar.vim b/runtime/syntax/testdir/input/setup/vim_ex_loadkeymap_after_bar.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim_ex_loadkeymap_after_bar.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim_ex_loadkeymap_after_colon.vim b/runtime/syntax/testdir/input/setup/vim_ex_loadkeymap_after_colon.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim_ex_loadkeymap_after_colon.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim_ex_map.vim b/runtime/syntax/testdir/input/setup/vim_ex_map.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim_ex_map.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim_ex_match.vim b/runtime/syntax/testdir/input/setup/vim_ex_match.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim_ex_match.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim_ex_menu.vim b/runtime/syntax/testdir/input/setup/vim_ex_menu.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim_ex_menu.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim_ex_substitute.vim b/runtime/syntax/testdir/input/setup/vim_ex_substitute.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim_ex_substitute.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim_ex_syntax.vim b/runtime/syntax/testdir/input/setup/vim_ex_syntax.vim
new file mode 100644
index 0000000..c039651
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim_ex_syntax.vim
@@ -0,0 +1,2 @@
+highlight link vimVar Identifier
+highlight link vimFuncScope Special
diff --git a/runtime/syntax/testdir/input/setup/vim_expr.vim b/runtime/syntax/testdir/input/setup/vim_expr.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim_expr.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim_function_variables.vim b/runtime/syntax/testdir/input/setup/vim_function_variables.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim_function_variables.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim_lambda.vim b/runtime/syntax/testdir/input/setup/vim_lambda.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim_lambda.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim_line_continuation.vim b/runtime/syntax/testdir/input/setup/vim_line_continuation.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim_line_continuation.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim_object_methods.vim b/runtime/syntax/testdir/input/setup/vim_object_methods.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim_object_methods.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/setup/vim_variables.vim b/runtime/syntax/testdir/input/setup/vim_variables.vim
new file mode 100644
index 0000000..9223fa8
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim_variables.vim
@@ -0,0 +1 @@
+highlight link vimVar Identifier
diff --git a/runtime/syntax/testdir/input/vim9_block.vim b/runtime/syntax/testdir/input/vim9_block.vim
new file mode 100644
index 0000000..3880f97
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim9_block.vim
@@ -0,0 +1,33 @@
+vim9script
+
+# Vim9 blocks
+
+
+{
+ var foo = 42
+}
+
+{
+ {
+ {
+ {
+ var foo = 42
+ }
+ var foo = 42
+ }
+ var foo = 42
+ }
+ var foo = 42
+}
+
+def Foo()
+ {
+ var foo = 42
+ echo foo
+ }
+enddef
+
+echo "foo" | {
+ var foo = 42
+}
+
diff --git a/runtime/syntax/testdir/input/vim9_def_variables.vim b/runtime/syntax/testdir/input/vim9_def_variables.vim
new file mode 100644
index 0000000..94ef810
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim9_def_variables.vim
@@ -0,0 +1,200 @@
+vim9script
+
+# Vim9 function variable highlighting
+
+def Foo()
+ # Declarations
+
+ var foo = expr
+
+ b:foo = expr
+ g:foo = expr
+ t:foo = expr
+ w:foo = expr
+
+ v:foo = expr
+
+ $FOO = expr
+
+ var [foo, bar] = expr
+ var [foo,
+ \ bar] = expr
+ var [$foo, $bar] = expr
+ var [$foo,
+ \ $bar] = expr
+
+ var [foo, bar; baz] = expr
+ var [foo,
+ \ bar;
+ \ baz] = expr
+ var [$foo, $bar; $baz] = expr
+ var [$foo,
+ \ $bar;
+ \ $baz] = expr
+
+ var foo =<< END
+...
+END
+ var foo =<< trim END
+ ...
+ END
+ var foo =<< eval END
+...
+END
+ var foo =<< trim eval END
+ ...
+ END
+ var foo =<< eval trim END
+ ...
+ END
+
+ # Assignments
+
+ foo = expr
+
+ foo[0] = expr
+
+ foo[1:2] = expr
+ foo[:2] = expr
+ foo[1:] = expr
+ foo[:] = expr
+
+ foo += expr
+ foo -= expr
+ foo *= expr
+ foo /= expr
+ foo %= expr
+ foo ..= expr
+
+ b:foo = expr
+ g:foo = expr
+ t:foo = expr
+ w:foo = expr
+
+ b:foo += expr
+ g:foo += expr
+ t:foo += expr
+ w:foo += expr
+
+ b:foo -= expr
+ g:foo -= expr
+ t:foo -= expr
+ w:foo -= expr
+
+ b:foo *= expr
+ g:foo *= expr
+ t:foo *= expr
+ w:foo *= expr
+
+ b:foo /= expr
+ g:foo /= expr
+ t:foo /= expr
+ w:foo /= expr
+
+ b:foo %= expr
+ g:foo %= expr
+ t:foo %= expr
+ w:foo %= expr
+
+ b:foo ..= expr
+ g:foo ..= expr
+ t:foo ..= expr
+ w:foo ..= expr
+
+ $FOO = expr
+ $FOO ..= expr
+
+ @f = expr
+ @f ..= expr
+
+ &foo = expr
+
+ &t_k1 = "\<Esc>[234;"
+
+ &foo ..= expr
+
+ &foo += expr
+ &foo -= expr
+
+ &l:foo = expr
+
+ &l:foo ..= expr
+ &l:foo += expr
+ &l:foo -= expr
+
+ &g:foo = expr
+
+ &g:foo ..= expr
+ &g:foo += expr
+ &g:foo -= expr
+
+ [foo, bar] = expr
+ [foo,
+ \ bar] = expr
+ [v:foo, v:bar] = expr
+ [v:foo,
+ \ v:bar] = expr
+ [&foo, &bar] = expr
+ [&foo,
+ \ &bar] = expr
+ [$foo, $bar] = expr
+ [$foo,
+ \ $bar] = expr
+ [@a, @b] = expr
+ [@a,
+ \ @a] = expr
+
+ [foo, bar] ..= expr
+ [foo, bar] += expr
+ [foo, bar] -= expr
+ [foo, bar] *= expr
+ [foo, bar] /= expr
+ [foo, bar] %= expr
+
+ [foo, bar; baz] = expr
+ [foo,
+ \ bar;
+ \ baz] = expr
+ [v:foo, v:bar; v:baz] = expr
+ [v:foo,
+ \ v:bar;
+ \ v:baz] = expr
+ [$foo, $bar; $baz] = expr
+ [$foo,
+ \ $bar;
+ \ $baz] = expr
+ [&foo, &bar; &baz] = expr
+ [&foo,
+ \ &bar;
+ \ &baz] = expr
+ [@a, @b; @c] = expr
+ [@a,
+ \ @b;
+ \ @c] = expr
+
+ foo =<< END
+...
+END
+ foo =<< trim END
+ ...
+ END
+ foo =<< eval END
+...
+END
+ foo =<< trim eval END
+ ...
+ END
+ foo =<< eval trim END
+ ...
+ END
+
+ # :for
+
+ for foo in expr
+ endfor
+
+ for [foo, bar] in expr
+ endfor
+enddef
+
+
diff --git a/runtime/syntax/testdir/input/vim9_ex_commands.vim b/runtime/syntax/testdir/input/vim9_ex_commands.vim
index e08cec3..1773e21 100644
--- a/runtime/syntax/testdir/input/vim9_ex_commands.vim
+++ b/runtime/syntax/testdir/input/vim9_ex_commands.vim
@@ -203,7 +203,7 @@
:folddoclosed
:folddoopen
:foldopen
-:for
+:for foo in bar | endfor
:function
:global/.../
:goto
@@ -785,7 +785,7 @@
Foo() | folddoclosed
Foo() | folddoopen
Foo() | foldopen
-Foo() | for
+Foo() | for foo in bar | endfor
Foo() | function
Foo() | global/.../
Foo() | goto
diff --git a/runtime/syntax/testdir/input/vim9_ex_for.vim b/runtime/syntax/testdir/input/vim9_ex_for.vim
new file mode 100644
index 0000000..e3c3033
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim9_ex_for.vim
@@ -0,0 +1,68 @@
+vim9script
+
+# Vim9 :for command
+
+
+# :for {var} in {object}
+
+var expr = [42]
+
+for foo in expr
+ echo foo
+endfor
+
+for foo in expr # comment
+ echo foo
+endfor
+
+for foo in
+ # comment
+ expr
+ echo foo
+endfor
+
+for foo in expr | echo foo | endfor
+
+for foo in [42]
+ echo foo
+endfor
+
+for foo in [42] | echo foo | endfor
+
+for foo: number in [42] | echo foo | endfor
+
+echo "foo" | for foo in expr
+ echo foo
+endfor
+
+
+# :for [{var1}, {var2}, ...] in {listlist}
+
+var expr2 = [[42, 83]]
+
+for [foo, bar] in expr2
+ echo foo bar
+endfor
+
+for [foo, bar] in expr2 # comment
+ echo foo bar
+endfor
+
+for [foo, bar] in
+ # comment
+ expr2
+ echo foo bar
+endfor
+
+for [foo, bar] in expr2 | echo foo bar | endfor
+
+for [foo, bar] in [[42, 83]]
+ echo foo bar
+endfor
+
+for [foo, bar] in [[42, 83]] | echo foo bar | endfor
+
+for [foo: number, bar: number] in expr2
+ echo foo bar
+endfor
+
diff --git a/runtime/syntax/testdir/input/vim9_lambda.vim b/runtime/syntax/testdir/input/vim9_lambda.vim
new file mode 100644
index 0000000..4340eb0
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim9_lambda.vim
@@ -0,0 +1,116 @@
+vim9script
+
+# Vim 9 lambda expressions
+
+var Foo: func
+var expr = 0
+
+# without return type
+Foo = () => expr
+Foo = (_) => expr
+Foo = (x) => expr
+
+Foo = (...y) => expr
+Foo = (_, ...y) => expr
+Foo = (x, ...y) => expr
+
+Foo = (x, y) => expr
+
+Foo = (_: number) => expr
+Foo = (x: number) => expr
+
+Foo = (...y: list<number>) => expr
+Foo = (_: number, ...y: list<number>) => expr
+Foo = (x: number, ...y: list<number>) => expr
+
+Foo = (x: number, y: number) => expr
+
+# with return type
+Foo = (): number => expr
+Foo = (_): number => expr
+Foo = (x): number => expr
+
+Foo = (...y): number => expr
+Foo = (_, ...y): number => expr
+Foo = (x, ...y): number => expr
+
+Foo = (x, y): number => expr
+
+Foo = (_: number): number => expr
+Foo = (x: number): number => expr
+
+Foo = (...y: list<number>): number => expr
+Foo = (_: number, ...y: list<number>): number => expr
+Foo = (x: number, ...y: list<number>): number => expr
+
+Foo = (x: number, y: number): number => expr
+
+
+# post operator comments
+
+Foo = () => # comment
+ expr
+Foo = () =>
+ # comment
+ expr
+Foo = () =>
+
+ # comment
+
+ expr
+
+
+# line continuations
+
+Foo = (x: string,
+ \ y: number,
+ \ z: bool): number => expr
+# FIXME
+Foo = (x: string,
+ \ y: number,
+ \ z: bool): number
+ \ => expr
+
+
+# funcref call
+
+echo (() => 42)()
+echo ((x: string): number => 42)("foo")
+
+
+# :help vim9-lambda
+
+var list = [1, 2, 3]
+echo filter(list, (k, v) =>
+ v > 0)
+echo filter(list, (k,
+ \ v)
+ \ => v > 0)
+
+var Callback = (..._) => 'anything'
+echo Callback(1, 2, 3) # displays "anything"
+
+var Lambda = (arg) => {
+ g:was_called = 'yes'
+ return expr
+ }
+
+var count = 0
+var timer = timer_start(500, (_) => {
+ count += 1
+ echom 'Handler called ' .. count
+ }, {repeat: 3})
+
+var dict = {}
+var d = mapnew(dict, (k, v): string => {
+ return 'value'
+ })
+
+
+# Issue #15970 (vim9: Restore and extend the recognition of Enum body items)
+
+def Op(): func(func(number, number): number): func(number, Digit): number
+ return (F: func(number, number): number) =>
+ (x: number, y: Digit): number => F(x, y.value)
+enddef ####################### ^ vimCommand?
+
diff --git a/runtime/syntax/testdir/input/vim9_super_this_keywords.vim b/runtime/syntax/testdir/input/vim9_super_this_keywords.vim
new file mode 100644
index 0000000..0370dd7
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim9_super_this_keywords.vim
@@ -0,0 +1,87 @@
+vim9script
+
+# Vim9 this and super keywords
+# VIM_TEST_SETUP hi link vim9This Todo
+# VIM_TEST_SETUP hi link vim9Super Todo
+
+def Echo(...args: list<any>)
+ echo args
+enddef
+
+class Foo
+ var x: number = 42
+ var y: number = this.x + 41
+ var z: number = this.x + this.y
+
+ def new()
+ echo this.x this.y this.z
+ enddef
+
+ def newXY(this.x, this.y, this.z)
+ enddef
+
+ def Def1(arg = this.x)
+ this.y = arg
+ this.z += arg
+ enddef
+
+ def Def2(arg = (this.x + this.y + this.z))
+ Echo(this, this.x, this.y, this.z)
+ this->Echo(this.x, this.y, this.z)
+ enddef
+
+ def Def3(): Foo
+ return this
+ enddef
+
+ def Def4(arg: Foo = this): Foo
+ return arg
+ enddef
+endclass
+
+class Bar extends Foo
+ def Def1()
+ super.Def1()
+ enddef
+
+ def Def2()
+ var a = super.x * super.y * super.z
+ var b = [super.x, super.y, super.z]
+ var c = {super: super.x, this: super.y, true: super.z}
+ var d = {super: c, this: c}
+ echo c.super
+ echo c.this
+ echo d.super.this
+ echo d.this.super
+ echo a b c
+ enddef
+
+ def Def5()
+ var a = this.x * this.y
+ var b = (this.x * this.y)
+ var c = [this.x, this.y]
+ var d = {super: this.x, this: this.y}
+ echo a b c d
+ enddef
+
+ def Def6()
+ var x = this#super#x
+ var y = super#this#y
+ this#super#Func()
+ super#this#Func()
+ enddef
+
+ def Def7(arg = super.Def3())
+ echo arg
+ enddef
+
+ def Def8(): number
+ var F = () => this.x
+ var G = () => super.x
+ return F() + G()
+ enddef
+endclass
+
+defcompile Foo
+defcompile Bar
+
diff --git a/runtime/syntax/testdir/input/vim9_super_this_keywords2.vim b/runtime/syntax/testdir/input/vim9_super_this_keywords2.vim
new file mode 100644
index 0000000..326eaf0
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim9_super_this_keywords2.vim
@@ -0,0 +1,63 @@
+vim9script
+
+# VIM_TEST_SETUP hi link vim9Super Todo
+# VIM_TEST_SETUP hi link vim9This Todo
+# See: https://github.com/vim/vim/pull/16476#issuecomment-2638191110
+
+
+class A
+ var _value: any
+
+ def new(value: any)
+ this._BaseInit(value)
+ enddef
+
+ def _BaseInit(value: any)
+ this._value = value
+ enddef
+
+ def Value(): any
+ return this._value
+ enddef
+endclass
+
+class B extends A
+ def new(value: number)
+ super._BaseInit(value)
+ enddef
+
+ def Value(): number
+ echo this
+ return super._value
+ enddef
+endclass
+
+class C extends A
+ #### E117
+ # def new(value: string)
+ # super(value)
+ # enddef
+
+ #### E1034
+ # def new(super._value)
+ # enddef
+
+ #### E1034
+ # def new(value: string)
+ # super._value = value
+ # enddef
+
+ #### E1356
+ # def Super(): A
+ # return super
+ # enddef
+
+ def This(): C
+ return this
+ enddef
+endclass
+
+echo 1 == A.new(1).Value()
+echo 2 == B.new(2).Value()
+defcompile C
+
diff --git a/runtime/syntax/testdir/input/vim9_super_this_keywords3.vim b/runtime/syntax/testdir/input/vim9_super_this_keywords3.vim
new file mode 100644
index 0000000..fb1f610
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim9_super_this_keywords3.vim
@@ -0,0 +1,27 @@
+vim9script
+
+# VIM_TEST_SETUP hi link vim9Super Todo
+# VIM_TEST_SETUP hi link vim9This Todo
+# See: https://github.com/vim/vim/pull/16476#issuecomment-2635119478
+
+
+class A
+ const _value: number
+
+ def new(this._value)
+ enddef
+
+ def K(): func(any): number
+ return ((_: any) => this._value)
+ enddef
+endclass
+
+class B extends A
+ def K(): func(any): number
+ return ((_: any) => super._value)
+ enddef
+endclass
+
+echo 1 == A.new(1).K()(null)
+echo 2 == B.new(2).K()(null)
+
diff --git a/runtime/syntax/testdir/input/vim9_variables.vim b/runtime/syntax/testdir/input/vim9_variables.vim
new file mode 100644
index 0000000..88dfb58
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim9_variables.vim
@@ -0,0 +1,197 @@
+vim9script
+
+# Vim9 variable highlighting
+
+# Declarations
+
+var foo = expr
+
+b:foo = expr
+g:foo = expr
+t:foo = expr
+w:foo = expr
+
+v:foo = expr
+
+$FOO = expr
+
+var [foo, bar] = expr
+var [foo,
+ \ bar] = expr
+var [$foo, $bar] = expr
+var [$foo,
+ \ $bar] = expr
+
+var [foo, bar; baz] = expr
+var [foo,
+ \ bar;
+ \ baz] = expr
+var [$foo, $bar; $baz] = expr
+var [$foo,
+ \ $bar;
+ \ $baz] = expr
+
+var foo =<< END
+...
+END
+var foo =<< trim END
+...
+END
+var foo =<< eval END
+...
+END
+var foo =<< trim eval END
+...
+END
+var foo =<< eval trim END
+...
+END
+
+# Assignments
+
+foo = expr
+
+foo[0] = expr
+
+foo[1:2] = expr
+foo[:2] = expr
+foo[1:] = expr
+foo[:] = expr
+
+foo += expr
+foo -= expr
+foo *= expr
+foo /= expr
+foo %= expr
+foo ..= expr
+
+b:foo = expr
+g:foo = expr
+t:foo = expr
+w:foo = expr
+
+b:foo += expr
+g:foo += expr
+t:foo += expr
+w:foo += expr
+
+b:foo -= expr
+g:foo -= expr
+t:foo -= expr
+w:foo -= expr
+
+b:foo *= expr
+g:foo *= expr
+t:foo *= expr
+w:foo *= expr
+
+b:foo /= expr
+g:foo /= expr
+t:foo /= expr
+w:foo /= expr
+
+b:foo %= expr
+g:foo %= expr
+t:foo %= expr
+w:foo %= expr
+
+b:foo ..= expr
+g:foo ..= expr
+t:foo ..= expr
+w:foo ..= expr
+
+$FOO = expr
+$FOO ..= expr
+
+@f = expr
+@f ..= expr
+
+&foo = expr
+
+&t_k1 = "\<Esc>[234;"
+
+&foo ..= expr
+
+&foo += expr
+&foo -= expr
+
+&l:foo = expr
+
+&l:foo ..= expr
+&l:foo += expr
+&l:foo -= expr
+
+&g:foo = expr
+
+&g:foo ..= expr
+&g:foo += expr
+&g:foo -= expr
+
+[foo, bar] = expr
+[foo,
+ \ bar] = expr
+[v:foo, v:bar] = expr
+[v:foo,
+ \ v:bar] = expr
+[&foo, &bar] = expr
+[&foo,
+ \ &bar] = expr
+[$foo, $bar] = expr
+[$foo,
+ \ $bar] = expr
+[@a, @b] = expr
+[@a,
+ \ @a] = expr
+
+[foo, bar] ..= expr
+[foo, bar] += expr
+[foo, bar] -= expr
+[foo, bar] *= expr
+[foo, bar] /= expr
+[foo, bar] %= expr
+
+[foo, bar; baz] = expr
+[foo,
+ \ bar;
+ \ baz] = expr
+[v:foo, v:bar; v:baz] = expr
+[v:foo,
+ \ v:bar;
+ \ v:baz] = expr
+[$foo, $bar; $baz] = expr
+[$foo,
+ \ $bar;
+ \ $baz] = expr
+[&foo, &bar; &baz] = expr
+[&foo,
+ \ &bar;
+ \ &baz] = expr
+[@a, @b; @c] = expr
+[@a,
+ \ @b;
+ \ @c] = expr
+
+foo =<< END
+...
+END
+foo =<< trim END
+...
+END
+foo =<< eval END
+...
+END
+foo =<< trim eval END
+...
+END
+foo =<< eval trim END
+...
+END
+
+# :for
+
+for foo in expr
+endfor
+
+for [foo, bar] in expr
+endfor
+
diff --git a/runtime/syntax/testdir/input/vim_ex_commands.vim b/runtime/syntax/testdir/input/vim_ex_commands.vim
index 7a58365..9fa1458 100644
--- a/runtime/syntax/testdir/input/vim_ex_commands.vim
+++ b/runtime/syntax/testdir/input/vim_ex_commands.vim
@@ -198,7 +198,7 @@
:folddoopen
:folddoclosed
:foldopen
-:for
+:for foo in bar | endfor
:function
:global/.../
:goto
@@ -783,7 +783,7 @@
call Foo() | folddoopen
call Foo() | folddoclosed
call Foo() | foldopen
-call Foo() | for
+call Foo() | for foo in bar | endfor
call Foo() | function
call Foo() | global/.../
call Foo() | goto
diff --git a/runtime/syntax/testdir/input/vim_ex_def_nested.vim b/runtime/syntax/testdir/input/vim_ex_def_nested.vim
index 008c415..3b9302d 100644
--- a/runtime/syntax/testdir/input/vim_ex_def_nested.vim
+++ b/runtime/syntax/testdir/input/vim_ex_def_nested.vim
@@ -1,5 +1,6 @@
vim9script
# Vim9 :def command (nested)
+# VIM_TEST_SETUP hi link vim9This Todo
class Test
const name: string
diff --git a/runtime/syntax/testdir/input/vim_ex_def_nested_fold.vim b/runtime/syntax/testdir/input/vim_ex_def_nested_fold.vim
index 601f553..f213107 100644
--- a/runtime/syntax/testdir/input/vim_ex_def_nested_fold.vim
+++ b/runtime/syntax/testdir/input/vim_ex_def_nested_fold.vim
@@ -1,7 +1,9 @@
vim9script
+
# Vim9 :def command (nested)
# VIM_TEST_SETUP let g:vimsyn_folding = 'f'
# VIM_TEST_SETUP setl fdc=2 fdm=syntax
+# VIM_TEST_SETUP hi link vim9This Todo
class Test
const name: string
diff --git a/runtime/syntax/testdir/input/vim_ex_for.vim b/runtime/syntax/testdir/input/vim_ex_for.vim
new file mode 100644
index 0000000..d72f6d6
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim_ex_for.vim
@@ -0,0 +1,60 @@
+" Vim :for command
+
+
+" :for {var} in {object}
+
+let expr = [42]
+
+for foo in expr
+ echo foo
+endfor
+
+for foo in expr " comment
+ echo foo
+endfor
+
+for foo in
+ "\ comment
+ \ expr
+ echo foo
+endfor
+
+for foo in expr | echo foo | endfor
+
+for foo in [42]
+ echo foo
+endfor
+
+for foo in [42] | echo foo | endfor
+
+echo "foo" | for foo in expr
+ echo foo
+endfor
+
+
+" :for [{var1}, {var2}, ...] in {listlist}
+
+let expr = [[42, 83]]
+
+for [foo, bar] in expr
+ echo foo bar
+endfor
+
+for [foo, bar] in expr " comment
+ echo foo bar
+endfor
+
+for [foo, bar] in
+ "\ comment
+ \ expr
+ echo foo bar
+endfor
+
+for [foo, bar] in expr | echo foo bar | endfor
+
+for [foo, bar] in [[42, 83]]
+ echo foo bar
+endfor
+
+for [foo, bar] in [[42, 83]] | echo foo bar | endfor
+
diff --git a/runtime/syntax/testdir/input/vim_expr.vim b/runtime/syntax/testdir/input/vim_expr.vim
index 569d4ce..ddaf519 100644
--- a/runtime/syntax/testdir/input/vim_expr.vim
+++ b/runtime/syntax/testdir/input/vim_expr.vim
@@ -85,6 +85,21 @@
echo 0zFF00.ED01.5DAF
echo 0zFF.00.ED.01.5D.AF
+" List
+
+echo []
+echo [42]
+echo [[11, 12], [21, 22], [31, 32]]
+echo [1,
+ \ 2,
+ \ 3,
+ \ 4
+ \]
+echo [1, 'two', 1 + 2, "fo" .. "ur"]
+
+" Issue #5830 (Incorrect syntax highlighting in Vim script when omitting space in list of string)
+let l = ['a','b','c']
+
" Operators
" Ternary
@@ -169,9 +184,26 @@
echo expr is? expr
echo expr isnot? expr
-" Unreported issue (incorrectly matches as "echo vimNumber *vimCommand* vimNumber")
+" Unreported issue ("is" incorrectly matches as "echo vimNumber *vimCommand* vimNumber")
echo 42 is 42
+" Line continuation
+let foo = foo +
+ \
+ "\ comment
+ \
+ "\ comment
+ \ bar +
+ \ "baz"
+
+let foo = foo +
+ "\ comment
+ \
+ "\ comment
+ \
+ \ bar +
+ \ "baz"
+
" Issue #16221 (vimString becomes vimVar when preceded by !)
let bar = !'g:bar'->exists()
diff --git a/runtime/syntax/testdir/input/vim_function_variables.vim b/runtime/syntax/testdir/input/vim_function_variables.vim
new file mode 100644
index 0000000..9a9d4f9
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim_function_variables.vim
@@ -0,0 +1,384 @@
+" Vim function variable highlighting
+
+function Foo()
+ " :let
+
+ let foo = expr
+
+ let foo[0] = expr
+
+ let foo[1:2] = expr
+ let foo[:2] = expr
+ let foo[1:] = expr
+ let foo[:] = expr
+
+ let foo["key"] = expr
+ let foo['key'] = expr
+
+ let foo += expr
+ let foo -= expr
+ let foo *= expr
+ let foo /= expr
+ let foo %= expr
+ let foo .= expr
+ let foo ..= expr
+
+ let b:foo = expr
+
+ let b:foo[0] = expr
+
+ let b:foo[1:2] = expr
+ let b:foo[:2] = expr
+ let b:foo[1:] = expr
+ let b:foo[:] = expr
+
+ let bfoo["key"] = expr
+ let bfoo['key'] = expr
+
+ let b:foo += expr
+ let b:foo -= expr
+ let b:foo *= expr
+ let b:foo /= expr
+ let b:foo %= expr
+ let b:foo .= expr
+ let b:foo ..= expr
+
+ let g:foo = expr
+
+ let g:foo[0] = expr
+
+ let g:foo[1:2] = expr
+ let g:foo[:2] = expr
+ let g:foo[1:] = expr
+ let g:foo[:] = expr
+
+ let g:foo["key"] = expr
+ let g:foo['key'] = expr
+
+ let g:foo += expr
+ let g:foo -= expr
+ let g:foo *= expr
+ let g:foo /= expr
+ let g:foo %= expr
+ let g:foo .= expr
+ let g:foo ..= expr
+
+ let s:foo = expr
+
+ let s:foo[0] = expr
+
+ let s:foo[1:2] = expr
+ let s:foo[:2] = expr
+ let s:foo[1:] = expr
+ let s:foo[:] = expr
+
+ let s:foo["key"] = expr
+ let s:foo['key'] = expr
+
+ let s:foo += expr
+ let s:foo -= expr
+ let s:foo *= expr
+ let s:foo /= expr
+ let s:foo %= expr
+ let s:foo .= expr
+ let s:foo ..= expr
+
+ let t:foo = expr
+
+ let t:foo[0] = expr
+
+ let t:foo[1:2] = expr
+ let t:foo[:2] = expr
+ let t:foo[1:] = expr
+ let t:foo[:] = expr
+
+ let t:foo["key"] = expr
+ let t:foo['key'] = expr
+
+ let t:foo += expr
+ let t:foo -= expr
+ let t:foo *= expr
+ let t:foo /= expr
+ let t:foo %= expr
+ let t:foo .= expr
+ let t:foo ..= expr
+
+ let v:foo = expr
+
+ let v:foo[0] = expr
+
+ let v:foo[1:2] = expr
+ let v:foo[:2] = expr
+ let v:foo[1:] = expr
+ let v:foo[:] = expr
+
+ let v:foo["key"] = expr
+ let v:foo['key'] = expr
+
+ let v:foo += expr
+ let v:foo -= expr
+ let v:foo *= expr
+ let v:foo /= expr
+ let v:foo %= expr
+ let v:foo .= expr
+ let v:foo ..= expr
+
+ let w:foo = expr
+
+ let w:foo[0] = expr
+
+ let w:foo[1:2] = expr
+ let w:foo[:2] = expr
+ let w:foo[1:] = expr
+ let w:foo[:] = expr
+
+ let w:foo["key"] = expr
+ let w:foo['key'] = expr
+
+ let w:foo += expr
+ let w:foo -= expr
+ let w:foo *= expr
+ let w:foo /= expr
+ let w:foo %= expr
+ let w:foo .= expr
+ let w:foo ..= expr
+
+ let $FOO = expr
+ let $FOO .= expr
+ let $FOO ..= expr
+
+ let @f = expr
+ let @f .= expr
+ let @f ..= expr
+
+ let &foo = expr
+
+ let &t_k1 = "\<Esc>[234;"
+
+ let &foo .= expr
+ let &foo ..= expr
+ let &foo += expr
+ let &foo -= expr
+
+ let &l:foo = expr
+
+ let &l:foo .= expr
+ let &l:foo ..= expr
+ let &l:foo += expr
+ let &l:foo -= expr
+
+ let &g:foo = expr
+
+ let &g:foo .= expr
+ let &g:foo ..= expr
+ let &g:foo += expr
+ let &g:foo -= expr
+
+ let [foo, bar] = expr
+ let [foo,
+ \ bar] = expr
+ let [v:foo, v:bar] = expr
+ let [v:foo,
+ \ v:bar] = expr
+ let [&foo, &bar] = expr
+ let [&foo,
+ \ &bar] = expr
+ let [$foo, $bar] = expr
+ let [$foo,
+ \ $bar] = expr
+ let [@a, @b] = expr
+ let [@a,
+ \ @b] = expr
+
+ let [foo, bar] .= expr
+ let [foo, bar] ..= expr
+ let [foo, bar] += expr
+ let [foo, bar] -= expr
+
+ let [foo, bar; baz] = expr
+ let [foo,
+ \ bar;
+ \ baz] = expr
+ let [v:foo, v:bar; v:baz] = expr
+ let [v:foo,
+ \ v:bar;
+ \ v:baz] = expr
+ let [$foo, $bar; $baz] = expr
+ let [$foo,
+ \ $bar;
+ \ $baz] = expr
+ let [&foo, &bar; &baz] = expr
+ let [&foo,
+ \ &bar;
+ \ &baz] = expr
+ let [@a, @b; @c] = expr
+ let [@a,
+ \ @b;
+ \ @c] = expr
+
+ let foo =<< END
+...
+END
+ let foo =<< trim END
+ ...
+ END
+ let foo =<< eval END
+...
+END
+ let foo =<< trim eval END
+ ...
+ END
+ let foo =<< eval trim END
+ ...
+ END
+
+ " :let list values
+
+ let foo
+ let foo bar
+ let foo
+ "\ comment
+ \ bar
+
+ let foo " comment
+ let foo "\ comment
+ let foo | echo "Foo"
+ let foo bar " comment
+ let foo bar | echo "Foo"
+ let foo bar "\ comment
+
+ " :unlet
+
+ unlet foo
+ unlet foo bar
+ unlet foo
+ "\ comment
+ \ bar
+
+ unlet! foo
+ unlet! foo bar
+ unlet! foo
+ "\ comment
+ \ bar
+
+ unlet $FOO
+ unlet! $FOO
+
+ unlet list[3]
+ unlet list[3:]
+ unlet dict['two']
+ unlet dict.two
+
+ unlet foo " comment
+ unlet foo "\ comment
+ unlet foo | echo "Foo"
+ unlet foo bar " comment
+ unlet foo bar "\ comment
+ unlet foo bar | echo "Foo"
+
+ " :const
+
+ const foo = expr
+
+ const [foo, bar] = expr
+
+ const [foo, bar; baz] = expr
+
+ const foo =<< END
+...
+END
+ const foo =<< trim END
+ ...
+ END
+ const foo =<< eval END
+...
+END
+ const foo =<< trim eval END
+ ...
+ END
+ const foo =<< eval trim END
+ ...
+ END
+
+ const foo
+ const foo bar
+
+ " :for
+
+ for foo in expr
+ endfor
+
+ for [foo, bar] in expr
+ endfor
+
+ " :lockvar
+
+ lockvar foo
+ lockvar foo bar
+ lockvar foo
+ "\ comment
+ \ bar
+
+ lockvar foo " comment
+ lockvar foo | echo "Foo"
+ lockvar foo bar " comment
+ lockvar foo bar | echo "Foo"
+
+ lockvar! foo
+ lockvar! foo bar
+ lockvar! foo
+ "\ comment
+ \ bar
+
+ lockvar! foo " comment
+ lockvar! foo | echo "Foo"
+ lockvar! foo bar " comment
+ lockvar! foo bar | echo "Foo"
+
+ lockvar 2 foo
+ lockvar 2 foo bar
+ lockvar 2 foo
+ "\ comment
+ \ bar
+
+ lockvar 2 foo " comment
+ lockvar 2 foo | echo "Foo"
+ lockvar 2 foo bar " comment
+ lockvar 2 foo bar | echo "Foo"
+
+ " :unlockvar
+
+ unlockvar foo
+ unlockvar foo bar
+ unlockvar foo
+ "\ comment
+ \ bar
+
+ unlockvar foo " comment
+ unlockvar foo | echo "Foo"
+ unlockvar foo bar " comment
+ unlockvar foo bar | echo "Foo"
+
+ unlockvar! foo
+ unlockvar! foo bar
+ unlockvar! foo
+ "\ comment
+ \ bar
+
+ unlockvar! foo " comment
+ unlockvar! foo | echo "Foo"
+ unlockvar! foo bar " comment
+ unlockvar! foo bar | echo "Foo"
+
+ unlockvar 2 foo
+ unlockvar 2 foo bar
+ unlockvar 2 foo
+ "\ comment
+ \ bar
+
+ unlockvar 2 foo " comment
+ unlockvar 2 foo | echo "Foo"
+ unlockvar 2 foo bar " comment
+ unlockvar 2 foo bar | echo "Foo"
+endfunction
+
diff --git a/runtime/syntax/testdir/input/vim_lambda.vim b/runtime/syntax/testdir/input/vim_lambda.vim
new file mode 100644
index 0000000..73a221b
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim_lambda.vim
@@ -0,0 +1,120 @@
+" Vim lambda expressions
+
+
+let expr = 42
+
+let Foo = {-> expr}
+let Foo = {_ -> expr}
+let Foo = {... -> expr}
+let Foo = {x -> expr}
+let Foo = {x, _ -> expr}
+let Foo = {x, ... -> expr}
+let Foo = {x, y -> expr}
+
+
+" line continuations
+
+let Foo = {->
+ "\ comment
+ \ expr
+ \ }
+let Foo = {_ ->
+ "\ comment
+ \ expr
+ \ }
+let Foo = {... ->
+ "\ comment
+ \ expr
+ \ }
+let Foo = {x ->
+ \ expr
+ "\ comment
+ \ }
+let Foo = {x, y ->
+ "\ comment
+ \ expr
+ \ }
+
+let Foo = {
+ \ ->
+ "\ comment
+ \ expr
+ \ }
+let Foo = {x
+ \ ->
+ "\ comment
+ \ expr
+ \ }
+let Foo = {x, y
+ \ ->
+ "\ comment
+ \ expr
+ \ }
+
+let Foo = {x,
+ \ y,
+ \ z -> expr}
+
+let Foo = {
+ \ x,
+ \ y,
+ \ z
+ \ ->
+ "\ comment
+ \ expr
+ \ }
+
+let Foo = {-> [
+ \ 42,
+ \ 83
+ \]}
+
+let Foo = {-> {
+ \ 'a': 42,
+ \ 'b': 83
+ \}}
+
+let Foo = {-> #{
+ \ a: 42,
+ \ b: 83
+ \}}
+
+let Foo = {-> {->[
+ \ 42,
+ \ 83
+ \]}}
+
+let Foo = {-> {-> {
+ \ 'a': 42,
+ \ 'b': 83
+ \}}}
+
+let Foo = {-> {-> #{
+ \ a: 42,
+ \ b: 83
+ \}}}
+
+" :help lambda
+
+:let F = {arg1, arg2 -> arg1 - arg2}
+:echo F(5, 2)
+
+:let F = {-> 'error function'}
+:echo F('ignored')
+
+:function Foo(arg)
+: let i = 3
+: return {x -> x + i - a:arg}
+:endfunction
+:let Bar = Foo(4)
+:echo Bar(6)
+
+:echo map([1, 2, 3], {idx, val -> val + 1})
+" [2, 3, 4]
+
+:echo sort([3,7,2,1,4], {a, b -> a - b})
+" [1, 2, 3, 4, 7]
+:let timer = timer_start(500,
+ \ {-> execute("echo 'Handler called'", "")},
+ \ {'repeat': 3})
+
diff --git a/runtime/syntax/testdir/input/vim_object_methods.vim b/runtime/syntax/testdir/input/vim_object_methods.vim
index d22c7f2..11d01a6 100644
--- a/runtime/syntax/testdir/input/vim_object_methods.vim
+++ b/runtime/syntax/testdir/input/vim_object_methods.vim
@@ -1,5 +1,7 @@
vim9script
-# VIM_TEST_SETUP hi link vimMethodName Todo
+
+# VIM_TEST_SETUP hi link vim9MethodName Special
+# VIM_TEST_SETUP hi link vim9This Todo
# Vim |builtin-object-methods| and namesake builtin functions.
diff --git a/runtime/syntax/testdir/input/vim_variables.vim b/runtime/syntax/testdir/input/vim_variables.vim
index 6f77da9..af02fa8 100644
--- a/runtime/syntax/testdir/input/vim_variables.vim
+++ b/runtime/syntax/testdir/input/vim_variables.vim
@@ -11,6 +11,9 @@
let foo[1:] = expr
let foo[:] = expr
+let foo["key"] = expr
+let foo['key'] = expr
+
let foo += expr
let foo -= expr
let foo *= expr
@@ -19,38 +22,175 @@
let foo .= expr
let foo ..= expr
+let b:foo = expr
+
+let b:foo[0] = expr
+
+let b:foo[1:2] = expr
+let b:foo[:2] = expr
+let b:foo[1:] = expr
+let b:foo[:] = expr
+
+let bfoo["key"] = expr
+let bfoo['key'] = expr
+
+let b:foo += expr
+let b:foo -= expr
+let b:foo *= expr
+let b:foo /= expr
+let b:foo %= expr
+let b:foo .= expr
+let b:foo ..= expr
+
+let g:foo = expr
+
+let g:foo[0] = expr
+
+let g:foo[1:2] = expr
+let g:foo[:2] = expr
+let g:foo[1:] = expr
+let g:foo[:] = expr
+
+let g:foo["key"] = expr
+let g:foo['key'] = expr
+
+let g:foo += expr
+let g:foo -= expr
+let g:foo *= expr
+let g:foo /= expr
+let g:foo %= expr
+let g:foo .= expr
+let g:foo ..= expr
+
+let s:foo = expr
+
+let s:foo[0] = expr
+
+let s:foo[1:2] = expr
+let s:foo[:2] = expr
+let s:foo[1:] = expr
+let s:foo[:] = expr
+
+let s:foo["key"] = expr
+let s:foo['key'] = expr
+
+let s:foo += expr
+let s:foo -= expr
+let s:foo *= expr
+let s:foo /= expr
+let s:foo %= expr
+let s:foo .= expr
+let s:foo ..= expr
+
+let t:foo = expr
+
+let t:foo[0] = expr
+
+let t:foo[1:2] = expr
+let t:foo[:2] = expr
+let t:foo[1:] = expr
+let t:foo[:] = expr
+
+let t:foo["key"] = expr
+let t:foo['key'] = expr
+
+let t:foo += expr
+let t:foo -= expr
+let t:foo *= expr
+let t:foo /= expr
+let t:foo %= expr
+let t:foo .= expr
+let t:foo ..= expr
+
+let v:foo = expr
+
+let v:foo[0] = expr
+
+let v:foo[1:2] = expr
+let v:foo[:2] = expr
+let v:foo[1:] = expr
+let v:foo[:] = expr
+
+let v:foo["key"] = expr
+let v:foo['key'] = expr
+
+let v:foo += expr
+let v:foo -= expr
+let v:foo *= expr
+let v:foo /= expr
+let v:foo %= expr
+let v:foo .= expr
+let v:foo ..= expr
+
+let w:foo = expr
+
+let w:foo[0] = expr
+
+let w:foo[1:2] = expr
+let w:foo[:2] = expr
+let w:foo[1:] = expr
+let w:foo[:] = expr
+
+let w:foo["key"] = expr
+let w:foo['key'] = expr
+
+let w:foo += expr
+let w:foo -= expr
+let w:foo *= expr
+let w:foo /= expr
+let w:foo %= expr
+let w:foo .= expr
+let w:foo ..= expr
+
let $FOO = expr
let $FOO .= expr
+let $FOO ..= expr
let @f = expr
let @f .= expr
+let @f ..= expr
let &foo = expr
let &t_k1 = "\<Esc>[234;"
let &foo .= expr
-
+let &foo ..= expr
let &foo += expr
let &foo -= expr
let &l:foo = expr
let &l:foo .= expr
+let &l:foo ..= expr
let &l:foo += expr
let &l:foo -= expr
let &g:foo = expr
let &g:foo .= expr
+let &g:foo ..= expr
let &g:foo += expr
let &g:foo -= expr
let [foo, bar] = expr
let [foo,
\ bar] = expr
+let [v:foo, v:bar] = expr
+let [v:foo,
+ \ v:bar] = expr
+let [&foo, &bar] = expr
+let [&foo,
+ \ &bar] = expr
+let [$foo, $bar] = expr
+let [$foo,
+ \ $bar] = expr
+let [@a, @b] = expr
+let [@a,
+ \ @b] = expr
let [foo, bar] .= expr
+let [foo, bar] ..= expr
let [foo, bar] += expr
let [foo, bar] -= expr
@@ -58,10 +198,22 @@
let [foo,
\ bar;
\ baz] = expr
-
-let [foo, bar; baz] .= expr
-let [foo, bar; baz] += expr
-let [foo, bar; baz] -= expr
+let [v:foo, v:bar; v:baz] = expr
+let [v:foo,
+ \ v:bar;
+ \ v:baz] = expr
+let [$foo, $bar; $baz] = expr
+let [$foo,
+ \ $bar;
+ \ $baz] = expr
+let [&foo, &bar; &baz] = expr
+let [&foo,
+ \ &bar;
+ \ &baz] = expr
+let [@a, @b; @c] = expr
+let [@a,
+ \ @b;
+ \ @c] = expr
let foo =<< END
...
@@ -79,19 +231,33 @@
...
END
+" :let list values
+
let foo
let foo bar
+let foo
+ "\ comment
+ \ bar
+
+let foo " comment
+let foo "\ comment
+let foo | echo "Foo"
+let foo bar " comment
+let foo bar | echo "Foo"
+let foo bar "\ comment
" :unlet
unlet foo
unlet foo bar
unlet foo
+ "\ comment
\ bar
unlet! foo
unlet! foo bar
unlet! foo
+ "\ comment
\ bar
unlet $FOO
@@ -102,6 +268,13 @@
unlet dict['two']
unlet dict.two
+unlet foo " comment
+unlet foo "\ comment
+unlet foo | echo "Foo"
+unlet foo bar " comment
+unlet foo bar "\ comment
+unlet foo bar | echo "Foo"
+
" :const
const foo = expr
@@ -136,3 +309,74 @@
for [foo, bar] in expr
endfor
+
+" :lockvar
+
+lockvar foo
+lockvar foo bar
+lockvar foo
+ "\ comment
+ \ bar
+
+lockvar foo " comment
+lockvar foo | echo "Foo"
+lockvar foo bar " comment
+lockvar foo bar | echo "Foo"
+
+lockvar! foo
+lockvar! foo bar
+lockvar! foo
+ "\ comment
+ \ bar
+
+lockvar! foo " comment
+lockvar! foo | echo "Foo"
+lockvar! foo bar " comment
+lockvar! foo bar | echo "Foo"
+
+lockvar 2 foo
+lockvar 2 foo bar
+lockvar 2 foo
+ "\ comment
+ \ bar
+
+lockvar 2 foo " comment
+lockvar 2 foo | echo "Foo"
+lockvar 2 foo bar " comment
+lockvar 2 foo bar | echo "Foo"
+
+" :unlockvar
+
+unlockvar foo
+unlockvar foo bar
+unlockvar foo
+ "\ comment
+ \ bar
+
+unlockvar foo " comment
+unlockvar foo | echo "Foo"
+unlockvar foo bar " comment
+unlockvar foo bar | echo "Foo"
+
+unlockvar! foo
+unlockvar! foo bar
+unlockvar! foo
+ "\ comment
+ \ bar
+
+unlockvar! foo " comment
+unlockvar! foo | echo "Foo"
+unlockvar! foo bar " comment
+unlockvar! foo bar | echo "Foo"
+
+unlockvar 2 foo
+unlockvar 2 foo bar
+unlockvar 2 foo
+ "\ comment
+ \ bar
+
+unlockvar 2 foo " comment
+unlockvar 2 foo | echo "Foo"
+unlockvar 2 foo bar " comment
+unlockvar 2 foo bar | echo "Foo"
+
diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim
index a33adf9..854e3e0 100644
--- a/runtime/syntax/vim.vim
+++ b/runtime/syntax/vim.vim
@@ -230,32 +230,51 @@
" Numbers {{{2
" =======
syn case ignore
-syn match vimNumber '\<\d\+\%(\.\d\+\%(e[+-]\=\d\+\)\=\)\=' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
-syn match vimNumber '\<0b[01]\+' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
-syn match vimNumber '\<0o\=\o\+' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
-syn match vimNumber '\<0x\x\+' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
+syn match vimNumber '\<\d\+' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment,vimSubscript
+syn match vimNumber '\<\d\+\.\d\+\%(e[+-]\=\d\+\)\=' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
+syn match vimNumber '\<0b[01]\+' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment,vimSubscript
+syn match vimNumber '\<0o\=\o\+' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment,vimSubscript
+syn match vimNumber '\<0x\x\+' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment,vimSubscript
syn match vimNumber '\<0z\>' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
-syn match vimNumber '\<0z\%(\x\x\)\+\%(\.\%(\x\x\)\+\)*' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
+syn match vimNumber '\<0z\%(\x\x\)\+\%(\.\%(\x\x\)\+\)*' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment,vimSubscript
syn match vimNumber '\%(^\|\A\)\zs#\x\{6}' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
syn case match
" All vimCommands are contained by vimIsCommand. {{{2
-syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutoCmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,@vimEcho,vimEnddef,vimEndfunction,vimExecute,vimIsCommand,vimExtCmd,vimFor,vimFunction,vimFuncFold,vimGlobal,vimHighlight,vimLet,vimLoadkeymap,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimSet,vimSleep,vimSyntax,vimThrow,vimUnlet,vimUnmap,vimUserCmd,vimMenu,vimMenutranslate,@vim9CmdList
+syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutoCmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,@vimEcho,vimEnddef,vimEndfunction,vimExecute,vimIsCommand,vimExtCmd,vimFor,vimFunction,vimFuncFold,vimGlobal,vimHighlight,vimLet,vimLoadkeymap,vimLockvar,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimSet,vimSleep,vimSyntax,vimThrow,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimMenu,vimMenutranslate,@vim9CmdList
syn cluster vim9CmdList contains=vim9Abstract,vim9Class,vim9Const,vim9Enum,vim9Export,vim9Final,vim9For,vim9Interface,vim9Type,vim9Var
syn match vimCmdSep "[:|]\+" skipwhite nextgroup=@vimCmdList,vimSubst1
syn match vimCount contained "\d\+"
syn match vimIsCommand "\<\%(\h\w*\|[23]mat\%[ch]\)\>" nextgroup=vimBang contains=vimCommand
syn match vimBang contained "!"
-syn match vimVar contained "\<\h[a-zA-Z0-9#_]*\>"
-syn match vimVar "\<[bwglstav]:\h[a-zA-Z0-9#_]*\>"
-syn match vimVar "\s\zs&\%([lg]:\)\=\a\+\>"
-syn match vimVar "\s\zs&t_\S[a-zA-Z0-9]\>"
-syn match vimVar "\s\zs&t_k;"
-syn match vimFBVar contained "\<[bwglstav]:\h[a-zA-Z0-9#_]*\>"
-syn keyword vimCommand contained in
-syn cluster vimExprList contains=vimEnvvar,vimFunc,vimNumber,vimOper,vimOperParen,vimLetRegister,vimString,vimVar,@vim9ExprList
-syn cluster vim9ExprList contains=vim9Boolean,vim9Null
+syn region vimSubscript contained matchgroup=vimSubscriptBracket start="\[" end="]" nextgroup=vimSubscript contains=@vimExprList
+
+syn match vimVar contained "\<\h[a-zA-Z0-9#_]*\>" nextgroup=vimSubscript contains=vim9Super,vim9This
+syn match vimVar "\<[bwglstav]:\h[a-zA-Z0-9#_]*\>" nextgroup=vimSubscript
+syn match vimVar "\<a:\%(000\|\d\+\)\>" nextgroup=vimSubscript
+syn match vimFBVar contained "\<[bwglsta]:\h[a-zA-Z0-9#_]*\>" nextgroup=vimSubscript
+
+syn match vimVimVar "\<v:\h\w*\>" nextgroup=vimSubscript
+syn match vimOptionVar "&\%([lg]:\)\=\a\+\>" nextgroup=vimSubscript
+syn match vimOptionVar "&t_\S[a-zA-Z0-9]\>" nextgroup=vimSubscript
+syn match vimOptionVar "&t_k;" nextgroup=vimSubscript
+syn cluster vimSpecialVar contains=vimEnvvar,vimLetRegister,vimOptionVar,vimVimVar
+
+Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s\+[-+/*%]\=="
+Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s\+\.\.="
+Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s\+=<<"
+Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s*->" contains=vim9Super,vim9This
+Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\[" nextgroup=vimSubscript
+Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\." nextgroup=vimOper contains=vim9Super,vim9This
+
+Vim9 syn match vim9LhsVariableList "\[\_[^]]\+]\ze\s\+[-+/*%]\==" contains=vimVar,@vimSpecialVar
+Vim9 syn match vim9LhsVariableList "\[\_[^]]\+]\ze\s\+\.\.=" contains=vimVar,@vimSpecialVar
+
+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 vim9ExprList contains=vim9Boolean,vim9LambdaParams,vim9Null
" Insertions And Appends: insert append {{{2
" (buftype != nofile test avoids having append, change, insert show up in the command window)
@@ -306,7 +325,7 @@
" 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,vimFuncVar,vimContinue
+syn cluster vimAugroupList contains=@vimCmdList,vimFilter,vimFunc,vimLineComment,vimSpecFile,vimOper,vimNumber,vimOperParen,@vimComment,vimString,vimSubst,vimRegister,vimCmplxRepeat,vimNotation,vimCtrlChar,vimContinue
syn match vimAugroup "\<aug\%[roup]\>" contains=vimAugroupKey,vimAugroupBang skipwhite nextgroup=vimAugroupBang,vimAutoCmdGroup
if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'a'
syn region vimAugroup fold start="\<aug\%[roup]\>\ze\s\+\%([eE][nN][dD]\)\@!\S\+" matchgroup=vimAugroupKey end="\<aug\%[roup]\>\ze\s\+[eE][nN][dD]\>" contains=vimAutoCmd,@vimAugroupList,vimAugroupkey skipwhite nextgroup=vimAugroupEnd
@@ -324,31 +343,64 @@
" Operators: {{{2
" =========
-syn cluster vimOperGroup contains=vimEnvvar,vimFunc,vimFuncVar,vimOper,vimOperParen,vimNumber,vimString,vimRegister,@vimContinue,vim9Comment,vimVar,vimBoolean,vimNull
-syn match vimOper "\a\@<!!" skipwhite nextgroup=vimString,vimSpecFile
-syn match vimOper "||\|&&\|[-+*/%.]" skipwhite nextgroup=vimString,vimSpecFile
-syn match vimOper "?" skipwhite nextgroup=@vimExprList
+syn cluster vimOperGroup contains=@vimSpecialVar,vimFunc,vimLambda,vimOper,vimOperParen,vimNumber,vimString,vimRegister,@vimContinue,vim9Comment,vimVar,vimBoolean,vim9LambdaParams,vimNull
+syn match vimOper "\a\@<!!" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimSpecFile
+syn match vimOper "||\|&&\|[-+*/%.]" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimSpecFile
+syn match vimOper "?" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList
" distinguish ternary : from ex-colon
-syn match vimOper "\s\@1<=:\ze\s\|\s\@1<=:$" skipwhite nextgroup=@vimExprList
-syn match vimOper "??" skipwhite nextgroup=@vimExprList
-syn match vimOper "=" skipwhite nextgroup=vimString,vimSpecFile
-syn match vimOper "\%#=1\%(==\|!=\|>=\|<=\|=\~\|!\~\|>\|<\)[?#]\=" skipwhite nextgroup=vimString,vimSpecFile
-syn match vimOper "\<is\%(not\)\=\>" skipwhite nextgroup=vimString,vimSpecFile
-syn match vimOper "\<is\%(not\)\=[?#]" skipwhite nextgroup=vimString,vimSpecFile
-syn region vimOperParen matchgroup=vimParenSep start="(" end=")" contains=@vimOperGroup
-syn region vimOperParen matchgroup=vimSep start="#\={" end="}" contains=@vimOperGroup nextgroup=vimVar,vimFuncVar
+syn match vimOper "\s\@1<=:\ze\s\|\s\@1<=:$" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList
+syn match vimOper "??" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList
+syn match vimOper "=" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimSpecFile
+syn match vimOper "\%#=1\%(==\|!=\|>=\|<=\|=\~\|!\~\|>\|<\)[?#]\=" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimSpecFile
+syn match vimOper "\<is\%(not\)\=\>" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimSpecFile
+syn match vimOper "\<is\%(not\)\=[?#]" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimSpecFile
+syn region vimOperParen matchgroup=vimParenSep start="(" end=")" contains=@vimOperGroup nextgroup=vimSubscript
+syn region vimOperParen matchgroup=vimSep start="#\={" end="}" contains=@vimOperGroup nextgroup=vimSubscript,vimVar
+syn region vimOperParen contained matchgroup=vimSep start="\[" end="]" contains=@vimOperGroup nextgroup=vimSubscript,vimVar
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_noopererror")
syn match vimOperError ")"
endif
+syn match vimOperContinue contained "^\s*\zs\\" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList
+syn match vimOperContinueComment contained '^\s*\zs["#]\\ .*' skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList
+syn cluster vimOperContinue contains=vimOperContinue,vimOperContinueComment
+
+" Lambda Expressions: {{{2
+" ==================
+syn match vimLambdaOperator contained "->" skipwhite nextgroup=@vimExprList
+syn region vimLambda contained matchgroup=Delimiter start="{\ze[[:space:][:alnum:]_.,]*->" end="}" end="$" skip=+\s*\n\s*\\\|\s*\n\s*"\\ + contains=@vimContinue,@vimExprList,vimLambdaParams
+syn match vimLambdaParams contained "{\@1<=.\{-}\%(->\)\@=" nextgroup=vimLambdaOperator contains=vimFuncParam
+
+syn match vim9LambdaOperator contained "=>" skipwhite skipempty nextgroup=@vimExprList,vim9LambdaBlock,vim9LambdaOperatorComment
+syn match vim9LambdaParamsParen contained "[()]"
+syn region vim9LambdaParams contained
+ \ matchgroup=vim9LambdaParamsParen
+ \ start="(\ze\s*\(\.\.\.\)\=\h\w*[,:]\%(\s\|$\)"
+ \ start="(\ze\s*\n
+ "\ line continuations
+ \\%(\s*\%(#\\ .*\|\\\s*\)\n\)*\s*\\\s*
+ "\ parameter names
+ \\(\.\.\.\)\=\h\w*[,:]\%(\s\|$\)"
+ \ end=")\ze\%(:\s\|\s\+=>\)"
+ \ matchgroup=vimContinue
+ \ end="^\s*\\\ze\s\+=>"
+ \ skipwhite nextgroup=vim9LambdaReturnType,vim9LambdaOperator
+ \ contains=@vim9Continue,vimDefParam,vim9LambdaParamsParen
+syn match vim9LambdaParams contained "(\s*)\|(\s*\(\.\.\.\)\=\h\w*\s*)\ze\%(:\s\|\s\+=>\)" skipwhite nextgroup=vim9LambdaReturnType,vim9LambdaOperator contains=vimDefParam,vim9LambdaParamsParen
+
+syn region vim9LambdaReturnType contained start=":\s" end="$" end="\ze#" end="\ze=>" skipwhite skipempty nextgroup=vim9LambdaOperator,vim9LamdaOperatorComment contains=vimTypeSep transparent
+syn region vim9LambdaBlock contained matchgroup=vimSep start="{" end="^\s*\zs}" contains=@vimDefBodyList
+
+syn match vim9LambdaOperatorComment contained "#.*" skipwhite skipempty nextgroup=@vimExprList,vim9LambdaBlock,vim9LambdaOperatorComment
+
" Functions: Tag is provided for those who wish to highlight tagged functions {{{2
" =========
-syn cluster vimFuncList contains=vimFuncBang,vimFunctionError,vimFuncKey,vimFuncSID,Tag
-syn cluster vimDefList contains=vimFuncBang,vimFunctionError,vimDefKey,vimFuncSID,Tag
+syn cluster vimFuncList contains=vimFuncBang,vimFunctionError,vimFuncKey,vimFuncScope,vimFuncSID,Tag
+syn cluster vimDefList contains=vimFuncBang,vimFunctionError,vimDefKey,vimFuncScope,vimFuncSID,Tag
-syn cluster vimFuncBodyCommon contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimEnvvar,vimFBVar,vimFunc,vimFunction,vimLetHereDoc,vimNotation,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegister,vimSpecFile,vimString,vimSubst,vimFuncFold,vimDefFold
-syn cluster vimFuncBodyList contains=@vimFuncBodyCommon,vimComment,vimLineComment,vimFuncVar,vimInsert,vimConst,vimLet,vimSearch
-syn cluster vimDefBodyList contains=@vimFuncBodyCommon,vim9Comment,vim9LineComment,vim9Const,vim9Final,vim9Var,vim9Null,vim9Boolean,vim9For,vim9Search
+syn cluster vimFuncBodyCommon contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimFBVar,vimFunc,vimFunction,vimLetHereDoc,vimNotation,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegister,vimSpecFile,vimString,vimSubst,vimFuncFold,vimDefFold
+syn cluster vimFuncBodyList contains=@vimFuncBodyCommon,vimComment,vimLineComment,vimInsert,vimConst,vimLet,vimSearch
+syn cluster vimDefBodyList contains=@vimFuncBodyCommon,vim9Comment,vim9LineComment,vim9Block,vim9Const,vim9Final,vim9Var,vim9Null,vim9Boolean,vim9For,vim9LhsVariable,vim9LhsVariableList,vim9LhsRegister,vim9Search,@vimSpecialVar
syn region vimFuncPattern contained matchgroup=vimOper start="/" end="$" contains=@vimSubstList
syn match vimFunction "\<fu\%[nction]\>" skipwhite nextgroup=vimCmdSep,vimComment,vimFuncPattern contains=vimFuncKey
@@ -362,7 +414,7 @@
syn match vimFuncBang contained "!"
syn match vimFuncSID contained "\c<sid>"
-syn match vimFuncSID contained "\<[sg]:"
+syn match vimFuncScope contained "\<[sg]:"
syn keyword vimFuncKey contained fu[nction]
syn keyword vimDefKey contained def
@@ -385,7 +437,6 @@
syn region vimDefFold start="\<def\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\)\+(" end="\<enddef\>" contains=vimDef fold keepend extend transparent
endif
-syn match vimFuncVar contained "a:\%(\K\k*\|\d\+\)\>"
syn match vimFuncBlank contained "\s\+"
" Types: {{{2
@@ -408,12 +459,24 @@
if s:vim9script
" Methods {{{3
- syn match vim9MethodDef contained "\<def\>" skipwhite nextgroup=vim9MethodDefName
+ syn match vim9MethodDef contained "\<def\>" skipwhite nextgroup=vim9MethodDefName,vim9ConstructorDefName
syn match vim9MethodDefName contained "\<\h\w*\>" nextgroup=vim9MethodDefParams contains=@vim9MethodName
syn region vim9MethodDefParams contained
\ matchgroup=Delimiter start="(" end=")"
\ skipwhite skipnl nextgroup=vim9MethodDefBody,vimDefComment,vimEnddef,vim9MethodDefReturnType,vimCommentError
\ contains=vimDefParam,vim9Comment,vimFuncParamEquals
+
+ syn match vim9ConstructorDefName contained "\<new\w*\>"
+ \ nextgroup=vim9ConstructorDefParams
+ \ contains=@vim9MethodName
+ syn match vim9ConstructorDefParam contained "\<\%(this\.\)\=\h\w*\>"
+ \ skipwhite nextgroup=vimParamType,vimFuncParamEquals
+ \ contains=vim9This,vimOper
+ syn region vim9ConstructorDefParams contained
+ \ matchgroup=Delimiter start="(" end=")"
+ \ skipwhite skipnl nextgroup=vim9MethodDefBody,vimDefComment,vimEnddef,vimCommentError
+ \ contains=vim9ConstructorDefParam,vim9Comment,vimFuncParamEquals
+
syn region vim9MethodDefReturnType contained
\ start=":\s" end="$" matchgroup=vim9Comment end="\ze[#"]"
\ skipwhite skipnl nextgroup=vim9MethodDefBody,vimDefComment,vimCommentError
@@ -429,7 +492,7 @@
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimfunctionerror")
syn match vim9MethodNameError contained "\<[a-z0-9]\i\>"
endif
- syn match vim9MethodName contained "\<new\i*\>"
+ syn match vim9MethodName contained "\<new\w*\>"
syn keyword vim9MethodName contained empty len string
syn cluster vim9MethodName contains=vim9MethodName,vim9MethodNameError
@@ -454,8 +517,11 @@
syn keyword vim9Implements contained implements skipwhite skipnl nextgroup=vim9ImplementedInterface
syn keyword vim9Public contained public
syn keyword vim9Static contained static
- syn keyword vim9This contained this
- syn keyword vim9Super contained super
+ " FIXME: don't match as dictionary keys, remove when operators are not
+ " shared between Vim9 and legacy script
+ syn match vim9This contained "\.\@1<!\<this\>:\@!"
+ " super must be folowed by '.'
+ syn match vim9Super contained "\.\@1<!\<super\.\@="
VimFoldc syn region vim9ClassBody start="\<class\>" matchgroup=vimCommand end="\<endclass\>" contains=@vim9ClassBodyList transparent
@@ -488,15 +554,19 @@
VimFoldi syn region vim9InterfaceBody start="\<interface\>" matchgroup=vimCommand end="\<endinterface\>" contains=@vim9InterfaceBodyList transparent
- " type {{{3
+ " Type Aliases {{{3
syn match vim9Type "\<ty\%[pe]\>" skipwhite nextgroup=vim9TypeAlias,vim9TypeAliasError
syn match vim9TypeAlias contained "\<\u\w*\>" skipwhite nextgroup=vim9TypeEquals
syn match vim9TypeEquals contained "=" skipwhite nextgroup=@vimType
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_notypealiaserror")
- syn match vim9TypeAliasError contained "\<\U\w*"
+ syn match vim9TypeAliasError contained "\<\l\w*\>" skipwhite nextgroup=vim9TypeEquals
endif
endif
+" Blocks: {{{2
+" ======
+Vim9 syn region vim9Block matchgroup=vimSep start="{" end="^\s*\zs}" contains=@vimDefBodyList
+
" Keymaps: {{{2
" =======
@@ -563,7 +633,7 @@
syn match vimUserCmdAttrAddr contained "?"
syn case match
-syn region vimUserCmdBlock contained matchgroup=vimSep start="{" end="}" contains=@vimDefBodyList
+syn region vimUserCmdBlock contained matchgroup=vimSep start="{" end="^\s*\zs}" contains=@vimDefBodyList
syn match vimDelcommand "\<delc\%[ommand]\>" skipwhite nextgroup=vimDelcommandAttr
syn match vimDelcommandAttr contained "-buffer\>"
@@ -610,8 +680,8 @@
syn region vimPatRegion contained transparent matchgroup=vimPatSepR start="\\[z%]\=(" end="\\)" contains=@vimSubstList oneline
syn match vimNotPatSep contained "\\\\"
syn cluster vimStringGroup contains=vimEscape,vimEscapeBrace,vimPatSep,vimNotPatSep,vimPatSepErr,vimPatSepZone,@Spell
-syn region vimString oneline keepend matchgroup=vimString start=+[^a-zA-Z>\\@]"+lc=1 skip=+\\\\\|\\"+ matchgroup=vimStringEnd end=+"+ contains=@vimStringGroup extend
-syn region vimString oneline matchgroup=vimString start=+[^a-zA-Z>\\@]'+lc=1 end=+'+ contains=vimQuoteEscape extend
+syn region vimString oneline keepend matchgroup=vimString start=+[^a-zA-Z>\\@]"+lc=1 skip=+\\\\\|\\"+ matchgroup=vimStringEnd end=+"+ nextgroup=vimSubscript contains=@vimStringGroup extend
+syn region vimString oneline matchgroup=vimString start=+[^a-zA-Z>\\@]'+lc=1 end=+'+ nextgroup=vimSubscript contains=vimQuoteEscape extend
"syn region vimString oneline start="\s/\s*\A"lc=1 skip="\\\\\|\\+" end="/" contains=@vimStringGroup " see tst45.vim
syn match vimString contained +"[^"]*\\$+ skipnl nextgroup=vimStringCont
syn match vimStringCont contained +\(\\\\\|.\)\{-}[^\\]"+
@@ -623,8 +693,8 @@
syn match vimEscape contained "\\<\*[^>]*>\=>"
syn match vimQuoteEscape contained "''"
-syn region vimString oneline matchgroup=vimString start=+$'+ skip=+''+ end=+'+ contains=vimQuoteEscape,@vimStringInterpolation extend
-syn region vimString oneline matchgroup=vimString start=+$"+ end=+"+ contains=@vimStringGroup,@vimStringInterpolation extend
+syn region vimString oneline matchgroup=vimString start=+$'+ skip=+''+ end=+'+ nextgroup=vimSubscript contains=vimQuoteEscape,@vimStringInterpolation extend
+syn region vimString oneline matchgroup=vimString start=+$"+ end=+"+ nextgroup=vimSubscript contains=@vimStringGroup,@vimStringInterpolation extend
syn region vimStringInterpolationExpr oneline contained matchgroup=vimSep start=+{+ end=+}+ contains=@vimExprList
syn match vimStringInterpolationBrace contained "{{"
syn match vimStringInterpolationBrace contained "}}"
@@ -700,13 +770,18 @@
" Variable Declarations: {{{2
" =====================
-VimL syn keyword vimLet let skipwhite nextgroup=vimVar,vimFuncVar,vimLetRegister,vimVarList
-VimL syn keyword vimConst cons[t] skipwhite nextgroup=vimVar,vimVarList
-syn region vimVarList contained start="\[" end="]" contains=vimVar,@vimContinue
+VimL syn keyword vimLet let skipwhite nextgroup=@vimSpecialVar,vimVar,vimVarList
+VimL syn keyword vimConst cons[t] skipwhite nextgroup=@vimSpecialVar,vimVar,vimVarList
+syn region vimVarList contained
+ \ start="\[" end="]"
+ \ contains=@vimContinue,@vimSpecialVar,vimVar
-VimL syn keyword vimUnlet unl[et] skipwhite nextgroup=vimUnletBang,vimUnletVars
-syn match vimUnletBang contained "!" skipwhite nextgroup=vimUnletVars
-syn region vimUnletVars contained start="$\I\|\h" skip="\n\s*\\" end="$" end="|" contains=vimVar,vimEnvvar,vimContinue,vimString,vimNumber
+VimL syn keyword vimUnlet unl[et] skipwhite nextgroup=vimUnletBang,vimUnletVars
+syn match vimUnletBang contained "\a\@1<=!" skipwhite nextgroup=vimUnletVars
+syn region vimUnletVars contained
+ \ start="$\I\|\h" skip=+\n\s*\\\|\n\s*"\\ \|^\s*"\\ + end="$" end="\ze[|"]"
+ \ nextgroup=vimCmdSep,vimComment
+ \ contains=@vimContinue,vimEnvvar,vimVar
VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='\%(^\z(\s*\)\S.*\)\@<==<<\s*trim\%(\s\+\)\@>\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\z1\=\z2$' extend
VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='=<<\%(\s*\)\@>\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\z1$' extend
@@ -718,15 +793,39 @@
Vim9 syn keyword vim9Var var skipwhite nextgroup=vim9Variable,vim9VariableList
syn match vim9Variable contained "\<\h\w*\>" skipwhite nextgroup=vimTypeSep,vimLetHereDoc,vimOper
-syn region vim9VariableList contained start="\[" end="]" contains=vim9Variable,@vimContinue
+syn region vim9VariableList contained start="\[" end="]" contains=@vimContinue,@vimSpecialVar,vim9Variable
+
+" Lockvar and Unlockvar: {{{2
+" =====================
+syn keyword vimLockvar lockv[ar] skipwhite nextgroup=vimLockvarBang,vimLockvarDepth,vimLockvarVars
+syn keyword vimUnlockvar unlo[ckvar] skipwhite nextgroup=vimLockvarBang,vimLockvarDepth,vimLockvarVars
+syn match vimLockvarBang contained "\a\@1<=!" skipwhite nextgroup=vimLockvarVars
+syn match vimLockvarDepth contained "\<[0-3]\>" skipwhite nextgroup=vimLockvarVars
+syn region vimLockvarVars contained
+ \ start="\h" skip=+\n\s*\\\|\n\s*"\\ \|^\s*"\\ + end="$" end="\ze[|"]"
+ \ nextgroup=vimCmdSep,vimComment
+ \ contains=@vimContinue,vimVar
+
+hi def link vimLockvar vimCommand
+hi def link vimUnlockvar vimCommand
+hi def link vimLockvarBang vimBang
+hi def link vimLockvarDepth vimNumber
" For: {{{2
" ===
-if s:vim9script
- syn keyword vim9For for skipwhite nextgroup=vim9Variable,vim9VariableList
-else
- syn keyword vimFor for skipwhite nextgroup=vimVar,vimVarList
-endif
+" handles Vim9 and legacy for now
+syn region vimFor
+ \ matchgroup=vimCommand
+ \ start="\<for\>" end="\<in\>"
+ \ skipwhite skipnl nextgroup=@vimForInContinue,vim9ForInComment,@vimExprList
+ \ contains=@vimContinue,vimVar,vimVarList,vim9VariableList
+ \ transparent
+
+syn match vim9ForInComment contained "#.*" skipwhite skipempty nextgroup=vimForInComment,@vimExprList
+
+syn match vimForInContinue contained "^\s*\zs\\" skipwhite skipnl nextgroup=@vimForInContinue,@vimExprList
+syn match vimForInContinueComment contained '^\s*\zs["#]\\ .*' skipwhite skipnl nextgroup=@vimForInContinue,@vimExprList
+syn cluster vimForInContinue contains=vimForInContinue,vimForInContinueComment
" Abbreviations: {{{2
" =============
@@ -744,7 +843,7 @@
syn keyword vimAutoCmd au[tocmd] skipwhite nextgroup=vimAutoCmdBang,vimAutoEventList
syn keyword vimAutoCmd do[autocmd] doautoa[ll] skipwhite nextgroup=vimAutoEventList
syn match vimAutoCmdMod "\(++\)\=\(once\|nested\)" skipwhite nextgroup=vimAutoCmdBlock
-syn region vimAutoCmdBlock contained matchgroup=vimSep start="{" end="}" contains=@vimDefBodyList
+syn region vimAutoCmdBlock contained matchgroup=vimSep start="{" end="^\s*\zs}" contains=@vimDefBodyList
" Echo And Execute: -- prefer strings! {{{2
" ================
@@ -845,8 +944,8 @@
" User Function Highlighting: {{{2
" (following Gautam Iyer's suggestion)
" ==========================
-syn match vimFunc "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\ze\s*(" 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
+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
@@ -1358,7 +1457,7 @@
hi def link vimDebuggreedy vimCommand
hi def link vimDefComment vim9Comment
hi def link vimDefKey vimCommand
- hi def link vimDefParam vimVar
+ hi def link vimDefParam vimVar
hi def link vimDelcommand vimCommand
hi def link vimDelcommandAttr vimUserCmdAttr
hi def link vimEcho vimCommand
@@ -1374,6 +1473,8 @@
hi def link vimFgBgAttrib vimHiAttrib
hi def link vimFuncEcho vimCommand
hi def link vimFor vimCommand
+ hi def link vimForInContinue vimContinue
+ hi def link vimForInContinueComment vimContinueComment
hi def link vimFTCmd vimCommand
hi def link vimFTOption vimSynType
hi def link vimFuncBang vimBang
@@ -1383,8 +1484,8 @@
hi def link vimFuncMod Special
hi def link vimFuncParam vimVar
hi def link vimFuncParamEquals vimOper
- hi def link vimFuncSID Special
- hi def link vimFuncVar Identifier
+ hi def link vimFuncScope vimVar
+ hi def link vimFuncSID vimNotation
hi def link vimGroupAdd vimSynOption
hi def link vimGroupName vimGroup
hi def link vimGroupRem vimSynOption
@@ -1413,6 +1514,7 @@
hi def link vim9KeymapLineComment vimKeymapLineComment
hi def link vimKeymapLineComment vimComment
hi def link vimKeymapTailComment vimComment
+ hi def link vimLambdaOperator vimOper
hi def link vimLet vimCommand
hi def link vimLetHereDoc vimString
hi def link vimLetHereDocStart Special
@@ -1446,7 +1548,11 @@
hi def link vimNumber Number
hi def link vimOperError Error
hi def link vimOper Operator
+ hi def link vimOperContinue vimContinue
+ hi def link vimOperContinueComment vimContinueComment
hi def link vimOption PreProc
+ hi def link vimOptionVar Identifier
+ hi def link vimVimVar Identifier
hi def link vimParenSep Delimiter
hi def link vimPatSepErr vimError
hi def link vimPatSepR vimPatSep
@@ -1529,7 +1635,7 @@
hi def link vimUserCmdError Error
hi def link vimUserCmdKey vimCommand
hi def link vimUserFunc Normal
- hi def link vimVar Identifier
+ hi def link vimVar Normal
hi def link vimWarn WarningMsg
hi def link vim9Abstract vimCommand
@@ -1538,6 +1644,7 @@
hi def link vim9Comment Comment
hi def link vim9CommentError vimError
hi def link vim9CommentTitle PreProc
+ hi def link vim9ConstructorDefParam vimVar
hi def link vim9Const vimCommand
hi def link vim9ContinueComment vimContinueComment
hi def link vim9Enum vimCommand
@@ -1545,9 +1652,15 @@
hi def link vim9Extends Keyword
hi def link vim9Final vimCommand
hi def link vim9For vimCommand
+ hi def link vim9ForInComment vim9Comment
hi def link vim9Implements Keyword
hi def link vim9AbstractDef vimCommand
hi def link vim9Interface vimCommand
+ hi def link vim9LambdaOperator vimOper
+ hi def link vim9LambdaOperatorComment vim9Comment
+ hi def link vim9LambdaParamsParen vimParenSep
+ hi def link vim9LhsRegister vimLetRegister
+ hi def link vim9LhsVariable vimVar
hi def link vim9LineComment vimComment
hi def link vim9MethodDef vimCommand
hi def link vim9MethodNameError vimFunctionError