@@ -1506,7 +1506,7 @@ function! s:VimLParser.parse_cmd_let() abort
1506
1506
return
1507
1507
endif
1508
1508
1509
- let lhs = self .parse_letlhs ()
1509
+ let lhs = self .parse_letlhs (s: FALSE )
1510
1510
call self .reader.skip_white ()
1511
1511
let s1 = self .reader.peekn (1 )
1512
1512
let s2 = self .reader.peekn (2 )
@@ -1567,7 +1567,7 @@ function! s:VimLParser.parse_cmd_const() abort
1567
1567
return
1568
1568
endif
1569
1569
1570
- let lhs = self .parse_constlhs ( )
1570
+ let lhs = self .parse_letlhs ( s: TRUE )
1571
1571
call self .reader.skip_white ()
1572
1572
let s1 = self .reader.peekn (1 )
1573
1573
@@ -1721,7 +1721,7 @@ function! s:VimLParser.parse_cmd_for() abort
1721
1721
let node.left = s: NIL
1722
1722
let node.right = s: NIL
1723
1723
let node.endfor = s: NIL
1724
- let lhs = self .parse_letlhs ()
1724
+ let lhs = self .parse_letlhs (s: FALSE )
1725
1725
let node.left = lhs.left
1726
1726
let node.list = lhs.list
1727
1727
let node.rest = lhs.rest
@@ -1930,7 +1930,6 @@ function! s:VimLParser.parse_lvalue() abort
1930
1930
throw s: Err (' Invalid Expression' , node.pos)
1931
1931
endfunction
1932
1932
1933
- " TODO: merge with s:VimLParser.parse_lvalue()
1934
1933
function ! s: VimLParser .parse_constlvalue () abort
1935
1934
let p = s: LvalueParser .new (self .reader)
1936
1935
let node = p .parse ()
@@ -1970,7 +1969,7 @@ function! s:VimLParser.parse_lvaluelist() abort
1970
1969
endfunction
1971
1970
1972
1971
" FIXME:
1973
- function ! s: VimLParser .parse_letlhs () abort
1972
+ function ! s: VimLParser .parse_letlhs (is_const ) abort
1974
1973
let lhs = {' left' : s: NIL , ' list' : s: NIL , ' rest' : s: NIL }
1975
1974
let tokenizer = s: ExprTokenizer .new (self .reader)
1976
1975
if tokenizer.peek ().type == # s: TOKEN_SQOPEN
@@ -1997,46 +1996,14 @@ function! s:VimLParser.parse_letlhs() abort
1997
1996
throw s: Err (printf (' E475 Invalid argument: %s' , token.value), token.pos)
1998
1997
endif
1999
1998
endwhile
1999
+ elseif a: is_const
2000
+ let lhs.left = self .parse_constlvalue ()
2000
2001
else
2001
2002
let lhs.left = self .parse_lvalue ()
2002
2003
endif
2003
2004
return lhs
2004
2005
endfunction
2005
2006
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
-
2040
2007
function ! s: VimLParser .ends_excmds (c ) abort
2041
2008
return a: c == # ' ' || a: c == # ' |' || a: c == # ' "' || a: c == # ' <EOF>' || a: c == # ' <EOL>'
2042
2009
endfunction
0 commit comments