@@ -34,71 +34,26 @@ def render_module(self, module):
34
34
"-- WARNING: DO NOT MODIFY MANUALLY! YOUR CHANGES WILL BE OVERWRITTEN --\n "
35
35
)
36
36
37
- self .writeln (f"local { module .name } = {{}} -- package\n " )
38
- self .render_decls (module .decls )
39
- self .writeln (f"return { module .name } \n " )
37
+ self .render_stmts (module .stmts )
40
38
41
39
with open (f"{ BSC_OUT_DIR } /{ module .name } .lua" , "w" ) as f :
42
40
f .write (str (self .lua_file ))
43
41
self .lua_file .clear ()
44
42
45
- def render_decls (self , decls ):
46
- for decl in decls :
47
- self .render_decl (decl )
48
-
49
- def render_decl (self , decl ):
50
- if isinstance (decl , LuaModule ):
51
- self .render_mod (decl )
52
- elif isinstance (decl , LuaTable ):
53
- self .render_table (decl )
54
- elif isinstance (decl , LuaAssignment ):
55
- self .render_assign_decl (decl )
56
- elif isinstance (decl , LuaFunction ):
57
- self .render_fn_decl (decl )
58
-
59
- def render_mod (self , decl ):
60
- if decl .is_inline :
61
- self .writeln (f"{ decl .name } = {{}} -- inline module\n " )
62
- self .render_decls (decl .decls )
63
- self .writeln (f"-- end module `{ decl .name } `\n " )
64
- else :
65
- self .writeln (
66
- f"{ decl .name } = require(\" { BSC_OUT_DIR } .{ decl .lua_filename } \" ) -- load module file\n "
67
- )
68
-
69
- def render_fn_decl (self , decl ):
70
- self .write (f"function { decl .name } (" )
71
- for i , arg in enumerate (decl .args ):
72
- self .write (arg .name )
73
- if i < len (decl .args ) - 1 :
74
- self .write (", " )
75
- self .writeln (")" )
76
- self .indent += 1
77
- self .render_stmts (decl .block .stmts )
78
- self .indent -= 1
79
- self .writeln ("end\n " )
80
-
81
- def render_assign_decl (self , decl ):
82
- if decl .is_local :
83
- self .write ("local " )
84
- for i , left in enumerate (decl .lefts ):
85
- self .render_ident (left )
86
- if i < len (decl .lefts ) - 1 :
87
- self .write (", " )
88
- if len (decl .rights ) > 0 :
89
- self .write (" = " )
90
- for i , right in enumerate (decl .rights ):
91
- self .render_expr (right )
92
- if i < len (decl .rights ) - 1 :
93
- self .write (", " )
94
- self .writeln ()
95
-
96
43
def render_stmts (self , stmts ):
97
44
for stmt in stmts :
98
45
self .render_stmt (stmt )
99
46
100
47
def render_stmt (self , stmt ):
101
- if isinstance (stmt , LuaWhile ):
48
+ if isinstance (stmt , LuaModule ):
49
+ self .render_mod (stmt )
50
+ elif isinstance (stmt , LuaFunction ):
51
+ self .render_fn_stmt (stmt )
52
+ elif isinstance (stmt , LuaTable ):
53
+ self .render_table (stmt )
54
+ elif isinstance (stmt , LuaAssignment ):
55
+ self .render_assign_stmt (stmt )
56
+ elif isinstance (stmt , LuaWhile ):
102
57
self .write ("while " )
103
58
self .render_expr (stmt .cond )
104
59
self .writeln (" do" )
@@ -130,22 +85,58 @@ def render_stmt(self, stmt):
130
85
self .indent += 1
131
86
self .render_stmts (stmt .stmts )
132
87
self .indent -= 1
133
- self .writeln ("end" )
88
+ self .writeln ("end\n " )
134
89
elif isinstance (stmt , LuaAssignment ):
135
- self .render_assign_decl (stmt )
90
+ self .render_assign_stmt (stmt )
136
91
elif isinstance (stmt , LuaReturn ):
137
92
self .write ("return" )
138
93
if stmt .expr != None :
139
94
self .write (" " )
140
95
self .render_expr (stmt .expr )
141
96
self .writeln ()
142
97
98
+ def render_mod (self , stmt ):
99
+ self .writeln (
100
+ f"local { stmt .name } = require(\" { BSC_OUT_DIR } .{ stmt .lua_filename } \" ) -- load module file\n "
101
+ )
102
+
103
+ def render_fn_stmt (self , stmt ):
104
+ if not stmt .is_associated :
105
+ self .write ("local " )
106
+ self .write (f"function { stmt .name } (" )
107
+ for i , arg in enumerate (stmt .args ):
108
+ self .write (arg .name )
109
+ if i < len (stmt .args ) - 1 :
110
+ self .write (", " )
111
+ self .writeln (")" )
112
+ self .indent += 1
113
+ self .render_stmts (stmt .block .stmts )
114
+ self .indent -= 1
115
+ self .writeln ("end\n " )
116
+
117
+ def render_assign_stmt (self , stmt ):
118
+ if stmt .is_local : self .write ("local " )
119
+ for i , left in enumerate (stmt .lefts ):
120
+ self .render_ident (left )
121
+ if i < len (stmt .lefts ) - 1 :
122
+ self .write (", " )
123
+ if len (stmt .rights ) > 0 :
124
+ self .write (" = " )
125
+ for i , right in enumerate (stmt .rights ):
126
+ self .render_expr (right )
127
+ if i < len (stmt .rights ) - 1 :
128
+ self .write (", " )
129
+ self .writeln ()
130
+
143
131
def render_expr (self , expr ):
144
132
if isinstance (expr , LuaParenExpr ):
145
133
self .write ("(" )
146
134
self .render_expr (expr .expr )
147
135
self .write (")" )
148
136
elif isinstance (expr , LuaTable ):
137
+ if len (expr .fields ) == 0 :
138
+ self .writeln ("{}" )
139
+ return
149
140
self .writeln ("{" )
150
141
self .indent += 1
151
142
for i , field in enumerate (expr .fields ):
0 commit comments