@@ -642,6 +642,8 @@ function s:GoCompiler.compile_ternary(node)
642642 let right = self .compile (a: node .right )
643643 if cond = ~ ' ^node\.rlist\[\d\]' && left == ' "nil"'
644644 return printf (' func() string { if %s {return %s} else {return %s.(string)} }()' , cond, left , right )
645+ elseif cond = ~ ' ^viml_empty' && left == ' "(list)"'
646+ return printf (' func() string { if %s {return %s} else {return %s} }()' , cond, left , right )
645647 elseif cond == ' is_litdict'
646648 return printf (' func() *VimNode { if %s {return %s} else {return %s} }()' , cond, left , right )
647649 else
@@ -841,7 +843,6 @@ function s:GoCompiler.compile_call(node)
841843 let rlist = map (a: node .rlist, ' self.compile(v:val)' )
842844 let left = self .compile (a: node .left )
843845 if left == ' map' && len (rlist) == 2 && rlist[1 ] == ' "self.compile(v:val)"'
844- " throw 'NotImplemented: map()'
845846 return printf (join ([
846847 \ ' func() []string {' ,
847848 \ ' var ss []string' ,
@@ -851,6 +852,16 @@ function s:GoCompiler.compile_call(node)
851852 \ ' return ss' ,
852853 \ ' }()' ,
853854 \ ], " ;" ), rlist[0 ], substitute (rlist[1 ][1 :-2 ], ' v:val' , ' vval' , ' g' ))
855+ elseif left == ' map' && len (rlist) == 2 && rlist[1 ] == ' "self.escape_string(v:val.value)"'
856+ return printf (join ([
857+ \ ' func() []string {' ,
858+ \ ' var ss []string' ,
859+ \ ' for _, vval := range %s {' ,
860+ \ ' ss = append(ss, %s)' ,
861+ \ ' }' ,
862+ \ ' return ss' ,
863+ \ ' }()' ,
864+ \ ], " ;" ), rlist[0 ], substitute (rlist[1 ][1 :-2 ], ' v:val\.value' , ' vval.value.(string)' , ' g' ))
854865 elseif left == ' call' && rlist[0 ][0 ] = ~ ' ['' "]'
855866 return printf (' viml_%s(*%s)' , rlist[0 ][1 :-2 ], rlist[1 ])
856867 elseif left = ~ ' ExArg'
0 commit comments