@@ -1809,6 +1809,7 @@ VimLParser.prototype.parse_heredoc = function() {
18091809 node . body = [ ] ;
18101810 while ( TRUE ) {
18111811 this . reader . skip_white ( ) ;
1812+ var pos = this . reader . getpos ( ) ;
18121813 var key = this . reader . read_word ( ) ;
18131814 if ( key == "" ) {
18141815 break ;
@@ -1818,7 +1819,10 @@ VimLParser.prototype.parse_heredoc = function() {
18181819 break ;
18191820 }
18201821 else {
1821- viml_add ( node . rlist , key ) ;
1822+ var keynode = Node ( NODE_STRING ) ;
1823+ keynode . pos = pos ;
1824+ keynode . value = key ;
1825+ viml_add ( node . rlist , keynode ) ;
18221826 }
18231827 }
18241828 if ( node . op == "" ) {
@@ -1829,11 +1833,15 @@ VimLParser.prototype.parse_heredoc = function() {
18291833 if ( this . reader . peek ( ) == "<EOF>" ) {
18301834 break ;
18311835 }
1836+ var pos = this . reader . getpos ( ) ;
18321837 var line = this . reader . getn ( - 1 ) ;
18331838 if ( line == node . op ) {
18341839 return node ;
18351840 }
1836- viml_add ( node . body , line ) ;
1841+ var linenode = Node ( NODE_STRING ) ;
1842+ linenode . pos = pos ;
1843+ linenode . value = line ;
1844+ viml_add ( node . body , linenode ) ;
18371845 this . reader . get ( ) ;
18381846 }
18391847 throw Err ( viml_printf ( "E990: Missing end marker '%s'" , node . op ) , this . reader . getpos ( ) ) ;
@@ -5094,13 +5102,13 @@ Compiler.prototype.compile_heredoc = function(node) {
50945102 var rlist = "(list)" ;
50955103 }
50965104 else {
5097- var rlist = "(list " + viml_join ( node . rlist . map ( ( function ( vval ) { return this . escape_string ( vval ) ; } ) . bind ( this ) ) , " " ) + ")" ;
5105+ var rlist = "(list " + viml_join ( node . rlist . map ( ( function ( vval ) { return this . escape_string ( vval . value ) ; } ) . bind ( this ) ) , " " ) + ")" ;
50985106 }
50995107 if ( viml_empty ( node . body ) ) {
51005108 var body = "(list)" ;
51015109 }
51025110 else {
5103- var body = "(list " + viml_join ( node . body . map ( ( function ( vval ) { return this . escape_string ( vval ) ; } ) . bind ( this ) ) , " " ) + ")" ;
5111+ var body = "(list " + viml_join ( node . body . map ( ( function ( vval ) { return this . escape_string ( vval . value ) ; } ) . bind ( this ) ) , " " ) + ")" ;
51045112 }
51055113 var op = this . escape_string ( node . op ) ;
51065114 return viml_printf ( "(heredoc %s %s %s)" , rlist , op , body ) ;
0 commit comments