From 9dbdb1173267962a4070263b32e0b13679886b28 Mon Sep 17 00:00:00 2001 From: "Johan B.W. de Vries" Date: Sun, 19 Jun 2022 15:25:58 +0200 Subject: [PATCH] Simple calls --- py2wasm/compiler.py | 7 +++++++ tests/integration/test_simple.py | 17 +++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/py2wasm/compiler.py b/py2wasm/compiler.py index 72a87a3..355e4b4 100644 --- a/py2wasm/compiler.py +++ b/py2wasm/compiler.py @@ -82,6 +82,13 @@ def expression(inp: ourlang.Expression) -> Statements: raise NotImplementedError(expression, inp.type, inp.operator) + if isinstance(inp, ourlang.FunctionCall): + for arg in inp.arguments: + yield from expression(arg) + + yield wasm.Statement('call', '${}'.format(inp.function.name)) + return + raise NotImplementedError(expression, inp) def statement_return(inp: ourlang.StatementReturn) -> Statements: diff --git a/tests/integration/test_simple.py b/tests/integration/test_simple.py index f54a715..97cd31b 100644 --- a/tests/integration/test_simple.py +++ b/tests/integration/test_simple.py @@ -225,6 +225,23 @@ def helper(left: i32, right: i32) -> i32: assert 7 == result.returned_value assert [] == result.log_int32_list +@pytest.mark.integration_test +@pytest.mark.parametrize('type_', ['i32', 'i64', 'f32', 'f64']) +def test_call_with_expression(type_): + code_py = f""" +@exported +def testEntry() -> {type_}: + return helper(10 + 20, 3 + 5) + +def helper(left: {type_}, right: {type_}) -> {type_}: + return left - right +""" + + result = Suite(code_py, 'test_call').run_code() + + assert 22 == result.returned_value + assert TYPE_MAP[type_] == type(result.returned_value) + @pytest.mark.integration_test @pytest.mark.skip('Not yet implemented') def test_assign():