prog8/compiler/test/helpers/compileXyz.kt

65 lines
2.0 KiB
Kotlin
Raw Normal View History

package prog8tests.helpers
2022-09-27 14:32:44 +00:00
import prog8.code.core.ICompilationTarget
import prog8.code.core.IErrorReporter
2021-10-29 03:28:02 +00:00
import prog8.compiler.CompilationResult
2021-11-30 00:40:21 +00:00
import prog8.compiler.CompilerArguments
2021-10-29 03:28:02 +00:00
import prog8.compiler.compileProgram
2021-10-10 22:22:04 +00:00
import java.nio.file.Path
import kotlin.io.path.name
internal fun compileFile(
platform: ICompilationTarget,
optimize: Boolean,
fileDir: Path,
fileName: String,
2022-06-26 16:51:03 +00:00
outputDir: Path = prog8tests.helpers.outputDir,
errors: IErrorReporter? = null,
writeAssembly: Boolean = true,
2023-03-18 23:24:05 +00:00
optFloatExpr: Boolean = true,
useRPN: Boolean = false
2022-03-07 20:41:12 +00:00
) : CompilationResult? {
val filepath = fileDir.resolve(fileName)
2022-06-26 16:51:03 +00:00
assumeReadableFile(filepath)
2021-11-30 00:40:21 +00:00
val args = CompilerArguments(
filepath,
optimize,
optimizeFloatExpressions = optFloatExpr,
writeAssembly = writeAssembly,
slowCodegenWarnings = false,
quietAssembler = true,
asmListfile = false,
experimentalCodegen = false,
varsHigh = false,
2023-03-18 23:24:05 +00:00
useRPN = useRPN,
platform.name,
evalStackBaseAddress = null,
symbolDefs = emptyMap(),
2021-11-30 00:40:21 +00:00
outputDir = outputDir,
2021-10-29 14:46:56 +00:00
errors = errors ?: ErrorReporterForTests()
)
2021-11-30 00:40:21 +00:00
return compileProgram(args)
}
/**
* Takes a [sourceText] as a String, writes it to a temporary
* file and then runs the compiler on that.
* @see compileFile
*/
internal fun compileText(
platform: ICompilationTarget,
optimize: Boolean,
sourceText: String,
errors: IErrorReporter? = null,
writeAssembly: Boolean = true,
2023-03-18 23:24:05 +00:00
optFloatExpr: Boolean = true,
useRPN: Boolean = false
2022-03-07 20:41:12 +00:00
) : CompilationResult? {
2022-06-26 16:51:03 +00:00
val filePath = outputDir.resolve("on_the_fly_test_" + sourceText.hashCode().toUInt().toString(16) + ".p8")
// we don't assumeNotExists(filePath) - should be ok to just overwrite it
filePath.toFile().writeText(sourceText)
return compileFile(platform, optimize, filePath.parent, filePath.name,
2023-03-18 23:24:05 +00:00
errors=errors, writeAssembly=writeAssembly, optFloatExpr = optFloatExpr, useRPN=useRPN)
}