diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-17 01:09:12 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-17 01:09:12 +0100 |
| commit | 80c1575e7f2956111f1d62dbba88396d0ca8cf29 (patch) | |
| tree | 8bcaa086912f65ea8ae34f53b6ab49e890af8acb /src/test/java | |
| parent | 0b00014f30a83ac1fd3b48e5df33d1afc57db21c (diff) | |
Expand function definition
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/backends/llvm/LlvmCompilerDefineFunctionTests.java | 49 |
1 files changed, 30 insertions, 19 deletions
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 f7e86765..5074cee8 100644 --- a/src/test/java/org/shedlang/compiler/backends/llvm/LlvmCompilerDefineFunctionTests.java +++ b/src/test/java/org/shedlang/compiler/backends/llvm/LlvmCompilerDefineFunctionTests.java @@ -1,7 +1,7 @@ package org.shedlang.compiler.backends.llvm; import org.junit.jupiter.api.Test; -import org.shedlang.compiler.backends.llvm.ir.ast.LlvmFunctionDefinition; +import org.shedlang.compiler.backends.llvm.ir.LlvmIrSerializer; import org.shedlang.compiler.backends.llvm.ir.ast.operands.LlvmOperand; import org.shedlang.compiler.sources.Sources; import org.shedlang.compiler.stackir.instructions.DefineFunctionInstruction; @@ -12,7 +12,8 @@ import java.util.List; import java.util.Map; import java.util.Set; -import static org.shedlang.compiler.backends.llvm.ir.ast.LlvmIrMatchers.*; +import static org.shedlang.compiler.backends.llvm.ir.ast.LlvmIrMatchers.isLlvmVariableLocal; +import static org.shedlang.compiler.util.Iterables.forEachInterspersed; import static org.zwobble.precisely.AssertThat.assertThat; import static org.zwobble.precisely.Matchers.*; @@ -34,24 +35,34 @@ public class LlvmCompilerDefineFunctionTests { var result = LlvmCompiler.compileInstruction(instruction, context); - assertThat(result.topLevelEntities(), isSequence( - instanceOf( - LlvmFunctionDefinition.class, - has("name", x -> x.name(), equalTo("shed__fun__f__0")), - has("returnType", x -> x.returnType(), equalTo(LlvmCompilerTypes.VALUE_TYPE)), - has("params", x -> x.params(), isSequence( - isLlvmParam(LlvmCompilerClosures.typeClosureEnvironmentPointer(), "shed__env__0") - )), - has("body", x -> x.body(), isSequence( - isLlvmBasicBlock( - isSequence(), - isLlvmReturn(LlvmCompilerTypes.VALUE_TYPE, isLlvmOperandInt(0)) - ) - )) - ) + var topLevelEntities = new StringBuilder(); + forEachInterspersed( + result.topLevelEntities(), + topLevelEntity -> LlvmIrSerializer.serializeTopLevelEntity(topLevelEntity, topLevelEntities), + () -> topLevelEntities.append("\n") + ); + assertThat(topLevelEntities.toString(), equalTo(""" + define i64 @shed__fun__f__0([0 x i64] * %shed__env__0) { + ret i64 0 + } + """)); + + var instructions = new StringBuilder(); + forEachInterspersed( + result.instructions(), + x -> LlvmIrSerializer.serializeInstruction(x, instructions), + () -> instructions.append("\n") + ); + assertThat(instructions.toString(), equalTo(""" + %size_ptr__0 = getelementptr {i64 ([0 x i64] *) *, [0 x i64]}, ptr null, i64 0 + %size__0 = ptrtoint {i64 ([0 x i64] *) *, [0 x i64]} * %size_ptr__0 to i64 + %closurePointer__0 = call {i64 ([0 x i64] *) *, [0 x i64]} * @shed__runtime__alloc(i64 %size__0) + %closureFunctionPointerPointer__0 = getelementptr {i64 ([0 x i64] *) *, [0 x i64]}, ptr %closurePointer__0, i64 0, i32 0 + store i64 ([0 x i64] *) * @shed__fun__f__0, i64 ([0 x i64] *) * * %closureFunctionPointerPointer__0""")); + + assertThat(result.stack(), isSequence( + isLlvmVariableLocal("closurePointer__0") )); - assertThat(result.instructions(), isSequence()); - assertThat(result.stack(), isSequence()); assertThat(result.locals().entrySet(), isSequence()); } |
