46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
class Import:
|
|
def __init__(self, module, name, intname):
|
|
self.module = module
|
|
self.name = name
|
|
self.intname = intname
|
|
self.params = None
|
|
|
|
def generate(self):
|
|
return '(import "{}" "{}" (func ${}{}))'.format(
|
|
self.module,
|
|
self.name,
|
|
self.intname,
|
|
''.join(' (param {})'.format(x) for x in self.params)
|
|
)
|
|
|
|
class Statement:
|
|
def __init__(self, name, *args):
|
|
self.name = name
|
|
self.args = args
|
|
|
|
def generate(self):
|
|
return '{} {}'.format(self.name, ' '.join(self.args))
|
|
|
|
class Function:
|
|
def __init__(self, name, exported=True):
|
|
self.name = name
|
|
self.exported = exported # TODO: Use __all__!
|
|
self.statements = []
|
|
|
|
def generate(self):
|
|
return '(func {}\n {})'.format(
|
|
('(export "{}")' if self.exported else '${}').format(self.name),
|
|
'\n '.join(x.generate() for x in self.statements),
|
|
)
|
|
|
|
class Module:
|
|
def __init__(self, imports = None, functions = None) -> None:
|
|
self.imports = imports or []
|
|
self.functions = functions or []
|
|
|
|
def generate(self):
|
|
return '(module\n {}\n {})'.format(
|
|
'\n '.join(x.generate() for x in self.imports),
|
|
'\n '.join(x.generate() for x in self.functions),
|
|
)
|