42 lines
1.4 KiB
Kotlin
Raw Normal View History

package prog8.codegen.experimental
import prog8.code.SymbolTable
import prog8.code.ast.PtProgram
2023-04-07 22:34:23 +02:00
import prog8.code.core.CompilationOptions
import prog8.code.IAssemblyProgram
import prog8.code.ICodeGeneratorBackend
2023-04-07 22:34:23 +02:00
import prog8.code.core.IErrorReporter
2022-09-19 19:41:43 +02:00
import prog8.codegen.intermediate.IRCodeGen
import prog8.intermediate.IRFileWriter
class ExperiCodeGen: ICodeGeneratorBackend {
override fun generate(
program: PtProgram,
symbolTable: SymbolTable,
options: CompilationOptions,
errors: IErrorReporter
2023-07-30 18:42:45 +02:00
): IAssemblyProgram {
// you could write a code generator directly on the PtProgram AST,
// but you can also use the Intermediate Representation to build a codegen on:
2022-09-19 19:41:43 +02:00
val irCodeGen = IRCodeGen(program, symbolTable, options, errors)
val irProgram = irCodeGen.generate()
irProgram.verifyRegisterTypes(irCodeGen.registerTypes())
// this stub only writes the IR program to disk but doesn't generate anything else.
IRFileWriter(irProgram, null).write()
2022-08-21 19:01:53 +02:00
println("** experimental codegen stub: no assembly generated **")
2023-07-06 23:13:00 +02:00
return EmptyProgram
2022-08-21 19:01:53 +02:00
}
2023-07-06 23:13:00 +02:00
}
private object EmptyProgram : IAssemblyProgram {
override val name = "<Empty Program>"
override fun assemble(options: CompilationOptions, errors: IErrorReporter): Boolean {
println("** nothing assembled **")
return true
}
}