@@ -83,10 +83,69 @@ def render_fn_decl(self, decl):
83
83
if i < len (decl .args ) - 1 :
84
84
self .write (", " )
85
85
self .writeln (")" )
86
- #self.indent += 1
87
- #self.indent -= 1
86
+ self .indent += 1
87
+ self .render_stmts (decl .stmts )
88
+ self .indent -= 1
88
89
self .writeln ("end\n " )
89
90
91
+ def render_stmts (self , stmts ):
92
+ for stmt in stmts :
93
+ self .render_stmt (stmt )
94
+
95
+ def render_stmt (self , stmt ):
96
+ if isinstance (stmt , LuaWhile ):
97
+ self .write ("while " )
98
+ self .render_expr (stmt .cond )
99
+ self .writeln (" do" )
100
+ self .indent += 1
101
+ self .render_stmts (stmt .stmts )
102
+ self .indent -= 1
103
+ self .writeln ("end" )
104
+ elif isinstance (stmt , LuaRepeat ):
105
+ self .writeln ("repeat" )
106
+ self .indent += 1
107
+ self .render_stmts (stmt .stmts )
108
+ self .indent -= 1
109
+ self .write ("until " )
110
+ self .render_expr (stmt .cond )
111
+ self .writeln ()
112
+ elif isinstance (stmt , LuaIf ):
113
+ for i , branch in enumerate (stmt .branches ):
114
+ if branch .is_else :
115
+ self .writeln ("else" )
116
+ else :
117
+ self .write ("if " if i == 0 else "elseif " )
118
+ self .render_expr (branch .cond )
119
+ self .indent += 1
120
+ self .render_stmts (branch .stmts )
121
+ self .indent -= 1
122
+ self .writeln ("end" )
123
+
124
+ def render_expr (self , expr ):
125
+ if isinstance (expr , LuaParenExpr ):
126
+ self .write ("(" )
127
+ self .render_expr (expr .expr )
128
+ self .write (")" )
129
+ elif isinstance (expr , LuaCallExpr ):
130
+ self .render_expr (expr .left )
131
+ self .write ("(" )
132
+ for i , arg in enumerate (expr .args ):
133
+ self .render_expr (arg )
134
+ if i < len (expr .args ) - 1 :
135
+ self .write (", " )
136
+ self .write (")" )
137
+ elif isinstance (expr , LuaSelector ):
138
+ self .render_expr (expr .left )
139
+ self .write (f".{ expr .name } " )
140
+ elif isinstance (expr , LuaIdent ):
141
+ self .write (expr .name )
142
+ elif isinstance (expr , (LuaBooleanLit , LuaNumberLit )):
143
+ self .write (expr .value )
144
+ elif isinstance (expr , LuaNil ):
145
+ self .write ("nil" )
146
+
147
+ ## Utils
148
+
90
149
def write (self , s ):
91
150
if self .indent > 0 and self .empty_line :
92
151
self .lua_file .write ("\t " * self .indent )
0 commit comments