mirror of
https://github.com/irmen/prog8.git
synced 2024-06-10 20:29:33 +00:00
35 lines
1.1 KiB
Kotlin
35 lines
1.1 KiB
Kotlin
package prog8.codegen.vm
|
|
|
|
import prog8.code.SymbolTable
|
|
import prog8.code.ast.PtProgram
|
|
import prog8.code.core.CompilationOptions
|
|
import prog8.code.core.IAssemblyProgram
|
|
import prog8.code.core.ICodeGeneratorBackend
|
|
import prog8.code.core.IErrorReporter
|
|
import prog8.codegen.intermediate.IRCodeGen
|
|
import prog8.intermediate.IRFileWriter
|
|
import prog8.intermediate.IRProgram
|
|
|
|
class VmCodeGen: ICodeGeneratorBackend {
|
|
override fun generate(
|
|
program: PtProgram,
|
|
symbolTable: SymbolTable,
|
|
options: CompilationOptions,
|
|
errors: IErrorReporter
|
|
): IAssemblyProgram {
|
|
val irCodeGen = IRCodeGen(program, symbolTable, options, errors)
|
|
val irProgram = irCodeGen.generate()
|
|
return VmAssemblyProgram(irProgram.name, irProgram)
|
|
}
|
|
}
|
|
|
|
|
|
internal class VmAssemblyProgram(override val name: String, internal val irProgram: IRProgram): IAssemblyProgram {
|
|
|
|
override fun assemble(options: CompilationOptions, errors: IErrorReporter): Boolean {
|
|
// the VM reads the IR file from disk.
|
|
IRFileWriter(irProgram, null).write()
|
|
return true
|
|
}
|
|
}
|