@@ -106,6 +106,7 @@ endfunction
106
106
function s: PythonCompiler .__init__ ()
107
107
let self .indent = [' ' ]
108
108
let self .lines = []
109
+ let self .in_class = 0
109
110
endfunction
110
111
111
112
function s: PythonCompiler .out (... )
@@ -354,13 +355,15 @@ function s:PythonCompiler.compile_function(node)
354
355
call self .emptyline ()
355
356
endif
356
357
call insert (rlist, ' self' )
357
- call self .incindent (' ' )
358
358
call self .out (' def %s(%s):' , left , join (rlist, ' , ' ))
359
359
call self .incindent (' ' )
360
360
call self .compile_body (a: node .body)
361
361
call self .decindent ()
362
- call self .decindent ()
363
362
else
363
+ if self .in_class
364
+ let self .in_class = 0
365
+ call self .decindent ()
366
+ endif
364
367
if comment_start
365
368
call insert (self .lines , ' ' , comment_start)
366
369
call insert (self .lines , ' ' , comment_start)
@@ -399,24 +402,27 @@ function s:PythonCompiler.compile_let(node)
399
402
let right = self .compile (a: node .right )
400
403
if a: node .left isnot s: NIL
401
404
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\)\.'
413
410
let left = matchstr (left , ' \.\zs.*' )
414
- call self .incindent (' ' )
415
411
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 )
417
415
return
418
416
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 (' ' )
420
426
else
421
427
let list = map (a: node .list , ' self.compile(v:val)' )
422
428
if a: node .rest isnot s: NIL
0 commit comments