Skip to content

Commit 0961b9d

Browse files
committed
Fix heredoc rlist and body: the type should be s:Node not string
1 parent f610059 commit 0961b9d

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

autoload/vimlparser.vim

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1515,6 +1515,7 @@ function! s:VimLParser.parse_heredoc() abort
15151515

15161516
while s:TRUE
15171517
call self.reader.skip_white()
1518+
let pos = self.reader.getpos()
15181519
let key = self.reader.read_word()
15191520
if key == ''
15201521
break
@@ -1523,7 +1524,10 @@ function! s:VimLParser.parse_heredoc() abort
15231524
let node.op = key
15241525
break
15251526
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)
15271531
endif
15281532
endwhile
15291533
if node.op ==# ''
@@ -1534,11 +1538,15 @@ function! s:VimLParser.parse_heredoc() abort
15341538
if self.reader.peek() ==# '<EOF>'
15351539
break
15361540
endif
1541+
let pos = self.reader.getpos()
15371542
let line = self.reader.getn(-1)
15381543
if line ==# node.op
15391544
return node
15401545
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)
15421550
call self.reader.get()
15431551
endwhile
15441552
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
55905598
if empty(a:node.rlist)
55915599
let rlist = '(list)'
55925600
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)'), ' ') . ')'
55945602
endif
55955603
if empty(a:node.body)
55965604
let body = '(list)'
55975605
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)'), ' ') . ')'
55995607
endif
56005608
let op = self.escape_string(a:node.op)
56015609
return printf('(heredoc %s %s %s)', rlist, op, body)

0 commit comments

Comments
 (0)