From e75d0c58a98fcc08d8731c3dcd17934cbd35f5a0 Mon Sep 17 00:00:00 2001 From: Irmen de Jong Date: Thu, 10 Mar 2022 23:08:41 +0100 Subject: [PATCH] reducing dependencies --- codeAst/build.gradle | 42 +++++++++++++++++++ .../src/prog8/code}/SymbolTable.kt | 13 +++--- codeAst/src/prog8/code/ast/AstBase.kt | 2 +- codeCore/build.gradle | 41 ++++++++++++++++++ codeCore/src/prog8/code/core/Enumerations.kt | 21 ++++++++++ .../src/prog8/code/core}/Exceptions.kt | 6 +-- .../src/prog8/code/core/IAssemblyGenerator.kt | 23 ++++++++++ .../src/prog8/code/core}/IErrorReporter.kt | 7 +--- codeGenCpu6502/build.gradle | 4 +- codeGenCpu6502/codeGenCpu6502.iml | 3 +- .../src/prog8/codegen/cpu6502/AsmGen.kt | 1 + .../prog8/codegen/cpu6502/AssemblyProgram.kt | 3 +- .../codegen/cpu6502/BuiltinFunctionsAsmGen.kt | 2 +- .../codegen/cpu6502/ExpressionsAsmGen.kt | 2 +- .../prog8/codegen/cpu6502/ForLoopsAsmGen.kt | 2 +- .../codegen/cpu6502/FunctionCallAsmGen.kt | 2 +- .../codegen/cpu6502/PostIncrDecrAsmGen.kt | 2 +- .../codegen/cpu6502/ProgramAndVarsGen.kt | 1 + .../codegen/cpu6502/VariableAllocator.kt | 10 ++--- .../cpu6502/assignment/AsmAssignment.kt | 2 +- .../cpu6502/assignment/AssignmentAsmGen.kt | 2 +- .../assignment/AugmentableAssignmentAsmGen.kt | 2 +- codeGenExperimental6502/build.gradle | 3 +- .../codeGenExperimental6502.iml | 2 +- .../prog8/codegen/experimental6502/AsmGen.kt | 17 +++++++- .../experimental6502/AssemblyProgram.kt | 6 +-- codeGenTargets/build.gradle | 3 +- .../src/prog8/codegen/target/Encoder.kt | 2 +- .../target/atari/AtariMachineDefinition.kt | 2 + .../codegen/target/atari/AtariZeropage.kt | 4 +- .../target/c128/C128MachineDefinition.kt | 3 ++ .../prog8/codegen/target/c128/C128Zeropage.kt | 5 ++- .../target/c64/C64MachineDefinition.kt | 3 ++ .../prog8/codegen/target/c64/C64Zeropage.kt | 5 ++- .../src/prog8/codegen/target/cbm/Mflpt5.kt | 2 +- .../target/cx16/CX16MachineDefinition.kt | 3 ++ .../prog8/codegen/target/cx16/CX16Zeropage.kt | 4 +- codeOptimizers/build.gradle | 1 + codeOptimizers/codeOptimizers.iml | 4 +- .../optimizer/ConstantIdentifierReplacer.kt | 4 +- .../prog8/optimizer/ExpressionSimplifier.kt | 2 +- .../src/prog8/optimizer/Extensions.kt | 2 +- .../src/prog8/optimizer/StatementOptimizer.kt | 8 ++-- .../src/prog8/optimizer/UnusedCodeRemover.kt | 2 +- compiler/build.gradle | 2 + compiler/compiler.iml | 13 +++--- compiler/src/prog8/CompilerMain.kt | 2 +- compiler/src/prog8/compiler/Compiler.kt | 21 ++++++++-- compiler/src/prog8/compiler/ErrorReporter.kt | 2 +- compiler/src/prog8/compiler/ModuleImporter.kt | 2 +- .../compiler/astprocessing/AstExtensions.kt | 2 +- .../astprocessing/AstIdentifiersChecker.kt | 2 +- .../compiler/astprocessing/AstPreprocessor.kt | 4 +- .../astprocessing/BeforeAsmAstChanger.kt | 4 +- .../astprocessing/BeforeAsmTypecastCleaner.kt | 2 +- .../compiler/astprocessing/CodeDesugarer.kt | 2 +- .../astprocessing/LiteralsToAutoVars.kt | 5 ++- .../astprocessing/StatementReorderer.kt | 2 +- .../astprocessing/SymbolTableMaker.kt | 2 +- .../compiler/astprocessing/TypecastsAdder.kt | 2 +- .../compiler/astprocessing/VariousCleanups.kt | 2 +- .../astprocessing/VerifyFunctionArgTypes.kt | 2 +- compiler/test/ModuleImporterTests.kt | 2 +- .../TestImportedModulesOrderAndOptions.kt | 2 +- compiler/test/TestNumbers.kt | 2 +- compiler/test/TestOptimization.kt | 6 +-- compiler/test/TestSymbolTable.kt | 2 +- compiler/test/ZeropageTests.kt | 2 +- .../test/codegeneration/TestAsmGenSymbols.kt | 7 +--- .../test/helpers/ErrorReporterForTests.kt | 5 ++- compiler/test/helpers/compileXyz.kt | 1 + compilerAst/build.gradle | 1 + compilerAst/compilerAst.iml | 2 +- compilerInterfaces/build.gradle | 1 + compilerInterfaces/compilerInterfaces.iml | 2 +- .../src/prog8/compilerinterface/CallGraph.kt | 1 + .../compilerinterface/CompilationOptions.kt | 21 ++-------- .../compilerinterface/IAssemblyGenerator.kt | 13 ------ .../src/prog8/compilerinterface/Zeropage.kt | 3 +- dbusCompilerService/build.gradle | 1 + dbusCompilerService/dbusCompilerService.iml | 1 + docs/source/todo.rst | 4 -- httpCompilerService/build.gradle | 1 + httpCompilerService/httpCompilerService.iml | 3 +- settings.gradle | 4 +- 85 files changed, 292 insertions(+), 148 deletions(-) create mode 100644 codeAst/build.gradle rename {compilerInterfaces/src/prog8/compilerinterface => codeAst/src/prog8/code}/SymbolTable.kt (95%) create mode 100644 codeCore/build.gradle rename {compilerInterfaces/src/prog8/compilerinterface => codeCore/src/prog8/code/core}/Exceptions.kt (58%) create mode 100644 codeCore/src/prog8/code/core/IAssemblyGenerator.kt rename {compilerInterfaces/src/prog8/compilerinterface => codeCore/src/prog8/code/core}/IErrorReporter.kt (61%) delete mode 100644 compilerInterfaces/src/prog8/compilerinterface/IAssemblyGenerator.kt diff --git a/codeAst/build.gradle b/codeAst/build.gradle new file mode 100644 index 000000000..76e25e62d --- /dev/null +++ b/codeAst/build.gradle @@ -0,0 +1,42 @@ + +plugins { + id 'java' + id 'application' + id "org.jetbrains.kotlin.jvm" +} + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(javaVersion) + } +} + +compileKotlin { + kotlinOptions { + jvmTarget = javaVersion + } +} + +compileTestKotlin { + kotlinOptions { + jvmTarget = javaVersion + } +} + +dependencies { + implementation project(':codeCore') + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" +} + +sourceSets { + main { + java { + srcDirs = ["${project.projectDir}/src"] + } + resources { + srcDirs = ["${project.projectDir}/res"] + } + } +} + +// note: there are no unit tests in this module! diff --git a/compilerInterfaces/src/prog8/compilerinterface/SymbolTable.kt b/codeAst/src/prog8/code/SymbolTable.kt similarity index 95% rename from compilerInterfaces/src/prog8/compilerinterface/SymbolTable.kt rename to codeAst/src/prog8/code/SymbolTable.kt index a6dee5e52..4fb6a987a 100644 --- a/compilerInterfaces/src/prog8/compilerinterface/SymbolTable.kt +++ b/codeAst/src/prog8/code/SymbolTable.kt @@ -1,4 +1,5 @@ -package prog8.compilerinterface +package prog8.code + import prog8.code.core.DataType import prog8.code.core.Encoding @@ -32,7 +33,7 @@ class SymbolTable : StNode("", StNodeType.GLOBAL, Position.DUMMY) { val vars = mutableListOf() fun collect(node: StNode) { for(child in node.children) { - if(child.value.type==StNodeType.STATICVAR) + if(child.value.type== StNodeType.STATICVAR) vars.add(child.value as StStaticVariable) else collect(child.value) @@ -93,7 +94,7 @@ open class StNode(val name: String, private fun lookupQualified(scopedName: List): StNode? { // a scoped name refers to a name in another namespace, and always stars from the root. var node = this - while(node.type!=StNodeType.GLOBAL) + while(node.type!= StNodeType.GLOBAL) node = node.parent for(name in scopedName) { @@ -108,10 +109,10 @@ open class StNode(val name: String, private fun lookupUnqualified(name: String): StNode? { // first consider the builtin functions var globalscope = this - while(globalscope.type!=StNodeType.GLOBAL) + while(globalscope.type!= StNodeType.GLOBAL) globalscope = globalscope.parent val globalNode = globalscope.children[name] - if(globalNode!=null && globalNode.type==StNodeType.BUILTINFUNC) + if(globalNode!=null && globalNode.type== StNodeType.BUILTINFUNC) return globalNode // search for the unqualified name in the current scope or its parent scopes @@ -120,7 +121,7 @@ open class StNode(val name: String, val node = scope.children[name] if(node!=null) return node - if(scope.type==StNodeType.GLOBAL) + if(scope.type== StNodeType.GLOBAL) return null else scope = scope.parent diff --git a/codeAst/src/prog8/code/ast/AstBase.kt b/codeAst/src/prog8/code/ast/AstBase.kt index a7d80c765..1bd8877bc 100644 --- a/codeAst/src/prog8/code/ast/AstBase.kt +++ b/codeAst/src/prog8/code/ast/AstBase.kt @@ -4,7 +4,7 @@ import prog8.code.core.IMemSizer import prog8.code.core.IStringEncoding import prog8.code.core.Position - +// New (work-in-progress) simplified AST for the code generator. // TODO : once the CodeGen doesn't need the old Ast anymore, get rid of the 'Pt' prefixes ? diff --git a/codeCore/build.gradle b/codeCore/build.gradle new file mode 100644 index 000000000..e10b94335 --- /dev/null +++ b/codeCore/build.gradle @@ -0,0 +1,41 @@ + +plugins { + id 'java' + id 'application' + id "org.jetbrains.kotlin.jvm" +} + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(javaVersion) + } +} + +compileKotlin { + kotlinOptions { + jvmTarget = javaVersion + } +} + +compileTestKotlin { + kotlinOptions { + jvmTarget = javaVersion + } +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" +} + +sourceSets { + main { + java { + srcDirs = ["${project.projectDir}/src"] + } + resources { + srcDirs = ["${project.projectDir}/res"] + } + } +} + +// note: there are no unit tests in this module! diff --git a/codeCore/src/prog8/code/core/Enumerations.kt b/codeCore/src/prog8/code/core/Enumerations.kt index baff17b9e..8272557c9 100644 --- a/codeCore/src/prog8/code/core/Enumerations.kt +++ b/codeCore/src/prog8/code/core/Enumerations.kt @@ -151,3 +151,24 @@ val Cx16VirtualRegisters = arrayOf( RegisterOrPair.R8, RegisterOrPair.R9, RegisterOrPair.R10, RegisterOrPair.R11, RegisterOrPair.R12, RegisterOrPair.R13, RegisterOrPair.R14, RegisterOrPair.R15 ) + + + +enum class OutputType { + RAW, + PRG, + XEX +} + +enum class CbmPrgLauncherType { + BASIC, + NONE +} + +enum class ZeropageType { + BASICSAFE, + FLOATSAFE, + KERNALSAFE, + FULL, + DONTUSE +} diff --git a/compilerInterfaces/src/prog8/compilerinterface/Exceptions.kt b/codeCore/src/prog8/code/core/Exceptions.kt similarity index 58% rename from compilerInterfaces/src/prog8/compilerinterface/Exceptions.kt rename to codeCore/src/prog8/code/core/Exceptions.kt index ad911d7f8..6f0c9087d 100644 --- a/compilerInterfaces/src/prog8/compilerinterface/Exceptions.kt +++ b/codeCore/src/prog8/code/core/Exceptions.kt @@ -1,7 +1,7 @@ -package prog8.compilerinterface +package prog8.code.core class InternalCompilerException(message: String?) : Exception(message) -class AbortCompilation(message: String?) : Exception(message) - class AssemblyError(msg: String) : RuntimeException(msg) + +class ErrorsReportedException(message: String?) : Exception(message) diff --git a/codeCore/src/prog8/code/core/IAssemblyGenerator.kt b/codeCore/src/prog8/code/core/IAssemblyGenerator.kt new file mode 100644 index 000000000..70cb53524 --- /dev/null +++ b/codeCore/src/prog8/code/core/IAssemblyGenerator.kt @@ -0,0 +1,23 @@ +package prog8.code.core + +import java.nio.file.Path + + +interface IAssemblyGenerator { + fun compileToAssembly(): IAssemblyProgram? +} + +interface IAssemblyProgram { + val name: String + fun assemble(options: AssemblerOptions): Boolean +} + +fun viceMonListName(baseFilename: String) = "$baseFilename.vice-mon-list" + + +class AssemblerOptions( + val output: OutputType, + var asmQuiet: Boolean = false, + var asmListfile: Boolean = false, + var outputDir: Path +) diff --git a/compilerInterfaces/src/prog8/compilerinterface/IErrorReporter.kt b/codeCore/src/prog8/code/core/IErrorReporter.kt similarity index 61% rename from compilerInterfaces/src/prog8/compilerinterface/IErrorReporter.kt rename to codeCore/src/prog8/code/core/IErrorReporter.kt index 912d0a442..9bc3d7de3 100644 --- a/compilerInterfaces/src/prog8/compilerinterface/IErrorReporter.kt +++ b/codeCore/src/prog8/code/core/IErrorReporter.kt @@ -1,6 +1,4 @@ -package prog8.compilerinterface - -import prog8.code.core.Position +package prog8.code.core interface IErrorReporter { fun err(msg: String, position: Position) @@ -9,7 +7,6 @@ interface IErrorReporter { fun report() fun finalizeNumErrors(numErrors: Int, numWarnings: Int) { if(numErrors>0) - throw AbortCompilation("There are $numErrors errors and $numWarnings warnings.") + throw ErrorsReportedException("There are $numErrors errors and $numWarnings warnings.") } } - diff --git a/codeGenCpu6502/build.gradle b/codeGenCpu6502/build.gradle index b0eb3c62c..c9447bcdb 100644 --- a/codeGenCpu6502/build.gradle +++ b/codeGenCpu6502/build.gradle @@ -24,8 +24,10 @@ compileTestKotlin { } dependencies { - implementation project(':compilerInterfaces') + implementation project(':codeAst') + implementation project(':codeCore') implementation project(':compilerAst') + implementation project(':compilerInterfaces') implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" // implementation "org.jetbrains.kotlin:kotlin-reflect" implementation "com.michael-bull.kotlin-result:kotlin-result-jvm:1.1.14" diff --git a/codeGenCpu6502/codeGenCpu6502.iml b/codeGenCpu6502/codeGenCpu6502.iml index bdacb4379..c1d80fbb9 100644 --- a/codeGenCpu6502/codeGenCpu6502.iml +++ b/codeGenCpu6502/codeGenCpu6502.iml @@ -9,9 +9,10 @@ + + - \ No newline at end of file diff --git a/codeGenCpu6502/src/prog8/codegen/cpu6502/AsmGen.kt b/codeGenCpu6502/src/prog8/codegen/cpu6502/AsmGen.kt index 8d3e8a9b6..1cdbedbdf 100644 --- a/codeGenCpu6502/src/prog8/codegen/cpu6502/AsmGen.kt +++ b/codeGenCpu6502/src/prog8/codegen/cpu6502/AsmGen.kt @@ -5,6 +5,7 @@ import prog8.ast.* import prog8.ast.base.FatalAstException import prog8.ast.expressions.* import prog8.ast.statements.* +import prog8.code.SymbolTable import prog8.code.core.* import prog8.codegen.cpu6502.assignment.* import prog8.compilerinterface.* diff --git a/codeGenCpu6502/src/prog8/codegen/cpu6502/AssemblyProgram.kt b/codeGenCpu6502/src/prog8/codegen/cpu6502/AssemblyProgram.kt index 9cd821dbb..5d7e4c42f 100644 --- a/codeGenCpu6502/src/prog8/codegen/cpu6502/AssemblyProgram.kt +++ b/codeGenCpu6502/src/prog8/codegen/cpu6502/AssemblyProgram.kt @@ -3,6 +3,7 @@ package prog8.codegen.cpu6502 import com.github.michaelbull.result.Ok import com.github.michaelbull.result.Result import com.github.michaelbull.result.mapError +import prog8.code.core.* import prog8.compilerinterface.* import prog8.parser.SourceCode import java.io.File @@ -23,7 +24,7 @@ internal class AssemblyProgram( private val viceMonListFile = outputDir.resolve(viceMonListName(name)) private val listFile = outputDir.resolve("$name.list") - override fun assemble(options: CompilationOptions): Boolean { + override fun assemble(options: AssemblerOptions): Boolean { val assemblerCommand: List diff --git a/codeGenCpu6502/src/prog8/codegen/cpu6502/BuiltinFunctionsAsmGen.kt b/codeGenCpu6502/src/prog8/codegen/cpu6502/BuiltinFunctionsAsmGen.kt index ada9eced4..1390dcce2 100644 --- a/codeGenCpu6502/src/prog8/codegen/cpu6502/BuiltinFunctionsAsmGen.kt +++ b/codeGenCpu6502/src/prog8/codegen/cpu6502/BuiltinFunctionsAsmGen.kt @@ -1606,7 +1606,7 @@ internal class BuiltinFunctionsAsmGen(private val program: Program, private fun translateArguments(args: MutableList, signature: FSignature, scope: Subroutine?) { val callConv = signature.callConvention(args.map { - it.inferType(program).getOrElse { throw AssemblyError("unknown dt")} + it.inferType(program).getOrElse { throw AssemblyError("unknown dt") } }) fun getSourceForFloat(value: Expression): AsmAssignSource { diff --git a/codeGenCpu6502/src/prog8/codegen/cpu6502/ExpressionsAsmGen.kt b/codeGenCpu6502/src/prog8/codegen/cpu6502/ExpressionsAsmGen.kt index 22b2c0436..0a407b322 100644 --- a/codeGenCpu6502/src/prog8/codegen/cpu6502/ExpressionsAsmGen.kt +++ b/codeGenCpu6502/src/prog8/codegen/cpu6502/ExpressionsAsmGen.kt @@ -3,7 +3,7 @@ package prog8.codegen.cpu6502 import prog8.ast.Program import prog8.ast.expressions.* import prog8.code.core.* -import prog8.compilerinterface.AssemblyError +import prog8.code.core.AssemblyError import prog8.compilerinterface.CpuType import kotlin.math.absoluteValue diff --git a/codeGenCpu6502/src/prog8/codegen/cpu6502/ForLoopsAsmGen.kt b/codeGenCpu6502/src/prog8/codegen/cpu6502/ForLoopsAsmGen.kt index 1cabb85e4..d779baa42 100644 --- a/codeGenCpu6502/src/prog8/codegen/cpu6502/ForLoopsAsmGen.kt +++ b/codeGenCpu6502/src/prog8/codegen/cpu6502/ForLoopsAsmGen.kt @@ -9,7 +9,7 @@ import prog8.code.core.ArrayToElementTypes import prog8.code.core.DataType import prog8.code.core.RegisterOrPair import prog8.code.core.toHex -import prog8.compilerinterface.AssemblyError +import prog8.code.core.AssemblyError import prog8.compilerinterface.Zeropage import kotlin.math.absoluteValue diff --git a/codeGenCpu6502/src/prog8/codegen/cpu6502/FunctionCallAsmGen.kt b/codeGenCpu6502/src/prog8/codegen/cpu6502/FunctionCallAsmGen.kt index 52ab2918b..d1660c847 100644 --- a/codeGenCpu6502/src/prog8/codegen/cpu6502/FunctionCallAsmGen.kt +++ b/codeGenCpu6502/src/prog8/codegen/cpu6502/FunctionCallAsmGen.kt @@ -13,7 +13,7 @@ import prog8.codegen.cpu6502.assignment.AsmAssignSource import prog8.codegen.cpu6502.assignment.AsmAssignTarget import prog8.codegen.cpu6502.assignment.AsmAssignment import prog8.codegen.cpu6502.assignment.TargetStorageKind -import prog8.compilerinterface.AssemblyError +import prog8.code.core.AssemblyError internal class FunctionCallAsmGen(private val program: Program, private val asmgen: AsmGen) { diff --git a/codeGenCpu6502/src/prog8/codegen/cpu6502/PostIncrDecrAsmGen.kt b/codeGenCpu6502/src/prog8/codegen/cpu6502/PostIncrDecrAsmGen.kt index 3a17adddb..d39740c21 100644 --- a/codeGenCpu6502/src/prog8/codegen/cpu6502/PostIncrDecrAsmGen.kt +++ b/codeGenCpu6502/src/prog8/codegen/cpu6502/PostIncrDecrAsmGen.kt @@ -5,7 +5,7 @@ import prog8.ast.expressions.IdentifierReference import prog8.ast.expressions.NumericLiteral import prog8.ast.statements.PostIncrDecr import prog8.code.core.* -import prog8.compilerinterface.AssemblyError +import prog8.code.core.AssemblyError internal class PostIncrDecrAsmGen(private val program: Program, private val asmgen: AsmGen) { diff --git a/codeGenCpu6502/src/prog8/codegen/cpu6502/ProgramAndVarsGen.kt b/codeGenCpu6502/src/prog8/codegen/cpu6502/ProgramAndVarsGen.kt index c6da10c92..1750cd9ce 100644 --- a/codeGenCpu6502/src/prog8/codegen/cpu6502/ProgramAndVarsGen.kt +++ b/codeGenCpu6502/src/prog8/codegen/cpu6502/ProgramAndVarsGen.kt @@ -3,6 +3,7 @@ package prog8.codegen.cpu6502 import prog8.ast.Program import prog8.ast.antlr.escape import prog8.ast.statements.* +import prog8.code.* import prog8.code.core.* import prog8.codegen.cpu6502.assignment.AsmAssignTarget import prog8.codegen.cpu6502.assignment.TargetStorageKind diff --git a/codeGenCpu6502/src/prog8/codegen/cpu6502/VariableAllocator.kt b/codeGenCpu6502/src/prog8/codegen/cpu6502/VariableAllocator.kt index 9f6a6a0fe..4ec0d2420 100644 --- a/codeGenCpu6502/src/prog8/codegen/cpu6502/VariableAllocator.kt +++ b/codeGenCpu6502/src/prog8/codegen/cpu6502/VariableAllocator.kt @@ -2,15 +2,15 @@ package prog8.codegen.cpu6502 import com.github.michaelbull.result.fold import com.github.michaelbull.result.onSuccess -import prog8.code.core.ArrayDatatypes -import prog8.code.core.DataType -import prog8.code.core.IntegerDatatypes +import prog8.code.* +import prog8.code.core.* import prog8.compilerinterface.* internal class VariableAllocator(private val symboltable: SymbolTable, private val options: CompilationOptions, - private val errors: IErrorReporter) { + private val errors: IErrorReporter +) { private val zeropage = options.compTarget.machine.zeropage private val memorySlabsInternal = mutableMapOf>() @@ -126,7 +126,7 @@ internal class VariableAllocator(private val symboltable: SymbolTable, val vars = mutableListOf() fun collect(node: StNode) { for(child in node.children) { - if(child.value.type==StNodeType.STATICVAR) + if(child.value.type == StNodeType.STATICVAR) vars.add(child.value as StStaticVariable) else collect(child.value) diff --git a/codeGenCpu6502/src/prog8/codegen/cpu6502/assignment/AsmAssignment.kt b/codeGenCpu6502/src/prog8/codegen/cpu6502/assignment/AsmAssignment.kt index d4bc53d02..9e733eb6a 100644 --- a/codeGenCpu6502/src/prog8/codegen/cpu6502/assignment/AsmAssignment.kt +++ b/codeGenCpu6502/src/prog8/codegen/cpu6502/assignment/AsmAssignment.kt @@ -5,7 +5,7 @@ import prog8.ast.expressions.* import prog8.ast.statements.* import prog8.code.core.* import prog8.codegen.cpu6502.AsmGen -import prog8.compilerinterface.AssemblyError +import prog8.code.core.AssemblyError internal enum class TargetStorageKind { diff --git a/codeGenCpu6502/src/prog8/codegen/cpu6502/assignment/AssignmentAsmGen.kt b/codeGenCpu6502/src/prog8/codegen/cpu6502/assignment/AssignmentAsmGen.kt index 08baf3e79..aa1caf524 100644 --- a/codeGenCpu6502/src/prog8/codegen/cpu6502/assignment/AssignmentAsmGen.kt +++ b/codeGenCpu6502/src/prog8/codegen/cpu6502/assignment/AssignmentAsmGen.kt @@ -6,7 +6,7 @@ import prog8.ast.statements.* import prog8.code.core.* import prog8.codegen.cpu6502.AsmGen import prog8.codegen.cpu6502.VariableAllocator -import prog8.compilerinterface.AssemblyError +import prog8.code.core.AssemblyError import prog8.compilerinterface.CpuType import prog8.compilerinterface.builtinFunctionReturnType diff --git a/codeGenCpu6502/src/prog8/codegen/cpu6502/assignment/AugmentableAssignmentAsmGen.kt b/codeGenCpu6502/src/prog8/codegen/cpu6502/assignment/AugmentableAssignmentAsmGen.kt index 2bdb977f0..dfb70a996 100644 --- a/codeGenCpu6502/src/prog8/codegen/cpu6502/assignment/AugmentableAssignmentAsmGen.kt +++ b/codeGenCpu6502/src/prog8/codegen/cpu6502/assignment/AugmentableAssignmentAsmGen.kt @@ -7,7 +7,7 @@ import prog8.ast.statements.Subroutine import prog8.code.core.* import prog8.codegen.cpu6502.AsmGen import prog8.codegen.cpu6502.VariableAllocator -import prog8.compilerinterface.AssemblyError +import prog8.code.core.AssemblyError import prog8.compilerinterface.CpuType diff --git a/codeGenExperimental6502/build.gradle b/codeGenExperimental6502/build.gradle index e84ca1b99..e044ff328 100644 --- a/codeGenExperimental6502/build.gradle +++ b/codeGenExperimental6502/build.gradle @@ -24,7 +24,8 @@ compileTestKotlin { } dependencies { - implementation project(':compilerInterfaces') + implementation project(':codeAst') + implementation project(':codeCore') implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" // implementation "org.jetbrains.kotlin:kotlin-reflect" implementation "com.michael-bull.kotlin-result:kotlin-result-jvm:1.1.14" diff --git a/codeGenExperimental6502/codeGenExperimental6502.iml b/codeGenExperimental6502/codeGenExperimental6502.iml index a58cec9a6..da4d92dee 100644 --- a/codeGenExperimental6502/codeGenExperimental6502.iml +++ b/codeGenExperimental6502/codeGenExperimental6502.iml @@ -9,8 +9,8 @@ - + \ No newline at end of file diff --git a/codeGenExperimental6502/src/prog8/codegen/experimental6502/AsmGen.kt b/codeGenExperimental6502/src/prog8/codegen/experimental6502/AsmGen.kt index ca4c45c3c..1021bfc07 100644 --- a/codeGenExperimental6502/src/prog8/codegen/experimental6502/AsmGen.kt +++ b/codeGenExperimental6502/src/prog8/codegen/experimental6502/AsmGen.kt @@ -1,13 +1,26 @@ package prog8.codegen.experimental6502 +import prog8.code.SymbolTable import prog8.code.ast.PtProgram -import prog8.compilerinterface.* +import prog8.code.core.AssemblerOptions +import prog8.code.core.IAssemblyGenerator +import prog8.code.core.IAssemblyProgram +import prog8.code.core.IErrorReporter +/* + + NOTE: The goal is to keep the dependencies as lean as possible! For now, we depend only on: + - codeAst (the 'lean' new AST and the SymbolTable) + - codeCore (various base enums and interfaces) + + This *should* be enough to build a complete code generator with. But we'll see :) + + */ class AsmGen(internal val program: PtProgram, internal val errors: IErrorReporter, internal val symbolTable: SymbolTable, - internal val options: CompilationOptions + internal val options: AssemblerOptions // TODO this may not be enough, maybe we actually need the other CompilationOptions as well ): IAssemblyGenerator { override fun compileToAssembly(): IAssemblyProgram? { diff --git a/codeGenExperimental6502/src/prog8/codegen/experimental6502/AssemblyProgram.kt b/codeGenExperimental6502/src/prog8/codegen/experimental6502/AssemblyProgram.kt index e8e7ca1c3..c197f88ad 100644 --- a/codeGenExperimental6502/src/prog8/codegen/experimental6502/AssemblyProgram.kt +++ b/codeGenExperimental6502/src/prog8/codegen/experimental6502/AssemblyProgram.kt @@ -1,12 +1,12 @@ package prog8.codegen.experimental6502 -import prog8.compilerinterface.CompilationOptions -import prog8.compilerinterface.IAssemblyProgram +import prog8.code.core.AssemblerOptions +import prog8.code.core.IAssemblyProgram internal class AssemblyProgram(override val name: String) : IAssemblyProgram { - override fun assemble(options: CompilationOptions): Boolean { + override fun assemble(options: AssemblerOptions): Boolean { println("..todo: assemble code into binary..") return false } diff --git a/codeGenTargets/build.gradle b/codeGenTargets/build.gradle index b0eb3c62c..672569a7b 100644 --- a/codeGenTargets/build.gradle +++ b/codeGenTargets/build.gradle @@ -24,8 +24,9 @@ compileTestKotlin { } dependencies { - implementation project(':compilerInterfaces') + implementation project(':codeCore') implementation project(':compilerAst') + implementation project(':compilerInterfaces') implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" // implementation "org.jetbrains.kotlin:kotlin-reflect" implementation "com.michael-bull.kotlin-result:kotlin-result-jvm:1.1.14" diff --git a/codeGenTargets/src/prog8/codegen/target/Encoder.kt b/codeGenTargets/src/prog8/codegen/target/Encoder.kt index 63127696c..1d082016d 100644 --- a/codeGenTargets/src/prog8/codegen/target/Encoder.kt +++ b/codeGenTargets/src/prog8/codegen/target/Encoder.kt @@ -6,7 +6,7 @@ import prog8.code.core.IStringEncoding import prog8.codegen.target.cbm.AtasciiEncoding import prog8.codegen.target.cbm.IsoEncoding import prog8.codegen.target.cbm.PetsciiEncoding -import prog8.compilerinterface.InternalCompilerException +import prog8.code.core.InternalCompilerException internal object Encoder: IStringEncoding { diff --git a/codeGenTargets/src/prog8/codegen/target/atari/AtariMachineDefinition.kt b/codeGenTargets/src/prog8/codegen/target/atari/AtariMachineDefinition.kt index 651493bc1..d47464b22 100644 --- a/codeGenTargets/src/prog8/codegen/target/atari/AtariMachineDefinition.kt +++ b/codeGenTargets/src/prog8/codegen/target/atari/AtariMachineDefinition.kt @@ -1,5 +1,7 @@ package prog8.codegen.target.atari +import prog8.code.core.CbmPrgLauncherType +import prog8.code.core.OutputType import prog8.codegen.target.c64.normal6502instructions import prog8.compilerinterface.* import java.nio.file.Path diff --git a/codeGenTargets/src/prog8/codegen/target/atari/AtariZeropage.kt b/codeGenTargets/src/prog8/codegen/target/atari/AtariZeropage.kt index 6c4abfe47..7b11e90cc 100644 --- a/codeGenTargets/src/prog8/codegen/target/atari/AtariZeropage.kt +++ b/codeGenTargets/src/prog8/codegen/target/atari/AtariZeropage.kt @@ -1,9 +1,9 @@ package prog8.codegen.target.atari +import prog8.code.core.ZeropageType import prog8.compilerinterface.CompilationOptions -import prog8.compilerinterface.InternalCompilerException +import prog8.code.core.InternalCompilerException import prog8.compilerinterface.Zeropage -import prog8.compilerinterface.ZeropageType class AtariZeropage(options: CompilationOptions) : Zeropage(options) { diff --git a/codeGenTargets/src/prog8/codegen/target/c128/C128MachineDefinition.kt b/codeGenTargets/src/prog8/codegen/target/c128/C128MachineDefinition.kt index 06971c770..2278361af 100644 --- a/codeGenTargets/src/prog8/codegen/target/c128/C128MachineDefinition.kt +++ b/codeGenTargets/src/prog8/codegen/target/c128/C128MachineDefinition.kt @@ -1,5 +1,8 @@ package prog8.codegen.target.c128 +import prog8.code.core.CbmPrgLauncherType +import prog8.code.core.OutputType +import prog8.code.core.viceMonListName import prog8.codegen.target.c64.normal6502instructions import prog8.codegen.target.cbm.Mflpt5 import prog8.compilerinterface.* diff --git a/codeGenTargets/src/prog8/codegen/target/c128/C128Zeropage.kt b/codeGenTargets/src/prog8/codegen/target/c128/C128Zeropage.kt index 8f8ea770e..d92dc10f0 100644 --- a/codeGenTargets/src/prog8/codegen/target/c128/C128Zeropage.kt +++ b/codeGenTargets/src/prog8/codegen/target/c128/C128Zeropage.kt @@ -1,9 +1,10 @@ package prog8.codegen.target.c128 +import prog8.code.core.ZeropageType import prog8.compilerinterface.CompilationOptions -import prog8.compilerinterface.InternalCompilerException +import prog8.code.core.InternalCompilerException import prog8.compilerinterface.Zeropage -import prog8.compilerinterface.ZeropageType + class C128Zeropage(options: CompilationOptions) : Zeropage(options) { diff --git a/codeGenTargets/src/prog8/codegen/target/c64/C64MachineDefinition.kt b/codeGenTargets/src/prog8/codegen/target/c64/C64MachineDefinition.kt index 2e736f311..e8b8a64e5 100644 --- a/codeGenTargets/src/prog8/codegen/target/c64/C64MachineDefinition.kt +++ b/codeGenTargets/src/prog8/codegen/target/c64/C64MachineDefinition.kt @@ -1,5 +1,8 @@ package prog8.codegen.target.c64 +import prog8.code.core.CbmPrgLauncherType +import prog8.code.core.OutputType +import prog8.code.core.viceMonListName import prog8.codegen.target.cbm.Mflpt5 import prog8.compilerinterface.* import java.io.IOException diff --git a/codeGenTargets/src/prog8/codegen/target/c64/C64Zeropage.kt b/codeGenTargets/src/prog8/codegen/target/c64/C64Zeropage.kt index b37b10709..aaa16a7ef 100644 --- a/codeGenTargets/src/prog8/codegen/target/c64/C64Zeropage.kt +++ b/codeGenTargets/src/prog8/codegen/target/c64/C64Zeropage.kt @@ -1,9 +1,10 @@ package prog8.codegen.target.c64 +import prog8.code.core.ZeropageType import prog8.compilerinterface.CompilationOptions -import prog8.compilerinterface.InternalCompilerException +import prog8.code.core.InternalCompilerException import prog8.compilerinterface.Zeropage -import prog8.compilerinterface.ZeropageType + class C64Zeropage(options: CompilationOptions) : Zeropage(options) { diff --git a/codeGenTargets/src/prog8/codegen/target/cbm/Mflpt5.kt b/codeGenTargets/src/prog8/codegen/target/cbm/Mflpt5.kt index 23750053f..21eb7b34a 100644 --- a/codeGenTargets/src/prog8/codegen/target/cbm/Mflpt5.kt +++ b/codeGenTargets/src/prog8/codegen/target/cbm/Mflpt5.kt @@ -1,7 +1,7 @@ package prog8.codegen.target.cbm import prog8.compilerinterface.IMachineFloat -import prog8.compilerinterface.InternalCompilerException +import prog8.code.core.InternalCompilerException import kotlin.math.absoluteValue import kotlin.math.pow diff --git a/codeGenTargets/src/prog8/codegen/target/cx16/CX16MachineDefinition.kt b/codeGenTargets/src/prog8/codegen/target/cx16/CX16MachineDefinition.kt index 3c8c62395..f33068f7a 100644 --- a/codeGenTargets/src/prog8/codegen/target/cx16/CX16MachineDefinition.kt +++ b/codeGenTargets/src/prog8/codegen/target/cx16/CX16MachineDefinition.kt @@ -1,5 +1,8 @@ package prog8.codegen.target.cx16 +import prog8.code.core.CbmPrgLauncherType +import prog8.code.core.OutputType +import prog8.code.core.viceMonListName import prog8.codegen.target.cbm.Mflpt5 import prog8.compilerinterface.* import java.nio.file.Path diff --git a/codeGenTargets/src/prog8/codegen/target/cx16/CX16Zeropage.kt b/codeGenTargets/src/prog8/codegen/target/cx16/CX16Zeropage.kt index 108a295e3..a1d5c8506 100644 --- a/codeGenTargets/src/prog8/codegen/target/cx16/CX16Zeropage.kt +++ b/codeGenTargets/src/prog8/codegen/target/cx16/CX16Zeropage.kt @@ -1,10 +1,10 @@ package prog8.codegen.target.cx16 import prog8.code.core.DataType +import prog8.code.core.ZeropageType import prog8.compilerinterface.CompilationOptions -import prog8.compilerinterface.InternalCompilerException +import prog8.code.core.InternalCompilerException import prog8.compilerinterface.Zeropage -import prog8.compilerinterface.ZeropageType class CX16Zeropage(options: CompilationOptions) : Zeropage(options) { diff --git a/codeOptimizers/build.gradle b/codeOptimizers/build.gradle index 7dc1a3435..d4de0cd74 100644 --- a/codeOptimizers/build.gradle +++ b/codeOptimizers/build.gradle @@ -24,6 +24,7 @@ compileTestKotlin { } dependencies { + implementation project(':codeCore') implementation project(':compilerInterfaces') implementation project(':compilerAst') implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" diff --git a/codeOptimizers/codeOptimizers.iml b/codeOptimizers/codeOptimizers.iml index 8c1f57512..5747f3cdc 100644 --- a/codeOptimizers/codeOptimizers.iml +++ b/codeOptimizers/codeOptimizers.iml @@ -9,8 +9,8 @@ - - + + \ No newline at end of file diff --git a/codeOptimizers/src/prog8/optimizer/ConstantIdentifierReplacer.kt b/codeOptimizers/src/prog8/optimizer/ConstantIdentifierReplacer.kt index 830edbde4..ff1bffaf8 100644 --- a/codeOptimizers/src/prog8/optimizer/ConstantIdentifierReplacer.kt +++ b/codeOptimizers/src/prog8/optimizer/ConstantIdentifierReplacer.kt @@ -10,8 +10,8 @@ import prog8.ast.walk.AstWalker import prog8.ast.walk.IAstModification import prog8.code.core.* import prog8.compilerinterface.ICompilationTarget -import prog8.compilerinterface.IErrorReporter -import prog8.compilerinterface.InternalCompilerException +import prog8.code.core.IErrorReporter +import prog8.code.core.InternalCompilerException // Fix up the literal value's type to match that of the vardecl // (also check range literal operands types before they get expanded into arrays for instance) diff --git a/codeOptimizers/src/prog8/optimizer/ExpressionSimplifier.kt b/codeOptimizers/src/prog8/optimizer/ExpressionSimplifier.kt index 10b2091ed..7e574bec8 100644 --- a/codeOptimizers/src/prog8/optimizer/ExpressionSimplifier.kt +++ b/codeOptimizers/src/prog8/optimizer/ExpressionSimplifier.kt @@ -9,7 +9,7 @@ import prog8.ast.walk.IAstModification import prog8.code.core.DataType import prog8.code.core.IntegerDatatypes import prog8.code.core.NumericDatatypes -import prog8.compilerinterface.IErrorReporter +import prog8.code.core.IErrorReporter import kotlin.math.abs import kotlin.math.log2 import kotlin.math.pow diff --git a/codeOptimizers/src/prog8/optimizer/Extensions.kt b/codeOptimizers/src/prog8/optimizer/Extensions.kt index 42a3e9b02..2e22bc76b 100644 --- a/codeOptimizers/src/prog8/optimizer/Extensions.kt +++ b/codeOptimizers/src/prog8/optimizer/Extensions.kt @@ -4,7 +4,7 @@ import prog8.ast.IBuiltinFunctions import prog8.ast.Program import prog8.compilerinterface.CompilationOptions import prog8.compilerinterface.ICompilationTarget -import prog8.compilerinterface.IErrorReporter +import prog8.code.core.IErrorReporter fun Program.constantFold(errors: IErrorReporter, compTarget: ICompilationTarget) { diff --git a/codeOptimizers/src/prog8/optimizer/StatementOptimizer.kt b/codeOptimizers/src/prog8/optimizer/StatementOptimizer.kt index 72fa66eed..952f867a8 100644 --- a/codeOptimizers/src/prog8/optimizer/StatementOptimizer.kt +++ b/codeOptimizers/src/prog8/optimizer/StatementOptimizer.kt @@ -9,14 +9,14 @@ import prog8.code.core.ArrayDatatypes import prog8.code.core.DataType import prog8.code.core.IntegerDatatypes import prog8.compilerinterface.ICompilationTarget -import prog8.compilerinterface.IErrorReporter +import prog8.code.core.IErrorReporter import kotlin.math.floor class StatementOptimizer(private val program: Program, - private val errors: IErrorReporter, - private val functions: IBuiltinFunctions, - private val compTarget: ICompilationTarget + private val errors: IErrorReporter, + private val functions: IBuiltinFunctions, + private val compTarget: ICompilationTarget ) : AstWalker() { override fun before(functionCallExpr: FunctionCallExpression, parent: Node): Iterable { diff --git a/codeOptimizers/src/prog8/optimizer/UnusedCodeRemover.kt b/codeOptimizers/src/prog8/optimizer/UnusedCodeRemover.kt index 949744655..9c51dab51 100644 --- a/codeOptimizers/src/prog8/optimizer/UnusedCodeRemover.kt +++ b/codeOptimizers/src/prog8/optimizer/UnusedCodeRemover.kt @@ -8,7 +8,7 @@ import prog8.ast.walk.IAstModification import prog8.code.core.DataType import prog8.compilerinterface.CallGraph import prog8.compilerinterface.ICompilationTarget -import prog8.compilerinterface.IErrorReporter +import prog8.code.core.IErrorReporter import prog8.compilerinterface.isIOAddress diff --git a/compiler/build.gradle b/compiler/build.gradle index d7ecedb5f..293acd24d 100644 --- a/compiler/build.gradle +++ b/compiler/build.gradle @@ -27,6 +27,8 @@ compileTestKotlin { def prog8version = rootProject.file('compiler/res/version.txt').text.trim() dependencies { + implementation project(':codeAst') + implementation project(':codeCore') implementation project(':compilerInterfaces') implementation project(':codeOptimizers') implementation project(':compilerAst') diff --git a/compiler/compiler.iml b/compiler/compiler.iml index 95c017a24..724ed23f1 100644 --- a/compiler/compiler.iml +++ b/compiler/compiler.iml @@ -11,19 +11,18 @@ - - - - - - - + + + + + + \ No newline at end of file diff --git a/compiler/src/prog8/CompilerMain.kt b/compiler/src/prog8/CompilerMain.kt index efa9414b1..c2ff4a658 100644 --- a/compiler/src/prog8/CompilerMain.kt +++ b/compiler/src/prog8/CompilerMain.kt @@ -2,6 +2,7 @@ package prog8 import kotlinx.cli.* import prog8.ast.base.AstException +import prog8.code.core.CbmPrgLauncherType import prog8.codegen.target.AtariTarget import prog8.codegen.target.C128Target import prog8.codegen.target.C64Target @@ -9,7 +10,6 @@ import prog8.codegen.target.Cx16Target import prog8.compiler.CompilationResult import prog8.compiler.CompilerArguments import prog8.compiler.compileProgram -import prog8.compilerinterface.CbmPrgLauncherType import java.io.File import java.nio.file.FileSystems import java.nio.file.Path diff --git a/compiler/src/prog8/compiler/Compiler.kt b/compiler/src/prog8/compiler/Compiler.kt index 7a4def076..f2ed4c8ea 100644 --- a/compiler/src/prog8/compiler/Compiler.kt +++ b/compiler/src/prog8/compiler/Compiler.kt @@ -11,7 +11,8 @@ import prog8.ast.expressions.NumericLiteral import prog8.ast.statements.Directive import prog8.ast.statements.VarDecl import prog8.ast.walk.IAstVisitor -import prog8.code.core.Position +import prog8.code.SymbolTable +import prog8.code.core.* import prog8.codegen.target.AtariTarget import prog8.codegen.target.C128Target import prog8.codegen.target.C64Target @@ -117,7 +118,7 @@ fun compileProgram(args: CompilerArguments): CompilationResult? { System.err.print("\n\u001b[91m") // bright red System.err.println("${px.position.toClickableStr()} parse error: ${px.message}".trim()) System.err.print("\u001b[0m") // reset - } catch (ac: AbortCompilation) { + } catch (ac: ErrorsReportedException) { if(!ac.message.isNullOrEmpty()) { System.err.print("\n\u001b[91m") // bright red System.err.println(ac.message) @@ -360,7 +361,13 @@ private fun createAssemblyAndAssemble(program: Program, errors.report() return if(assembly!=null && errors.noErrors()) { - assembly.assemble(compilerOptions) + val options = AssemblerOptions( + compilerOptions.output, + compilerOptions.asmQuiet, + compilerOptions.asmListfile, + compilerOptions.outputDir + ) + assembly.assemble(options) } else { false } @@ -403,7 +410,13 @@ internal fun asmGeneratorFor(program: Program, // TODO for now, only use the new Intermediary Ast for this experimental codegen: val intermediateAst = IntermediateAstMaker(program).transform() - return prog8.codegen.experimental6502.AsmGen(intermediateAst, errors, symbolTable, options) + val asmOptions = AssemblerOptions( + options.output, + options.asmQuiet, + options.asmListfile, + options.outputDir + ) + return prog8.codegen.experimental6502.AsmGen(intermediateAst, errors, symbolTable, asmOptions) } } else { if (options.compTarget.machine.cpu in arrayOf(CpuType.CPU6502, CpuType.CPU65c02)) diff --git a/compiler/src/prog8/compiler/ErrorReporter.kt b/compiler/src/prog8/compiler/ErrorReporter.kt index 27deb04a9..ded467008 100644 --- a/compiler/src/prog8/compiler/ErrorReporter.kt +++ b/compiler/src/prog8/compiler/ErrorReporter.kt @@ -1,7 +1,7 @@ package prog8.compiler import prog8.code.core.Position -import prog8.compilerinterface.IErrorReporter +import prog8.code.core.IErrorReporter internal class ErrorReporter: IErrorReporter { diff --git a/compiler/src/prog8/compiler/ModuleImporter.kt b/compiler/src/prog8/compiler/ModuleImporter.kt index db4e7ea86..5aef66415 100644 --- a/compiler/src/prog8/compiler/ModuleImporter.kt +++ b/compiler/src/prog8/compiler/ModuleImporter.kt @@ -7,7 +7,7 @@ import prog8.ast.base.SyntaxError import prog8.ast.statements.Directive import prog8.ast.statements.DirectiveArg import prog8.code.core.Position -import prog8.compilerinterface.IErrorReporter +import prog8.code.core.IErrorReporter import prog8.parser.Prog8Parser import prog8.parser.SourceCode import java.io.File diff --git a/compiler/src/prog8/compiler/astprocessing/AstExtensions.kt b/compiler/src/prog8/compiler/astprocessing/AstExtensions.kt index 40abf1f8d..ca4fbae79 100644 --- a/compiler/src/prog8/compiler/astprocessing/AstExtensions.kt +++ b/compiler/src/prog8/compiler/astprocessing/AstExtensions.kt @@ -13,7 +13,7 @@ import prog8.code.core.DataType import prog8.code.core.Encoding import prog8.compilerinterface.CompilationOptions import prog8.compilerinterface.ICompilationTarget -import prog8.compilerinterface.IErrorReporter +import prog8.code.core.IErrorReporter internal fun Program.checkValid(errors: IErrorReporter, compilerOptions: CompilationOptions) { diff --git a/compiler/src/prog8/compiler/astprocessing/AstIdentifiersChecker.kt b/compiler/src/prog8/compiler/astprocessing/AstIdentifiersChecker.kt index 8a01817d7..4e4fba318 100644 --- a/compiler/src/prog8/compiler/astprocessing/AstIdentifiersChecker.kt +++ b/compiler/src/prog8/compiler/astprocessing/AstIdentifiersChecker.kt @@ -11,7 +11,7 @@ import prog8.ast.walk.IAstVisitor import prog8.code.core.Position import prog8.compilerinterface.BuiltinFunctions import prog8.compilerinterface.ICompilationTarget -import prog8.compilerinterface.IErrorReporter +import prog8.code.core.IErrorReporter internal class AstIdentifiersChecker(private val errors: IErrorReporter, diff --git a/compiler/src/prog8/compiler/astprocessing/AstPreprocessor.kt b/compiler/src/prog8/compiler/astprocessing/AstPreprocessor.kt index a1766e12c..d3285e13e 100644 --- a/compiler/src/prog8/compiler/astprocessing/AstPreprocessor.kt +++ b/compiler/src/prog8/compiler/astprocessing/AstPreprocessor.kt @@ -11,8 +11,8 @@ import prog8.ast.walk.IAstModification import prog8.code.core.Encoding import prog8.code.core.NumericDatatypes import prog8.compilerinterface.ICompilationTarget -import prog8.compilerinterface.IErrorReporter -import prog8.compilerinterface.InternalCompilerException +import prog8.code.core.IErrorReporter +import prog8.code.core.InternalCompilerException class AstPreprocessor(val program: Program, val errors: IErrorReporter, val compTarget: ICompilationTarget) : AstWalker() { diff --git a/compiler/src/prog8/compiler/astprocessing/BeforeAsmAstChanger.kt b/compiler/src/prog8/compiler/astprocessing/BeforeAsmAstChanger.kt index a9f26181b..761fdcac9 100644 --- a/compiler/src/prog8/compiler/astprocessing/BeforeAsmAstChanger.kt +++ b/compiler/src/prog8/compiler/astprocessing/BeforeAsmAstChanger.kt @@ -7,9 +7,7 @@ import prog8.ast.statements.* import prog8.ast.walk.AstWalker import prog8.ast.walk.IAstModification import prog8.ast.walk.IAstVisitor -import prog8.code.core.DataType -import prog8.code.core.NumericDatatypes -import prog8.code.core.Position +import prog8.code.core.* import prog8.compilerinterface.* internal class BeforeAsmAstChanger(val program: Program, diff --git a/compiler/src/prog8/compiler/astprocessing/BeforeAsmTypecastCleaner.kt b/compiler/src/prog8/compiler/astprocessing/BeforeAsmTypecastCleaner.kt index 802a0253e..8bacc235f 100644 --- a/compiler/src/prog8/compiler/astprocessing/BeforeAsmTypecastCleaner.kt +++ b/compiler/src/prog8/compiler/astprocessing/BeforeAsmTypecastCleaner.kt @@ -12,7 +12,7 @@ import prog8.code.core.ByteDatatypes import prog8.code.core.DataType import prog8.code.core.PassByReferenceDatatypes import prog8.code.core.WordDatatypes -import prog8.compilerinterface.IErrorReporter +import prog8.code.core.IErrorReporter internal class BeforeAsmTypecastCleaner(val program: Program, diff --git a/compiler/src/prog8/compiler/astprocessing/CodeDesugarer.kt b/compiler/src/prog8/compiler/astprocessing/CodeDesugarer.kt index 1c0c49820..4879acdb0 100644 --- a/compiler/src/prog8/compiler/astprocessing/CodeDesugarer.kt +++ b/compiler/src/prog8/compiler/astprocessing/CodeDesugarer.kt @@ -9,7 +9,7 @@ import prog8.ast.statements.* import prog8.ast.walk.AstWalker import prog8.ast.walk.IAstModification import prog8.code.core.Position -import prog8.compilerinterface.IErrorReporter +import prog8.code.core.IErrorReporter private var generatedLabelSequenceNumber: Int = 0 diff --git a/compiler/src/prog8/compiler/astprocessing/LiteralsToAutoVars.kt b/compiler/src/prog8/compiler/astprocessing/LiteralsToAutoVars.kt index 02f3311f0..9358e08ae 100644 --- a/compiler/src/prog8/compiler/astprocessing/LiteralsToAutoVars.kt +++ b/compiler/src/prog8/compiler/astprocessing/LiteralsToAutoVars.kt @@ -14,12 +14,13 @@ import prog8.ast.walk.IAstModification import prog8.code.core.DataType import prog8.code.core.Encoding import prog8.compilerinterface.ICompilationTarget -import prog8.compilerinterface.IErrorReporter +import prog8.code.core.IErrorReporter internal class LiteralsToAutoVars(private val program: Program, private val target: ICompilationTarget, - private val errors: IErrorReporter) : AstWalker() { + private val errors: IErrorReporter +) : AstWalker() { override fun after(string: StringLiteral, parent: Node): Iterable { if(string.encoding != Encoding.DEFAULT && string.encoding !in target.supportedEncodings) { diff --git a/compiler/src/prog8/compiler/astprocessing/StatementReorderer.kt b/compiler/src/prog8/compiler/astprocessing/StatementReorderer.kt index 388a53a00..944616080 100644 --- a/compiler/src/prog8/compiler/astprocessing/StatementReorderer.kt +++ b/compiler/src/prog8/compiler/astprocessing/StatementReorderer.kt @@ -10,7 +10,7 @@ import prog8.code.core.* import prog8.compilerinterface.BuiltinFunctions import prog8.compilerinterface.CompilationOptions import prog8.compilerinterface.ICompilationTarget -import prog8.compilerinterface.IErrorReporter +import prog8.code.core.IErrorReporter internal class StatementReorderer(val program: Program, val errors: IErrorReporter, diff --git a/compiler/src/prog8/compiler/astprocessing/SymbolTableMaker.kt b/compiler/src/prog8/compiler/astprocessing/SymbolTableMaker.kt index 34fc10df0..b4b55399b 100644 --- a/compiler/src/prog8/compiler/astprocessing/SymbolTableMaker.kt +++ b/compiler/src/prog8/compiler/astprocessing/SymbolTableMaker.kt @@ -5,8 +5,8 @@ import prog8.ast.base.FatalAstException import prog8.ast.expressions.* import prog8.ast.statements.* import prog8.ast.walk.IAstVisitor +import prog8.code.* import prog8.code.core.Position -import prog8.compilerinterface.* import java.util.* internal class SymbolTableMaker: IAstVisitor { diff --git a/compiler/src/prog8/compiler/astprocessing/TypecastsAdder.kt b/compiler/src/prog8/compiler/astprocessing/TypecastsAdder.kt index e9ddc8a03..0467c6f18 100644 --- a/compiler/src/prog8/compiler/astprocessing/TypecastsAdder.kt +++ b/compiler/src/prog8/compiler/astprocessing/TypecastsAdder.kt @@ -14,7 +14,7 @@ import prog8.code.core.IterableDatatypes import prog8.code.core.PassByReferenceDatatypes import prog8.compilerinterface.BuiltinFunctions import prog8.compilerinterface.CompilationOptions -import prog8.compilerinterface.IErrorReporter +import prog8.code.core.IErrorReporter class TypecastsAdder(val program: Program, val options: CompilationOptions, val errors: IErrorReporter) : AstWalker() { diff --git a/compiler/src/prog8/compiler/astprocessing/VariousCleanups.kt b/compiler/src/prog8/compiler/astprocessing/VariousCleanups.kt index ec4882a58..a1d32f517 100644 --- a/compiler/src/prog8/compiler/astprocessing/VariousCleanups.kt +++ b/compiler/src/prog8/compiler/astprocessing/VariousCleanups.kt @@ -14,7 +14,7 @@ import prog8.ast.walk.IAstModification import prog8.code.core.ArrayDatatypes import prog8.code.core.DataType import prog8.compilerinterface.CompilationOptions -import prog8.compilerinterface.IErrorReporter +import prog8.code.core.IErrorReporter internal class VariousCleanups(val program: Program, val errors: IErrorReporter, val options: CompilationOptions): AstWalker() { diff --git a/compiler/src/prog8/compiler/astprocessing/VerifyFunctionArgTypes.kt b/compiler/src/prog8/compiler/astprocessing/VerifyFunctionArgTypes.kt index 1b3867e93..40d984e9d 100644 --- a/compiler/src/prog8/compiler/astprocessing/VerifyFunctionArgTypes.kt +++ b/compiler/src/prog8/compiler/astprocessing/VerifyFunctionArgTypes.kt @@ -11,7 +11,7 @@ import prog8.ast.walk.IAstVisitor import prog8.code.core.DataType import prog8.code.core.Position import prog8.compilerinterface.BuiltinFunctions -import prog8.compilerinterface.IErrorReporter +import prog8.code.core.IErrorReporter import prog8.compilerinterface.builtinFunctionReturnType internal class VerifyFunctionArgTypes(val program: Program, val errors: IErrorReporter) : IAstVisitor { diff --git a/compiler/test/ModuleImporterTests.kt b/compiler/test/ModuleImporterTests.kt index 109fbad0b..c170ad678 100644 --- a/compiler/test/ModuleImporterTests.kt +++ b/compiler/test/ModuleImporterTests.kt @@ -12,7 +12,7 @@ import io.kotest.matchers.string.shouldContain import prog8.ast.Program import prog8.ast.internedStringsModuleName import prog8.compiler.ModuleImporter -import prog8.compilerinterface.IErrorReporter +import prog8.code.core.IErrorReporter import prog8.parser.ParseError import prog8.parser.SourceCode import prog8tests.helpers.* diff --git a/compiler/test/TestImportedModulesOrderAndOptions.kt b/compiler/test/TestImportedModulesOrderAndOptions.kt index cf928a556..c86a5f574 100644 --- a/compiler/test/TestImportedModulesOrderAndOptions.kt +++ b/compiler/test/TestImportedModulesOrderAndOptions.kt @@ -5,10 +5,10 @@ import io.kotest.core.spec.style.FunSpec import io.kotest.matchers.shouldBe import io.kotest.matchers.string.shouldStartWith import prog8.ast.internedStringsModuleName +import prog8.code.core.ZeropageType import prog8.codegen.target.C64Target import prog8.compiler.determineCompilationOptions import prog8.compiler.parseImports -import prog8.compilerinterface.ZeropageType import prog8tests.helpers.ErrorReporterForTests import prog8tests.helpers.compileText import prog8tests.helpers.outputDir diff --git a/compiler/test/TestNumbers.kt b/compiler/test/TestNumbers.kt index 10794d99e..a6eb03ac9 100644 --- a/compiler/test/TestNumbers.kt +++ b/compiler/test/TestNumbers.kt @@ -9,7 +9,7 @@ import io.kotest.matchers.string.shouldContain import prog8.code.core.toHex import prog8.codegen.target.C64Target import prog8.codegen.target.cbm.Mflpt5 -import prog8.compilerinterface.InternalCompilerException +import prog8.code.core.InternalCompilerException import prog8tests.helpers.ErrorReporterForTests import prog8tests.helpers.compileText diff --git a/compiler/test/TestOptimization.kt b/compiler/test/TestOptimization.kt index 1e6b69005..a01d3f0fd 100644 --- a/compiler/test/TestOptimization.kt +++ b/compiler/test/TestOptimization.kt @@ -13,15 +13,11 @@ import prog8.ast.ParentSentinel import prog8.ast.Program import prog8.ast.expressions.* import prog8.ast.statements.* -import prog8.code.core.DataType -import prog8.code.core.Position +import prog8.code.core.* import prog8.codegen.target.C64Target import prog8.compiler.astprocessing.processAstBeforeAsmGeneration import prog8.compiler.printProgram -import prog8.compilerinterface.CbmPrgLauncherType import prog8.compilerinterface.CompilationOptions -import prog8.compilerinterface.OutputType -import prog8.compilerinterface.ZeropageType import prog8tests.helpers.* diff --git a/compiler/test/TestSymbolTable.kt b/compiler/test/TestSymbolTable.kt index d2a460f64..e3ccae691 100644 --- a/compiler/test/TestSymbolTable.kt +++ b/compiler/test/TestSymbolTable.kt @@ -4,9 +4,9 @@ import io.kotest.assertions.fail import io.kotest.core.spec.style.FunSpec import io.kotest.matchers.shouldBe import io.kotest.matchers.shouldNotBe +import prog8.code.* import prog8.code.core.DataType import prog8.code.core.Position -import prog8.compilerinterface.* class TestSymbolTable: FunSpec({ test("empty symboltable") { diff --git a/compiler/test/ZeropageTests.kt b/compiler/test/ZeropageTests.kt index e6f9f8773..3509d8751 100644 --- a/compiler/test/ZeropageTests.kt +++ b/compiler/test/ZeropageTests.kt @@ -12,7 +12,7 @@ import io.kotest.matchers.collections.shouldNotBeIn import io.kotest.matchers.comparables.shouldBeGreaterThan import io.kotest.matchers.shouldBe import io.kotest.matchers.shouldNotBe -import prog8.code.core.DataType +import prog8.code.core.* import prog8.codegen.target.C64Target import prog8.codegen.target.Cx16Target import prog8.codegen.target.c64.C64Zeropage diff --git a/compiler/test/codegeneration/TestAsmGenSymbols.kt b/compiler/test/codegeneration/TestAsmGenSymbols.kt index 9541d2016..a8d61ecfa 100644 --- a/compiler/test/codegeneration/TestAsmGenSymbols.kt +++ b/compiler/test/codegeneration/TestAsmGenSymbols.kt @@ -8,17 +8,12 @@ import prog8.ast.expressions.AddressOf import prog8.ast.expressions.IdentifierReference import prog8.ast.expressions.NumericLiteral import prog8.ast.statements.* -import prog8.code.core.DataType -import prog8.code.core.Position -import prog8.code.core.RegisterOrPair +import prog8.code.core.* import prog8.codegen.cpu6502.AsmGen import prog8.codegen.target.C64Target import prog8.codegen.target.c64.C64Zeropage import prog8.compiler.astprocessing.SymbolTableMaker -import prog8.compilerinterface.CbmPrgLauncherType import prog8.compilerinterface.CompilationOptions -import prog8.compilerinterface.OutputType -import prog8.compilerinterface.ZeropageType import prog8.parser.SourceCode import prog8tests.helpers.DummyFunctions import prog8tests.helpers.DummyMemsizer diff --git a/compiler/test/helpers/ErrorReporterForTests.kt b/compiler/test/helpers/ErrorReporterForTests.kt index 4c96ff2e5..7bd6a8f69 100644 --- a/compiler/test/helpers/ErrorReporterForTests.kt +++ b/compiler/test/helpers/ErrorReporterForTests.kt @@ -1,9 +1,10 @@ package prog8tests.helpers import prog8.code.core.Position -import prog8.compilerinterface.IErrorReporter +import prog8.code.core.IErrorReporter -internal class ErrorReporterForTests(private val throwExceptionAtReportIfErrors: Boolean=true, private val keepMessagesAfterReporting: Boolean=false): IErrorReporter { +internal class ErrorReporterForTests(private val throwExceptionAtReportIfErrors: Boolean=true, private val keepMessagesAfterReporting: Boolean=false): + IErrorReporter { val errors = mutableListOf() val warnings = mutableListOf() diff --git a/compiler/test/helpers/compileXyz.kt b/compiler/test/helpers/compileXyz.kt index bf794a48b..5eaba29f3 100644 --- a/compiler/test/helpers/compileXyz.kt +++ b/compiler/test/helpers/compileXyz.kt @@ -1,6 +1,7 @@ package prog8tests.helpers import prog8.ast.Program +import prog8.code.core.* import prog8.codegen.cpu6502.AsmGen import prog8.codegen.target.C64Target import prog8.codegen.target.c64.C64Zeropage diff --git a/compilerAst/build.gradle b/compilerAst/build.gradle index 1d150332d..198cd945a 100644 --- a/compilerAst/build.gradle +++ b/compilerAst/build.gradle @@ -22,6 +22,7 @@ compileTestKotlin { } dependencies { + implementation project(':codeCore') implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" implementation 'org.antlr:antlr4-runtime:4.9.3' implementation "com.michael-bull.kotlin-result:kotlin-result-jvm:1.1.14" diff --git a/compilerAst/compilerAst.iml b/compilerAst/compilerAst.iml index b871ba4e4..28e69fa4f 100644 --- a/compilerAst/compilerAst.iml +++ b/compilerAst/compilerAst.iml @@ -11,8 +11,8 @@ + - \ No newline at end of file diff --git a/compilerInterfaces/build.gradle b/compilerInterfaces/build.gradle index d194a835c..f84f57914 100644 --- a/compilerInterfaces/build.gradle +++ b/compilerInterfaces/build.gradle @@ -24,6 +24,7 @@ compileTestKotlin { } dependencies { + implementation project(':codeCore') implementation project(':compilerAst') implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" implementation "com.michael-bull.kotlin-result:kotlin-result-jvm:1.1.14" diff --git a/compilerInterfaces/compilerInterfaces.iml b/compilerInterfaces/compilerInterfaces.iml index 512383dd4..ec487c746 100644 --- a/compilerInterfaces/compilerInterfaces.iml +++ b/compilerInterfaces/compilerInterfaces.iml @@ -10,8 +10,8 @@ + - \ No newline at end of file diff --git a/compilerInterfaces/src/prog8/compilerinterface/CallGraph.kt b/compilerInterfaces/src/prog8/compilerinterface/CallGraph.kt index b24fc4348..06069b96b 100644 --- a/compilerInterfaces/src/prog8/compilerinterface/CallGraph.kt +++ b/compilerInterfaces/src/prog8/compilerinterface/CallGraph.kt @@ -9,6 +9,7 @@ import prog8.ast.expressions.FunctionCallExpression import prog8.ast.expressions.IdentifierReference import prog8.ast.statements.* import prog8.ast.walk.IAstVisitor +import prog8.code.core.IErrorReporter class CallGraph(private val program: Program, private val allowMissingIdentifierTargetVarDecls: Boolean=false) : IAstVisitor { diff --git a/compilerInterfaces/src/prog8/compilerinterface/CompilationOptions.kt b/compilerInterfaces/src/prog8/compilerinterface/CompilationOptions.kt index 443c63376..0ddf7518f 100644 --- a/compilerInterfaces/src/prog8/compilerinterface/CompilationOptions.kt +++ b/compilerInterfaces/src/prog8/compilerinterface/CompilationOptions.kt @@ -1,26 +1,11 @@ package prog8.compilerinterface +import prog8.code.core.CbmPrgLauncherType +import prog8.code.core.OutputType +import prog8.code.core.ZeropageType import java.nio.file.Path import kotlin.io.path.Path -enum class OutputType { - RAW, - PRG, - XEX -} - -enum class CbmPrgLauncherType { - BASIC, - NONE -} - -enum class ZeropageType { - BASICSAFE, - FLOATSAFE, - KERNALSAFE, - FULL, - DONTUSE -} class CompilationOptions(val output: OutputType, val launcher: CbmPrgLauncherType, diff --git a/compilerInterfaces/src/prog8/compilerinterface/IAssemblyGenerator.kt b/compilerInterfaces/src/prog8/compilerinterface/IAssemblyGenerator.kt deleted file mode 100644 index 8f16a3592..000000000 --- a/compilerInterfaces/src/prog8/compilerinterface/IAssemblyGenerator.kt +++ /dev/null @@ -1,13 +0,0 @@ -package prog8.compilerinterface - - -interface IAssemblyGenerator { - fun compileToAssembly(): IAssemblyProgram? -} - -interface IAssemblyProgram { - val name: String - fun assemble(options: CompilationOptions): Boolean -} - -fun viceMonListName(baseFilename: String) = "$baseFilename.vice-mon-list" diff --git a/compilerInterfaces/src/prog8/compilerinterface/Zeropage.kt b/compilerInterfaces/src/prog8/compilerinterface/Zeropage.kt index 7e3a9fc5e..5be44f79c 100644 --- a/compilerInterfaces/src/prog8/compilerinterface/Zeropage.kt +++ b/compilerInterfaces/src/prog8/compilerinterface/Zeropage.kt @@ -46,7 +46,8 @@ abstract class Zeropage(protected val options: CompilationOptions) { datatype: DataType, numElements: Int?, position: Position?, - errors: IErrorReporter): Result, ZeropageAllocationError> { + errors: IErrorReporter + ): Result, ZeropageAllocationError> { require(name.isEmpty() || name !in allocatedVariables) {"name can't be allocated twice"} diff --git a/dbusCompilerService/build.gradle b/dbusCompilerService/build.gradle index 49d772467..5ceb90acb 100644 --- a/dbusCompilerService/build.gradle +++ b/dbusCompilerService/build.gradle @@ -25,6 +25,7 @@ compileTestKotlin { } dependencies { + implementation project(':codeCore') implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" // implementation "org.jetbrains.kotlin:kotlin-reflect" implementation 'org.jetbrains.kotlinx:kotlinx-cli:0.3.4' diff --git a/dbusCompilerService/dbusCompilerService.iml b/dbusCompilerService/dbusCompilerService.iml index 976d67c13..fd3b86a9d 100644 --- a/dbusCompilerService/dbusCompilerService.iml +++ b/dbusCompilerService/dbusCompilerService.iml @@ -12,5 +12,6 @@ + \ No newline at end of file diff --git a/docs/source/todo.rst b/docs/source/todo.rst index ea063da15..4315231e2 100644 --- a/docs/source/todo.rst +++ b/docs/source/todo.rst @@ -3,10 +3,6 @@ TODO For next release ^^^^^^^^^^^^^^^^ -- make an intermediate representation containing the SymbolTable and dumbed down version of the Ast. - no vardecls in it anymore (these are part of the symboltable) and baked types, so no inferType too. - no name lookup in the Ast, always do this in the symbol table. - ... diff --git a/httpCompilerService/build.gradle b/httpCompilerService/build.gradle index 38d543875..f3baeb782 100644 --- a/httpCompilerService/build.gradle +++ b/httpCompilerService/build.gradle @@ -25,6 +25,7 @@ compileTestKotlin { } dependencies { + implementation project(':codeCore') implementation project(':compilerInterfaces') implementation project(':compiler') implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" diff --git a/httpCompilerService/httpCompilerService.iml b/httpCompilerService/httpCompilerService.iml index c46de14fa..db73ee145 100644 --- a/httpCompilerService/httpCompilerService.iml +++ b/httpCompilerService/httpCompilerService.iml @@ -9,11 +9,12 @@ - + + \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 6cf8f044d..86a968d95 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,7 +1,9 @@ include( ':parser', - ':compilerInterfaces', + ':codeCore', + ':codeAst', ':compilerAst', + ':compilerInterfaces', ':codeOptimizers', ':codeGenTargets', ':codeGenCpu6502',