@@ -1506,7 +1506,7 @@ function! s:VimLParser.parse_cmd_let() abort
15061506 return
15071507 endif
15081508
1509- let lhs = self .parse_letlhs ()
1509+ let lhs = self .parse_letlhs (s: FALSE )
15101510 call self .reader.skip_white ()
15111511 let s1 = self .reader.peekn (1 )
15121512 let s2 = self .reader.peekn (2 )
@@ -1567,7 +1567,7 @@ function! s:VimLParser.parse_cmd_const() abort
15671567 return
15681568 endif
15691569
1570- let lhs = self .parse_constlhs ( )
1570+ let lhs = self .parse_letlhs ( s: TRUE )
15711571 call self .reader.skip_white ()
15721572 let s1 = self .reader.peekn (1 )
15731573
@@ -1721,7 +1721,7 @@ function! s:VimLParser.parse_cmd_for() abort
17211721 let node.left = s: NIL
17221722 let node.right = s: NIL
17231723 let node.endfor = s: NIL
1724- let lhs = self .parse_letlhs ()
1724+ let lhs = self .parse_letlhs (s: FALSE )
17251725 let node.left = lhs.left
17261726 let node.list = lhs.list
17271727 let node.rest = lhs.rest
@@ -1930,7 +1930,6 @@ function! s:VimLParser.parse_lvalue() abort
19301930 throw s: Err (' Invalid Expression' , node.pos)
19311931endfunction
19321932
1933- " TODO: merge with s:VimLParser.parse_lvalue()
19341933function ! s: VimLParser .parse_constlvalue () abort
19351934 let p = s: LvalueParser .new (self .reader)
19361935 let node = p .parse ()
@@ -1970,7 +1969,7 @@ function! s:VimLParser.parse_lvaluelist() abort
19701969endfunction
19711970
19721971" FIXME:
1973- function ! s: VimLParser .parse_letlhs () abort
1972+ function ! s: VimLParser .parse_letlhs (is_const ) abort
19741973 let lhs = {' left' : s: NIL , ' list' : s: NIL , ' rest' : s: NIL }
19751974 let tokenizer = s: ExprTokenizer .new (self .reader)
19761975 if tokenizer.peek ().type == # s: TOKEN_SQOPEN
@@ -1997,46 +1996,14 @@ function! s:VimLParser.parse_letlhs() abort
19971996 throw s: Err (printf (' E475 Invalid argument: %s' , token.value), token.pos)
19981997 endif
19991998 endwhile
1999+ elseif a: is_const
2000+ let lhs.left = self .parse_constlvalue ()
20002001 else
20012002 let lhs.left = self .parse_lvalue ()
20022003 endif
20032004 return lhs
20042005endfunction
20052006
2006- " TODO: merge with s:VimLParser.parse_letlhs() ?
2007- function ! s: VimLParser .parse_constlhs () abort
2008- let lhs = {' left' : s: NIL , ' list' : s: NIL , ' rest' : s: NIL }
2009- let tokenizer = s: ExprTokenizer .new (self .reader)
2010- if tokenizer.peek ().type == # s: TOKEN_SQOPEN
2011- call tokenizer.get ()
2012- let lhs.list = []
2013- while s: TRUE
2014- let node = self .parse_lvalue ()
2015- call add (lhs.list , node)
2016- let token = tokenizer.get ()
2017- if token.type == # s: TOKEN_SQCLOSE
2018- break
2019- elseif token.type == # s: TOKEN_COMMA
2020- continue
2021- elseif token.type == # s: TOKEN_SEMICOLON
2022- let node = self .parse_lvalue ()
2023- let lhs.rest = node
2024- let token = tokenizer.get ()
2025- if token.type == # s: TOKEN_SQCLOSE
2026- break
2027- else
2028- throw s: Err (printf (' E475 Invalid argument: %s' , token.value), token.pos)
2029- endif
2030- else
2031- throw s: Err (printf (' E475 Invalid argument: %s' , token.value), token.pos)
2032- endif
2033- endwhile
2034- else
2035- let lhs.left = self .parse_constlvalue ()
2036- endif
2037- return lhs
2038- endfunction
2039-
20402007function ! s: VimLParser .ends_excmds (c ) abort
20412008 return a: c == # ' ' || a: c == # ' |' || a: c == # ' "' || a: c == # ' <EOF>' || a: c == # ' <EOL>'
20422009endfunction
0 commit comments