From d12b7ccc6b39b8466adf6b6d49a93a540f0b5da2 Mon Sep 17 00:00:00 2001 From: Irmen de Jong Date: Mon, 19 Aug 2024 13:31:06 +0200 Subject: [PATCH] fix syslib importing for raw outputs. fixes #144 --- .../src/prog8/code/core/IMachineDefinition.kt | 1 - .../target/atari/AtariMachineDefinition.kt | 7 ------ .../code/target/c128/C128MachineDefinition.kt | 7 ------ .../code/target/c64/C64MachineDefinition.kt | 7 ------ .../code/target/cx16/CX16MachineDefinition.kt | 7 ------ .../code/target/pet/PETMachineDefinition.kt | 7 ------ .../virtual/VirtualMachineDefinition.kt | 4 --- compiler/src/prog8/compiler/Compiler.kt | 5 ++-- .../test/codegeneration/TestVariousCodeGen.kt | 25 ++++++++++++++++--- 9 files changed, 24 insertions(+), 46 deletions(-) diff --git a/codeCore/src/prog8/code/core/IMachineDefinition.kt b/codeCore/src/prog8/code/core/IMachineDefinition.kt index 7e8b54b11..be18c1f18 100644 --- a/codeCore/src/prog8/code/core/IMachineDefinition.kt +++ b/codeCore/src/prog8/code/core/IMachineDefinition.kt @@ -29,7 +29,6 @@ interface IMachineDefinition { fun convertFloatToBytes(num: Double): List fun convertBytesToFloat(bytes: List): Double - fun importLibs(compilerOptions: CompilationOptions, compilationTargetName: String): List fun launchEmulator(selectedEmulator: Int, programNameWithPath: Path) fun isIOAddress(address: UInt): Boolean } diff --git a/codeCore/src/prog8/code/target/atari/AtariMachineDefinition.kt b/codeCore/src/prog8/code/target/atari/AtariMachineDefinition.kt index 60c54dd94..6ca5f1194 100644 --- a/codeCore/src/prog8/code/target/atari/AtariMachineDefinition.kt +++ b/codeCore/src/prog8/code/target/atari/AtariMachineDefinition.kt @@ -25,13 +25,6 @@ class AtariMachineDefinition: IMachineDefinition { override fun convertFloatToBytes(num: Double): List = TODO("atari float to bytes") override fun convertBytesToFloat(bytes: List): Double = TODO("atari bytes to float") - override fun importLibs(compilerOptions: CompilationOptions, compilationTargetName: String): List { - return if (compilerOptions.output == OutputType.XEX) - listOf("syslib") - else - emptyList() - } - override fun launchEmulator(selectedEmulator: Int, programNameWithPath: Path) { val emulatorName: String val cmdline: List diff --git a/codeCore/src/prog8/code/target/c128/C128MachineDefinition.kt b/codeCore/src/prog8/code/target/c128/C128MachineDefinition.kt index 975a60008..a3d58d3ca 100644 --- a/codeCore/src/prog8/code/target/c128/C128MachineDefinition.kt +++ b/codeCore/src/prog8/code/target/c128/C128MachineDefinition.kt @@ -36,13 +36,6 @@ class C128MachineDefinition: IMachineDefinition { return m5.toDouble() } - override fun importLibs(compilerOptions: CompilationOptions, compilationTargetName: String): List { - return if (compilerOptions.launcher == CbmPrgLauncherType.BASIC || compilerOptions.output == OutputType.PRG) - listOf("syslib") - else - emptyList() - } - override fun launchEmulator(selectedEmulator: Int, programNameWithPath: Path) { if(selectedEmulator!=1) { System.err.println("The c128 target only supports the main emulator (Vice).") diff --git a/codeCore/src/prog8/code/target/c64/C64MachineDefinition.kt b/codeCore/src/prog8/code/target/c64/C64MachineDefinition.kt index a5e4db8a6..616a5760e 100644 --- a/codeCore/src/prog8/code/target/c64/C64MachineDefinition.kt +++ b/codeCore/src/prog8/code/target/c64/C64MachineDefinition.kt @@ -37,13 +37,6 @@ class C64MachineDefinition: IMachineDefinition { return m5.toDouble() } - override fun importLibs(compilerOptions: CompilationOptions, compilationTargetName: String): List { - return if (compilerOptions.launcher == CbmPrgLauncherType.BASIC || compilerOptions.output == OutputType.PRG) - listOf("syslib") - else - emptyList() - } - override fun launchEmulator(selectedEmulator: Int, programNameWithPath: Path) { if(selectedEmulator!=1) { System.err.println("The c64 target only supports the main emulator (Vice).") diff --git a/codeCore/src/prog8/code/target/cx16/CX16MachineDefinition.kt b/codeCore/src/prog8/code/target/cx16/CX16MachineDefinition.kt index 1ac80d1d8..8530e3c97 100644 --- a/codeCore/src/prog8/code/target/cx16/CX16MachineDefinition.kt +++ b/codeCore/src/prog8/code/target/cx16/CX16MachineDefinition.kt @@ -36,13 +36,6 @@ class CX16MachineDefinition: IMachineDefinition { return m5.toDouble() } - override fun importLibs(compilerOptions: CompilationOptions, compilationTargetName: String): List { - return if (compilerOptions.launcher == CbmPrgLauncherType.BASIC || compilerOptions.output == OutputType.PRG) - listOf("syslib") - else - emptyList() - } - override fun launchEmulator(selectedEmulator: Int, programNameWithPath: Path) { val emulator: String val extraArgs: List diff --git a/codeCore/src/prog8/code/target/pet/PETMachineDefinition.kt b/codeCore/src/prog8/code/target/pet/PETMachineDefinition.kt index 66f2bd4e3..c9c7fd7bb 100644 --- a/codeCore/src/prog8/code/target/pet/PETMachineDefinition.kt +++ b/codeCore/src/prog8/code/target/pet/PETMachineDefinition.kt @@ -36,13 +36,6 @@ class PETMachineDefinition: IMachineDefinition { return m5.toDouble() } - override fun importLibs(compilerOptions: CompilationOptions, compilationTargetName: String): List { - return if (compilerOptions.launcher == CbmPrgLauncherType.BASIC || compilerOptions.output == OutputType.PRG) - listOf("syslib") - else - emptyList() - } - override fun launchEmulator(selectedEmulator: Int, programNameWithPath: Path) { if(selectedEmulator!=1) { System.err.println("The pet target only supports the main emulator (Vice).") diff --git a/codeCore/src/prog8/code/target/virtual/VirtualMachineDefinition.kt b/codeCore/src/prog8/code/target/virtual/VirtualMachineDefinition.kt index 7d2b2dbfb..54308d7c5 100644 --- a/codeCore/src/prog8/code/target/virtual/VirtualMachineDefinition.kt +++ b/codeCore/src/prog8/code/target/virtual/VirtualMachineDefinition.kt @@ -50,10 +50,6 @@ class VirtualMachineDefinition: IMachineDefinition { return Double.fromBits(b0 or b1 or b2 or b3 or b4 or b5 or b6 or b7) } - override fun importLibs(compilerOptions: CompilationOptions, compilationTargetName: String): List { - return listOf("syslib") - } - override fun launchEmulator(selectedEmulator: Int, programNameWithPath: Path) { println("\nStarting Virtual Machine...") // to not have external module dependencies in our own module, we launch the virtual machine via reflection diff --git a/compiler/src/prog8/compiler/Compiler.kt b/compiler/src/prog8/compiler/Compiler.kt index 463b53dcb..e813b525f 100644 --- a/compiler/src/prog8/compiler/Compiler.kt +++ b/compiler/src/prog8/compiler/Compiler.kt @@ -302,10 +302,9 @@ fun parseMainModule(filepath: Path, .filter { it.isFromFilesystem } .map { Path(it.origin) } val compilerOptions = determineCompilationOptions(program, compTarget) - // depending on the machine and compiler options we may have to include some libraries - for(lib in compTarget.machine.importLibs(compilerOptions, compTarget.name)) - importer.importImplicitLibraryModule(lib) + // import the default modules + importer.importImplicitLibraryModule("syslib") if(compilerOptions.compTarget.name!=VMTarget.NAME && !compilerOptions.experimentalCodegen) { importer.importImplicitLibraryModule("math") } diff --git a/compiler/test/codegeneration/TestVariousCodeGen.kt b/compiler/test/codegeneration/TestVariousCodeGen.kt index 0f9e83af0..627ca1d9e 100644 --- a/compiler/test/codegeneration/TestVariousCodeGen.kt +++ b/compiler/test/codegeneration/TestVariousCodeGen.kt @@ -11,9 +11,7 @@ import prog8.code.ast.PtAssignment import prog8.code.ast.PtBinaryExpression import prog8.code.ast.PtVariable import prog8.code.core.DataType -import prog8.code.target.C64Target -import prog8.code.target.Cx16Target -import prog8.code.target.VMTarget +import prog8.code.target.* import prog8tests.helpers.ErrorReporterForTests import prog8tests.helpers.compileText import kotlin.io.path.readText @@ -364,4 +362,25 @@ main { assembly shouldContain "inlined routine follows: pop" assembly shouldContain "inlined routine follows: popw" } + + test("syslib correctly available for raw outputs") { + val text = """ +%output raw +%launcher none +%address ${'$'}2000 + +main { + sub start() { + cx16.r0++ + sys.clear_carry() + } +} +""" + compileText(Cx16Target(), false, text, writeAssembly = true) shouldNotBe null + compileText(C64Target(), false, text, writeAssembly = true) shouldNotBe null + compileText(C128Target(), false, text, writeAssembly = true) shouldNotBe null + compileText(PETTarget(), false, text, writeAssembly = true) shouldNotBe null + compileText(AtariTarget(), false, text, writeAssembly = true) shouldNotBe null + compileText(VMTarget(), false, text, writeAssembly = true) shouldNotBe null + } }) \ No newline at end of file