aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/src/patio_test/patio_test.c6
-rw-r--r--src/test/java/org/shedlang/compiler/backends/wasm/PatioToWasmTests.java7
-rw-r--r--src/test/java/org/shedlang/compiler/patio/PatioExampleTests.java34
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)