From 473cd0b6263c35370110468618ba932b9bf23498 Mon Sep 17 00:00:00 2001 From: "Johan B.W. de Vries" Date: Sat, 3 Apr 2021 12:45:13 +0200 Subject: [PATCH] cleanups [skip-ci] --- .gitignore | 2 ++ Makefile | 2 +- README.md | 4 ++++ compile.py | 27 +++++++++++++++++++++++++-- log.py | 5 +++-- 5 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 .gitignore create mode 100644 README.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..50765be --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.wasm +*.wat diff --git a/Makefile b/Makefile index 58bd1f5..7bbb8fb 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ %.wat: %.py compile.py - python3.8 compile.py $< > $@ + python3.8 compile.py $< $@ %.wasm: %.wat wat2wasm $^ -o $@ diff --git a/README.md b/README.md new file mode 100644 index 0000000..4fb6851 --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +webasm (python) +=============== + +You will need wat2wasm from github.com/WebAssembly/wabt in your path. diff --git a/compile.py b/compile.py index 6720a4a..2fcaf84 100644 --- a/compile.py +++ b/compile.py @@ -52,6 +52,28 @@ class Visitor(ast.NodeVisitor): )) def visit_FunctionDef(self, node): + if node.decorator_list: + # TODO: Support normal decorators + assert 1 == len(node.decorator_list) + call = node.decorator_list[0] + assert 'external' == call.func.id + assert 1 == len(call.args) + assert isinstance(call.args[0].value, str) + + import_ = Import( + call.args[0].value, + node.name, + node.name, + ) + + import_.params = [ + arg.annotation.id + for arg in node.args.args + ] + + self.imports.append(import_) + return + func = Function( node.name, ) @@ -116,7 +138,7 @@ class Visitor(ast.NodeVisitor): def err(msg: str) -> None: sys.stderr.write('{}\n'.format(msg)) -def main(source: str) -> int: +def main(source: str, sink: str) -> int: with open(source, 'r') as fil: code = fil.read() @@ -125,7 +147,8 @@ def main(source: str) -> int: visitor = Visitor() visitor.visit(res) - print(visitor.generate()) + with open(sink, 'w') as fil: + fil.write(visitor.generate()) return 0 diff --git a/log.py b/log.py index 85f29fd..6985c05 100644 --- a/log.py +++ b/log.py @@ -1,5 +1,6 @@ -from console import log as log -"log(i32)" +@external('console') +def log(msg: i32) -> None: + ... def logIt(): log(13 + 13 * 123)