diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-17 22:04:38 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-17 22:07:09 +0100 |
| commit | 5966b8fbed429454f9de6756fc0cb54cb9d0aafa (patch) | |
| tree | 56aa8502d302c2bcb7d6f0b0ee59842bb54a928d /src/test/java | |
| parent | abf18334f1f598230e69109f43a4a601b4f571a3 (diff) | |
Load free variables from closure
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/backends/llvm/LlvmCompilerCallTests.java | 28 | ||||
| -rw-r--r-- | src/test/java/org/shedlang/compiler/backends/llvm/LlvmCompilerDefineFunctionTests.java | 8 |
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 } """)); |
