@@ -1495,7 +1495,14 @@ function! s:VimLParser.parse_cmd_let() abort
14951495 " :let
14961496 if self .ends_excmds (self .reader.peek ())
14971497 call self .reader.seek_set (pos)
1498- call self .parse_cmd_common ()
1498+ let node = s: Node (s: NODE_LET )
1499+ let node.pos = self .ea .cmdpos
1500+ let node.ea = self .ea
1501+ let node.left = s: NIL
1502+ let node.list = s: NIL
1503+ let node.rest = s: NIL
1504+ let node.right = s: NIL
1505+ call self .add_node (node)
14991506 return
15001507 endif
15011508
@@ -1510,8 +1517,14 @@ function! s:VimLParser.parse_cmd_let() abort
15101517
15111518 " :let {var-name} ..
15121519 if self .ends_excmds (s1) || (s2 !=# ' +=' && s2 !=# ' -=' && s2 !=# ' .=' && s2 !=# ' ..=' && s2 !=# ' *=' && s2 !=# ' /=' && s2 !=# ' %=' && s1 !=# ' =' )
1513- call self .reader.seek_set (pos)
1514- call self .parse_cmd_common ()
1520+ let node = s: Node (s: NODE_LET )
1521+ let node.pos = self .ea .cmdpos
1522+ let node.ea = self .ea
1523+ let node.left = lhs.left
1524+ let node.list = lhs.list
1525+ let node.rest = lhs.rest
1526+ let node.right = s: NIL
1527+ call self .add_node (node)
15151528 return
15161529 endif
15171530
@@ -1543,8 +1556,14 @@ function! s:VimLParser.parse_cmd_const() abort
15431556
15441557 " :const
15451558 if self .ends_excmds (self .reader.peek ())
1546- call self .reader.seek_set (pos)
1547- call self .parse_cmd_common ()
1559+ let node = s: Node (s: NODE_CONST )
1560+ let node.pos = self .ea .cmdpos
1561+ let node.ea = self .ea
1562+ let node.left = s: NIL
1563+ let node.list = s: NIL
1564+ let node.rest = s: NIL
1565+ let node.right = s: NIL
1566+ call self .add_node (node)
15481567 return
15491568 endif
15501569
@@ -1554,8 +1573,14 @@ function! s:VimLParser.parse_cmd_const() abort
15541573
15551574 " :const {var-name}
15561575 if self .ends_excmds (s1) || s1 !=# ' ='
1557- call self .reader.seek_set (pos)
1558- call self .parse_cmd_common ()
1576+ let node = s: Node (s: NODE_CONST )
1577+ let node.pos = self .ea .cmdpos
1578+ let node.ea = self .ea
1579+ let node.left = lhs.left
1580+ let node.list = lhs.list
1581+ let node.rest = lhs.rest
1582+ let node.right = s: NIL
1583+ call self .add_node (node)
15591584 return
15601585 endif
15611586
@@ -4996,23 +5021,20 @@ function! s:Compiler.compile_excall(node) abort
49965021endfunction
49975022
49985023function ! s: Compiler .compile_let (node) abort
4999- let left = ' '
5000- if a: node .left isnot # s: NIL
5001- let left = self .compile (a: node .left )
5002- else
5003- let left = join (map (a: node .list , ' self.compile(v:val)' ), ' ' )
5004- if a: node .rest isnot # s: NIL
5005- let left .= ' . ' . self .compile (a: node .rest)
5006- endif
5007- let left = ' (' . left . ' )'
5008- endif
5009- let right = self .compile (a: node .right )
5010- call self .out (' (let %s %s %s)' , a: node .op , left , right )
5024+ call self .compile_letconst (a: node , ' let' )
50115025endfunction
50125026
5013- " TODO: merge with s:Compiler.compile_let() ?
50145027function ! s: Compiler .compile_const (node) abort
5028+ call self .compile_letconst (a: node , ' const' )
5029+ endfunction
5030+
5031+ function ! s: Compiler .compile_letconst (node, cmd) abort
50155032 let left = ' '
5033+ let right = ' '
5034+ if a: node .left is # s: NIL && a: node .right is # s: NIL
5035+ call self .out (' (%s)' , a: cmd )
5036+ return
5037+ endif
50165038 if a: node .left isnot # s: NIL
50175039 let left = self .compile (a: node .left )
50185040 else
@@ -5022,8 +5044,14 @@ function! s:Compiler.compile_const(node) abort
50225044 endif
50235045 let left = ' (' . left . ' )'
50245046 endif
5025- let right = self .compile (a: node .right )
5026- call self .out (' (const %s %s %s)' , a: node .op , left , right )
5047+ if a: node .right isnot # s: NIL
5048+ let right = self .compile (a: node .right )
5049+ endif
5050+ if a: node .left isnot # s: NIL && a: node .right is # s: NIL
5051+ call self .out (' (%s () %s)' , a: cmd , left )
5052+ else
5053+ call self .out (' (%s %s %s %s)' , a: cmd , a: node .op , left , right )
5054+ endif
50275055endfunction
50285056
50295057function ! s: Compiler .compile_unlet (node) abort
0 commit comments