Various updates to bring the project uptodate. - Updated required packages - Removed runtimes that are not being updated - wasmtime is for now the only supported runtime - Implements imports for wasmtime runtime - Fixes a memory access bug for wasmtime runtime - compile_wasm is now optional - runtimes have to implement and call this themselves - Typing fixes - Linting fixes
57 lines
1.6 KiB
Python
57 lines
1.6 KiB
Python
import sys
|
|
|
|
import pytest
|
|
|
|
from ..helpers import write_header
|
|
from ..runners import RunnerWasmtime as Runner
|
|
|
|
|
|
def setup_interpreter(phash_code: str) -> Runner:
|
|
runner = Runner(phash_code)
|
|
|
|
runner.parse()
|
|
runner.compile_ast()
|
|
runner.compile_wat()
|
|
runner.interpreter_setup()
|
|
runner.interpreter_load()
|
|
|
|
write_header(sys.stderr, 'Phasm')
|
|
runner.dump_phasm_code(sys.stderr)
|
|
write_header(sys.stderr, 'Assembly')
|
|
runner.dump_wasm_wat(sys.stderr)
|
|
|
|
return runner
|
|
|
|
@pytest.mark.integration_test
|
|
def test___alloc___ok():
|
|
code_py = """
|
|
@exported
|
|
def testEntry() -> u8:
|
|
return 13
|
|
"""
|
|
|
|
runner = setup_interpreter(code_py)
|
|
|
|
write_header(sys.stderr, 'Memory (pre run)')
|
|
runner.interpreter_dump_memory(sys.stderr)
|
|
|
|
offset0 = runner.call('stdlib.alloc.__alloc__', 32)
|
|
offset1 = runner.call('stdlib.alloc.__alloc__', 32)
|
|
offset2 = runner.call('stdlib.alloc.__alloc__', 32)
|
|
|
|
write_header(sys.stderr, 'Memory (post run)')
|
|
runner.interpreter_dump_memory(sys.stderr)
|
|
|
|
assert (
|
|
b'\xC0\xA1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7C\x00\x00\x00'
|
|
b'\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
|
|
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
|
|
b'\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
|
|
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
|
|
b'\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00'
|
|
) == runner.interpreter_read_memory(0, 0x60)
|
|
|
|
assert 0x14 == offset0
|
|
assert 0x38 == offset1
|
|
assert 0x5C == offset2
|