mirror of
https://github.com/irmen/prog8.git
synced 2025-02-16 22:30:46 +00:00
This reverts commit 690782bf. It was too risky, using vera (especially fx) transparently in multiple places especially perhaps in IRQ handlers will create havoc unless much intricate care is taken to save/restore the vera state. Better to do vera fx explicitly where the programmer has full control.
60 lines
1.8 KiB
Kotlin
60 lines
1.8 KiB
Kotlin
package prog8tests.helpers
|
|
|
|
import prog8.code.core.ICompilationTarget
|
|
import prog8.code.core.IErrorReporter
|
|
import prog8.compiler.CompilationResult
|
|
import prog8.compiler.CompilerArguments
|
|
import prog8.compiler.compileProgram
|
|
import java.nio.file.Path
|
|
import kotlin.io.path.name
|
|
|
|
|
|
internal fun compileFile(
|
|
platform: ICompilationTarget,
|
|
optimize: Boolean,
|
|
fileDir: Path,
|
|
fileName: String,
|
|
outputDir: Path = prog8tests.helpers.outputDir,
|
|
errors: IErrorReporter? = null,
|
|
writeAssembly: Boolean = true,
|
|
) : CompilationResult? {
|
|
val filepath = fileDir.resolve(fileName)
|
|
assumeReadableFile(filepath)
|
|
val args = CompilerArguments(
|
|
filepath,
|
|
optimize,
|
|
writeAssembly = writeAssembly,
|
|
warnSymbolShadowing = false,
|
|
quietAssembler = true,
|
|
asmListfile = false,
|
|
includeSourcelines = false,
|
|
experimentalCodegen = false,
|
|
varsHighBank = null,
|
|
platform.name,
|
|
symbolDefs = emptyMap(),
|
|
outputDir = outputDir,
|
|
errors = errors ?: ErrorReporterForTests(),
|
|
splitWordArrays = false
|
|
)
|
|
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,
|
|
) : CompilationResult? {
|
|
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,
|
|
errors=errors, writeAssembly=writeAssembly)
|
|
}
|