@@ -1515,6 +1515,7 @@ function! s:VimLParser.parse_heredoc() abort
1515
1515
1516
1516
while s: TRUE
1517
1517
call self .reader.skip_white ()
1518
+ let pos = self .reader.getpos ()
1518
1519
let key = self .reader.read_word ()
1519
1520
if key == ' '
1520
1521
break
@@ -1523,7 +1524,10 @@ function! s:VimLParser.parse_heredoc() abort
1523
1524
let node.op = key
1524
1525
break
1525
1526
else
1526
- call add (node.rlist, key )
1527
+ let keynode = s: Node (s: NODE_STRING )
1528
+ let keynode.pos = pos
1529
+ let keynode.value = key
1530
+ call add (node.rlist, keynode)
1527
1531
endif
1528
1532
endwhile
1529
1533
if node.op == # ' '
@@ -1534,11 +1538,15 @@ function! s:VimLParser.parse_heredoc() abort
1534
1538
if self .reader.peek () == # ' <EOF>'
1535
1539
break
1536
1540
endif
1541
+ let pos = self .reader.getpos ()
1537
1542
let line = self .reader.getn (-1 )
1538
1543
if line == # node.op
1539
1544
return node
1540
1545
endif
1541
- call add (node.body, line )
1546
+ let linenode = s: Node (s: NODE_STRING )
1547
+ let linenode.pos = pos
1548
+ let linenode.value = line
1549
+ call add (node.body, linenode)
1542
1550
call self .reader.get ()
1543
1551
endwhile
1544
1552
throw s: Err (printf (" E990: Missing end marker '%s'" , node.op ), self .reader.getpos ())
@@ -5590,12 +5598,12 @@ function! s:Compiler.compile_heredoc(node) abort
5590
5598
if empty (a: node .rlist)
5591
5599
let rlist = ' (list)'
5592
5600
else
5593
- let rlist = ' (list ' . join (map (a: node .rlist, ' self.escape_string(v:val)' ), ' ' ) . ' )'
5601
+ let rlist = ' (list ' . join (map (a: node .rlist, ' self.escape_string(v:val.value )' ), ' ' ) . ' )'
5594
5602
endif
5595
5603
if empty (a: node .body)
5596
5604
let body = ' (list)'
5597
5605
else
5598
- let body = ' (list ' . join (map (a: node .body, ' self.escape_string(v:val)' ), ' ' ) . ' )'
5606
+ let body = ' (list ' . join (map (a: node .body, ' self.escape_string(v:val.value )' ), ' ' ) . ' )'
5599
5607
endif
5600
5608
let op = self .escape_string (a: node .op )
5601
5609
return printf (' (heredoc %s %s %s)' , rlist, op , body)
0 commit comments