@@ -639,6 +639,8 @@ function s:GoCompiler.compile_ternary(node)
639639 let right = self .compile (a: node .right )
640640 if cond = ~ ' ^node\.rlist\[\d\]' && left == ' "nil"'
641641 return printf (' func() string { if %s {return %s} else {return %s.(string)} }()' , cond, left , right )
642+ elseif cond = ~ ' ^viml_empty' && left == ' "(list)"'
643+ return printf (' func() string { if %s {return %s} else {return %s} }()' , cond, left , right )
642644 elseif cond == ' is_litdict'
643645 return printf (' func() *VimNode { if %s {return %s} else {return %s} }()' , cond, left , right )
644646 else
@@ -838,7 +840,6 @@ function s:GoCompiler.compile_call(node)
838840 let rlist = map (a: node .rlist, ' self.compile(v:val)' )
839841 let left = self .compile (a: node .left )
840842 if left == ' map' && len (rlist) == 2 && rlist[1 ] == ' "self.compile(v:val)"'
841- " throw 'NotImplemented: map()'
842843 return printf (join ([
843844 \ ' func() []string {' ,
844845 \ ' var ss []string' ,
@@ -848,6 +849,16 @@ function s:GoCompiler.compile_call(node)
848849 \ ' return ss' ,
849850 \ ' }()' ,
850851 \ ], " ;" ), rlist[0 ], substitute (rlist[1 ][1 :-2 ], ' v:val' , ' vval' , ' g' ))
852+ elseif left == ' map' && len (rlist) == 2 && rlist[1 ] == ' "self.escape_string(v:val.value)"'
853+ return printf (join ([
854+ \ ' func() []string {' ,
855+ \ ' var ss []string' ,
856+ \ ' for _, vval := range %s {' ,
857+ \ ' ss = append(ss, %s)' ,
858+ \ ' }' ,
859+ \ ' return ss' ,
860+ \ ' }()' ,
861+ \ ], " ;" ), rlist[0 ], substitute (rlist[1 ][1 :-2 ], ' v:val\.value' , ' vval.value.(string)' , ' g' ))
851862 elseif left == ' call' && rlist[0 ][0 ] = ~ ' ['' "]'
852863 return printf (' viml_%s(*%s)' , rlist[0 ][1 :-2 ], rlist[1 ])
853864 elseif left = ~ ' ExArg'
0 commit comments