Skip to content

Commit

Permalink
codegen,render: basic enum generation
Browse files Browse the repository at this point in the history
  • Loading branch information
StunxFS committed Jun 9, 2024
1 parent 020ee71 commit 89bab58
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 3 deletions.
8 changes: 8 additions & 0 deletions bsc/codegen.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,17 @@ def gen_decl(self, decl):
if isinstance(decl, AST.ModDecl):
if decl.is_inline:
self.gen_inline_mod(decl)
elif isinstance(decl, AST.EnumDecl):
self.gen_enum_decl(decl)
elif isinstance(decl, AST.FnDecl):
self.gen_fn_decl(decl)

def gen_enum_decl(self, decl):
fields = []
for i, f in enumerate(decl.fields):
fields.append(LuaTableField(f.name, str(i)))
self.decls.append(LuaTable(decl.sym.qualname("."), fields))

def gen_inline_mod(self, decl):
old_decls = self.decls
self.decls = []
Expand Down
3 changes: 1 addition & 2 deletions bsc/lua_ast/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@ def __init__(self, name, value):
self.value = value

class LuaTable:
def __init__(self, is_local, name, fields):
self.is_local = is_local
def __init__(self, name, fields):
self.name = name
self.fields = fields

Expand Down
16 changes: 15 additions & 1 deletion bsc/lua_ast/render.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,23 @@ def render_decls(self, decls):
def render_decl(self, decl):
if isinstance(decl, LuaModule):
self.render_inline_mod(decl)
elif isinstance(decl, LuaTable):
self.render_table(decl)
elif isinstance(decl, LuaFunction):
self.render_fn_decl(decl)

def render_table(self, decl):
self.writeln(f"{decl.name} = {{ -- enum")
self.indent += 1
for i, field in enumerate(decl.fields):
self.write(f"{field.name} = {field.value}")
if i < len(decl.fields) - 1:
self.writeln(",")
else:
self.writeln()
self.indent -= 1
self.writeln("}\n")

def render_inline_mod(self, decl):
self.writeln(f"{decl.name} = {{}} -- inline module\n")
self.render_decls(decl.decls)
Expand All @@ -73,7 +87,7 @@ def write(self, s):
self.lua_file.write(s)
self.empty_line = False

def writeln(self, s):
def writeln(self, s = ""):
if self.indent > 0 and self.empty_line:
self.lua_file.write("\t" * self.indent)
self.lua_file.writeln(s)
Expand Down

0 comments on commit 89bab58

Please sign in to comment.