@@ -106,6 +106,7 @@ endfunction
106106function s: PythonCompiler .__init__ ()
107107 let self .indent = [' ' ]
108108 let self .lines = []
109+ let self .in_class = 0
109110endfunction
110111
111112function s: PythonCompiler .out (... )
@@ -354,13 +355,15 @@ function s:PythonCompiler.compile_function(node)
354355 call self .emptyline ()
355356 endif
356357 call insert (rlist, ' self' )
357- call self .incindent (' ' )
358358 call self .out (' def %s(%s):' , left , join (rlist, ' , ' ))
359359 call self .incindent (' ' )
360360 call self .compile_body (a: node .body)
361361 call self .decindent ()
362- call self .decindent ()
363362 else
363+ if self .in_class
364+ let self .in_class = 0
365+ call self .decindent ()
366+ endif
364367 if comment_start
365368 call insert (self .lines , ' ' , comment_start)
366369 call insert (self .lines , ' ' , comment_start)
@@ -399,24 +402,27 @@ function s:PythonCompiler.compile_let(node)
399402 let right = self .compile (a: node .right )
400403 if a: node .left isnot s: NIL
401404 let left = self .compile (a: node .left )
402- if left == ' LvalueParser'
403- call self .emptyline ()
404- call self .emptyline ()
405- call self .out (' class LvalueParser(ExprParser):' )
406- return
407- elseif left = ~ ' ^\(VimLParser\|ExprTokenizer\|ExprParser\|LvalueParser\|StringReader\|Compiler\|RegexpParser\)$'
408- call self .emptyline ()
409- call self .emptyline ()
410- call self .out (' class %s:' , left )
411- return
412- elseif left = ~ ' ^\(VimLParser\|ExprTokenizer\|ExprParser\|LvalueParser\|StringReader\|Compiler\|RegexpParser\)\.'
405+ if left == # ' LvalueParser'
406+ let class_def = ' LvalueParser(ExprParser)'
407+ elseif left = ~# ' ^\(VimLParser\|ExprTokenizer\|ExprParser\|LvalueParser\|StringReader\|Compiler\|RegexpParser\)$'
408+ let class_def = left
409+ elseif left = ~# ' ^\(VimLParser\|ExprTokenizer\|ExprParser\|LvalueParser\|StringReader\|Compiler\|RegexpParser\)\.'
413410 let left = matchstr (left , ' \.\zs.*' )
414- call self .incindent (' ' )
415411 call self .out (' %s %s %s' , left , op , right )
416- call self .decindent ()
412+ return
413+ else
414+ call self .out (' %s %s %s' , left , op , right )
417415 return
418416 endif
419- call self .out (' %s %s %s' , left , op , right )
417+
418+ if self .in_class
419+ call self .decindent ()
420+ endif
421+ call self .emptyline ()
422+ call self .emptyline ()
423+ call self .out (' class %s:' , class_def)
424+ let self .in_class = 1
425+ call self .incindent (' ' )
420426 else
421427 let list = map (a: node .list , ' self.compile(v:val)' )
422428 if a: node .rest isnot s: NIL
0 commit comments