diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-12-28 00:01:55 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-12-28 00:01:55 +0000 |
| commit | f201f908da4936453580a9e0c4ddf778363aabad (patch) | |
| tree | 30bd3bac7f9e9b542fea4b09a6e518478802c9a3 /src/test/java | |
| parent | 80a8f616dd9495619a74b1e920dae662d98b1ecb (diff) | |
Extract PatioToLlvmTests
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/backends/llvm/PatioToAmd64Tests.java | 75 | ||||
| -rw-r--r-- | src/test/java/org/shedlang/compiler/backends/llvm/PatioToLlvmTests.java | 79 |
2 files changed, 82 insertions, 72 deletions
diff --git a/src/test/java/org/shedlang/compiler/backends/llvm/PatioToAmd64Tests.java b/src/test/java/org/shedlang/compiler/backends/llvm/PatioToAmd64Tests.java index ede84e08..472100e9 100644 --- a/src/test/java/org/shedlang/compiler/backends/llvm/PatioToAmd64Tests.java +++ b/src/test/java/org/shedlang/compiler/backends/llvm/PatioToAmd64Tests.java @@ -1,77 +1,8 @@ package org.shedlang.compiler.backends.llvm; -import org.shedlang.compiler.backends.llvm.codegen.PatioToLlvm; -import org.shedlang.compiler.backends.llvm.codegen.PatioToLlvmGlobalContext; -import org.shedlang.compiler.backends.llvm.ir.ast.LlvmBasicBlock; -import org.shedlang.compiler.backends.llvm.ir.ast.LlvmFunctionDefinition; -import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmCall; -import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmReturn; -import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmTrunc; -import org.shedlang.compiler.backends.llvm.ir.ast.operands.LlvmVariableGlobal; -import org.shedlang.compiler.backends.llvm.ir.ast.operands.LlvmVariableLocal; -import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmTypes; -import org.shedlang.compiler.backends.paths.PartialTargetPath; -import org.shedlang.compiler.patio.PatioExampleTests; -import org.shedlang.compiler.patio.PatioCompilationUnit; -import org.shedlang.compiler.testing.ExecutionResult; -import org.shedlang.compiler.testing.TestProcessRunner; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.List; -import java.util.Optional; - -public class PatioToAmd64Tests extends PatioExampleTests { +public class PatioToAmd64Tests extends PatioToLlvmTests { @Override - protected ExecutionResult run(PatioCompilationUnit patio) throws IOException, InterruptedException { - var llvmModuleResult = PatioToLlvm.generateCompilationUnit( - patio, - PatioToLlvmGlobalContext.EMPTY - ); - var llvmModule = llvmModuleResult.value(); - - llvmModule = llvmModule.addTopLevelEntity(new LlvmFunctionDefinition( - "main", - LlvmTypes.INT_32, - List.of(), - List.of( - new LlvmBasicBlock( - Optional.empty(), - List.of( - new LlvmCall( - new LlvmVariableLocal("exitCode"), - LlvmTypes.INT_64, - new LlvmVariableGlobal(FUNCTION_NAME), - List.of() - ), - new LlvmTrunc( - new LlvmVariableLocal("exitCode32"), - LlvmTypes.INT_64, - new LlvmVariableLocal("exitCode"), - LlvmTypes.INT_32 - ) - ), - new LlvmReturn(LlvmTypes.INT_32, new LlvmVariableLocal("exitCode32")) - ) - ) - )); - - Files.createDirectories(Path.of("tests-tmp")); - var workingDirectory = Files.createTempDirectory(Path.of("tests-tmp"), "LlvmShidToPatio"); - - var objectFilePath = LlvmCompiler.compileLlvmModule( - llvmModule, - new PartialTargetPath(workingDirectory.resolve("main")) - ); - - var executablePath = workingDirectory.resolve("main"); - - LlvmBackend.forTarget(LlvmTarget.AMD64).link( - List.of(objectFilePath), - executablePath - ); - - return TestProcessRunner.runCaptureOutput(List.of(executablePath.toString())); + protected LlvmTarget llvmTarget() { + return LlvmTarget.AMD64; } } diff --git a/src/test/java/org/shedlang/compiler/backends/llvm/PatioToLlvmTests.java b/src/test/java/org/shedlang/compiler/backends/llvm/PatioToLlvmTests.java new file mode 100644 index 00000000..b364c0a2 --- /dev/null +++ b/src/test/java/org/shedlang/compiler/backends/llvm/PatioToLlvmTests.java @@ -0,0 +1,79 @@ +package org.shedlang.compiler.backends.llvm; + +import org.shedlang.compiler.backends.llvm.codegen.PatioToLlvm; +import org.shedlang.compiler.backends.llvm.codegen.PatioToLlvmGlobalContext; +import org.shedlang.compiler.backends.llvm.ir.ast.LlvmBasicBlock; +import org.shedlang.compiler.backends.llvm.ir.ast.LlvmFunctionDefinition; +import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmCall; +import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmReturn; +import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmTrunc; +import org.shedlang.compiler.backends.llvm.ir.ast.operands.LlvmVariableGlobal; +import org.shedlang.compiler.backends.llvm.ir.ast.operands.LlvmVariableLocal; +import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmTypes; +import org.shedlang.compiler.backends.paths.PartialTargetPath; +import org.shedlang.compiler.patio.PatioCompilationUnit; +import org.shedlang.compiler.patio.PatioExampleTests; +import org.shedlang.compiler.testing.ExecutionResult; +import org.shedlang.compiler.testing.TestProcessRunner; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.Optional; + +public abstract class PatioToLlvmTests extends PatioExampleTests { + @Override + protected ExecutionResult run(PatioCompilationUnit patio) throws IOException, InterruptedException { + var llvmModuleResult = PatioToLlvm.generateCompilationUnit( + patio, + PatioToLlvmGlobalContext.EMPTY + ); + var llvmModule = llvmModuleResult.value(); + + llvmModule = llvmModule.addTopLevelEntity(new LlvmFunctionDefinition( + "main", + LlvmTypes.INT_32, + List.of(), + List.of( + new LlvmBasicBlock( + Optional.empty(), + List.of( + new LlvmCall( + new LlvmVariableLocal("exitCode"), + LlvmTypes.INT_64, + new LlvmVariableGlobal(FUNCTION_NAME), + List.of() + ), + new LlvmTrunc( + new LlvmVariableLocal("exitCode32"), + LlvmTypes.INT_64, + new LlvmVariableLocal("exitCode"), + LlvmTypes.INT_32 + ) + ), + new LlvmReturn(LlvmTypes.INT_32, new LlvmVariableLocal("exitCode32")) + ) + ) + )); + + Files.createDirectories(Path.of("tests-tmp")); + var workingDirectory = Files.createTempDirectory(Path.of("tests-tmp"), "LlvmShidToPatio"); + + var objectFilePath = LlvmCompiler.compileLlvmModule( + llvmModule, + new PartialTargetPath(workingDirectory.resolve("main")) + ); + + var executablePath = workingDirectory.resolve("main"); + + LlvmBackend.forTarget(this.llvmTarget()).link( + List.of(objectFilePath), + executablePath + ); + + return TestProcessRunner.runCaptureOutput(List.of(executablePath.toString())); + } + + protected abstract LlvmTarget llvmTarget(); +} |
