aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-17 22:04:38 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-17 22:07:09 +0100
commit5966b8fbed429454f9de6756fc0cb54cb9d0aafa (patch)
tree56aa8502d302c2bcb7d6f0b0ee59842bb54a928d /src/test/java
parentabf18334f1f598230e69109f43a4a601b4f571a3 (diff)
Load free variables from closure
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/backends/llvm/LlvmCompilerCallTests.java28
-rw-r--r--src/test/java/org/shedlang/compiler/backends/llvm/LlvmCompilerDefineFunctionTests.java8
2 files changed, 10 insertions, 26 deletions
diff --git a/src/test/java/org/shedlang/compiler/backends/llvm/LlvmCompilerCallTests.java b/src/test/java/org/shedlang/compiler/backends/llvm/LlvmCompilerCallTests.java
index 348fac2e..39c05179 100644
--- a/src/test/java/org/shedlang/compiler/backends/llvm/LlvmCompilerCallTests.java
+++ b/src/test/java/org/shedlang/compiler/backends/llvm/LlvmCompilerCallTests.java
@@ -49,24 +49,14 @@ public class LlvmCompilerCallTests {
has("pointer", x -> x.pointer(), isLlvmVariableLocal("closureFunctionPointerPointer__0"))
),
instanceOf(
- LlvmGetElementPtr.class,
- has("target", x -> x.target(), isLlvmVariableLocal("closureEnvironmentPointer__0")),
- has("pointerType", x -> x.pointerType(), equalTo(LlvmCompilerClosures.CALLABLE_TYPES.closurePointer())),
- has("pointer", x -> x.pointer(), isLlvmVariableLocal("closurePointer__0")),
- has("indexes", x -> x.indexes(), isSequence(
- isLlvmTypedOperand(LlvmTypes.INT_64, isLlvmOperandInt(0)),
- isLlvmTypedOperand(LlvmTypes.INT_32, isLlvmOperandInt(1))
- ))
- ),
- instanceOf(
LlvmCall.class,
has("target", x -> x.target(), isLlvmVariableLocal("tmp__0")),
has("returnType", x -> x.returnType(), equalTo(LlvmCompilerTypes.VALUE_TYPE)),
has("functionPointer", x -> x.functionPointer(), isLlvmVariableLocal("closureFunctionPointer__0")),
has("args", x -> x.args(), isSequence(
isLlvmTypedOperand(
- LlvmCompilerClosures.CALLABLE_TYPES.closureEnvironmentPointer(),
- isLlvmVariableLocal("closureEnvironmentPointer__0")
+ LlvmCompilerClosures.CALLABLE_TYPES.closurePointer(),
+ isLlvmVariableLocal("closurePointer__0")
)
))
)
@@ -114,24 +104,14 @@ public class LlvmCompilerCallTests {
has("pointer", x -> x.pointer(), isLlvmVariableLocal("closureFunctionPointerPointer__0"))
),
instanceOf(
- LlvmGetElementPtr.class,
- has("target", x -> x.target(), isLlvmVariableLocal("closureEnvironmentPointer__0")),
- has("pointerType", x -> x.pointerType(), equalTo(LlvmCompilerClosures.CALLABLE_TYPES.closurePointer())),
- has("pointer", x -> x.pointer(), isLlvmVariableLocal("closurePointer__0")),
- has("indexes", x -> x.indexes(), isSequence(
- isLlvmTypedOperand(LlvmTypes.INT_64, isLlvmOperandInt(0)),
- isLlvmTypedOperand(LlvmTypes.INT_32, isLlvmOperandInt(1))
- ))
- ),
- instanceOf(
LlvmCall.class,
has("target", x -> x.target(), isLlvmVariableLocal("tmp__0")),
has("returnType", x -> x.returnType(), equalTo(LlvmCompilerTypes.VALUE_TYPE)),
has("functionPointer", x -> x.functionPointer(), isLlvmVariableLocal("closureFunctionPointer__0")),
has("args", x -> x.args(), isSequence(
isLlvmTypedOperand(
- LlvmCompilerClosures.CALLABLE_TYPES.closureEnvironmentPointer(),
- isLlvmVariableLocal("closureEnvironmentPointer__0")
+ LlvmCompilerClosures.CALLABLE_TYPES.closurePointer(),
+ isLlvmVariableLocal("closurePointer__0")
),
isLlvmTypedOperand(LlvmCompilerTypes.VALUE_TYPE, isLlvmVariableLocal("positional1")),
isLlvmTypedOperand(LlvmCompilerTypes.VALUE_TYPE, isLlvmVariableLocal("positional2")),
diff --git a/src/test/java/org/shedlang/compiler/backends/llvm/LlvmCompilerDefineFunctionTests.java b/src/test/java/org/shedlang/compiler/backends/llvm/LlvmCompilerDefineFunctionTests.java
index 1f4e154f..9882a7af 100644
--- a/src/test/java/org/shedlang/compiler/backends/llvm/LlvmCompilerDefineFunctionTests.java
+++ b/src/test/java/org/shedlang/compiler/backends/llvm/LlvmCompilerDefineFunctionTests.java
@@ -43,7 +43,7 @@ public class LlvmCompilerDefineFunctionTests {
() -> topLevelEntities.append("\n")
);
assertThat(topLevelEntities.toString(), equalTo("""
- define i64 @shed__fun__f__0(ptr %shed__env__0) {
+ define i64 @shed__fun__f__0(ptr %closurePointer__0) {
ret i64 0
}
"""));
@@ -94,7 +94,11 @@ public class LlvmCompilerDefineFunctionTests {
() -> topLevelEntities.append("\n")
);
assertThat(topLevelEntities.toString(), equalTo("""
- define i64 @shed__fun__f__0(ptr %shed__env__0) {
+ define i64 @shed__fun__f__0(ptr %closurePointer__0) {
+ %closureFreeVariablePointer__a__0 = getelementptr {ptr, [2 x i64]}, ptr %closurePointer__0, i64 0, i32 1, i64 0
+ %closureFreeVariable__a__0 = load i64, ptr %closureFreeVariablePointer__a__0
+ %closureFreeVariablePointer__b__0 = getelementptr {ptr, [2 x i64]}, ptr %closurePointer__0, i64 0, i32 1, i64 1
+ %closureFreeVariable__b__0 = load i64, ptr %closureFreeVariablePointer__b__0
ret i64 0
}
"""));