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.params = [] 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 {})\n'.format( '\n '.join(x.generate() for x in self.imports), '\n '.join(x.generate() for x in self.functions), )