phasm/py2wasm/wasm.py
Johan B.W. de Vries edd12e5b7c cleanup [skip-ci]
2021-04-04 16:32:56 +02:00

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),
)