diff options
3 files changed, 44 insertions, 3 deletions
diff --git a/runtime/src/patio_test/patio_test.c b/runtime/src/patio_test/patio_test.c index 57a78543..35dddb83 100644 --- a/runtime/src/patio_test/patio_test.c +++ b/runtime/src/patio_test/patio_test.c @@ -1,9 +1,11 @@ +#include "../patio/patio.h" + +PatioInt patio__test__101 = 101; + #ifndef __wasm__ #include <stdio.h> -#include "../patio/patio.h" - void patio__test__emit_int(PatioInt value) { printf("%zd\n", value); } diff --git a/src/test/java/org/shedlang/compiler/backends/wasm/PatioToWasmTests.java b/src/test/java/org/shedlang/compiler/backends/wasm/PatioToWasmTests.java index 8ba247c8..946c49fb 100644 --- a/src/test/java/org/shedlang/compiler/backends/wasm/PatioToWasmTests.java +++ b/src/test/java/org/shedlang/compiler/backends/wasm/PatioToWasmTests.java @@ -47,8 +47,13 @@ public abstract class PatioToWasmTests extends PatioExampleTests { } var executablePath = workingDirectory.resolve("main.wasm"); + + var runtime = ShedRuntime.defaultRuntime(wasmTarget().targetName()); WasmBackend.forTarget(wasmTarget()).link( - List.of(objectPath), + List.of( + objectPath, + runtime.dir().resolve("libpatio_test.a") + ), executablePath, ShedRuntime.defaultRuntime(wasmTarget().targetName()) ); diff --git a/src/test/java/org/shedlang/compiler/patio/PatioExampleTests.java b/src/test/java/org/shedlang/compiler/patio/PatioExampleTests.java index 21811753..4d24fd5e 100644 --- a/src/test/java/org/shedlang/compiler/patio/PatioExampleTests.java +++ b/src/test/java/org/shedlang/compiler/patio/PatioExampleTests.java @@ -184,6 +184,40 @@ public abstract class PatioExampleTests { } @Test + public void canLoadFromMutableDataElementDeclaration() throws IOException, InterruptedException { + var patioDataElement = new PatioDataElementMutableDeclaration( + "patio__test__101", + PatioDataLayouts.INT32, + Sources.NULL + ); + var patioFunction = PatioFunctionDefinition.builder() + .withName(FUNCTION_NAME) + .withReturnType(PatioTypes.VOID) + .addLocal(Patio.val("x", PatioTypes.INT)) + .addBodyInstruction(Patio.memoryLoad( + Patio.localRef("x"), + Patio.dataPtrConst("patio__test__101"), + PatioDataLayouts.INT, + List.of() + )) + .addBodyInstruction(emitInt( + Patio.localRef("x") + )) + .addBodyInstruction(Patio.returnVoid()) + .build(); + var patio = Patio.compilationUnit(List.of( + patioDataElement, + patioFunction + )); + + var result = run(patio); + + assertThat(result, isSequence( + isInt(101) + )); + } + + @Test public void dataPtrCanBeNull() throws IOException, InterruptedException { var patioFunction = PatioFunctionDefinition.builder() .withName(FUNCTION_NAME) |
