This commit is contained in:
Irmen de Jong 2022-08-14 13:06:11 +02:00
parent f249ccd414
commit f37a822725
5 changed files with 10 additions and 5 deletions

View File

@ -3,7 +3,7 @@ package prog8.code.ast
import prog8.code.core.* import prog8.code.core.*
import java.nio.file.Path import java.nio.file.Path
// New (work-in-progress) simplified AST for the code generator. // New simplified AST for the code generator.
sealed class PtNode(val position: Position) { sealed class PtNode(val position: Position) {

View File

@ -446,13 +446,12 @@ internal fun asmGeneratorFor(program: Program,
{ {
if(options.experimentalCodegen) { if(options.experimentalCodegen) {
if (options.compTarget.machine.cpu in arrayOf(CpuType.CPU6502, CpuType.CPU65c02)) { if (options.compTarget.machine.cpu in arrayOf(CpuType.CPU6502, CpuType.CPU65c02)) {
// TODO for now, use the new Intermediary Ast for this experimental codegen:
val intermediateAst = IntermediateAstMaker(program).transform() val intermediateAst = IntermediateAstMaker(program).transform()
return prog8.codegen.experimental.AsmGen(intermediateAst, symbolTable, options, errors) return prog8.codegen.experimental.AsmGen(intermediateAst, symbolTable, options, errors)
} }
} else { } else {
if (options.compTarget.machine.cpu in arrayOf(CpuType.CPU6502, CpuType.CPU65c02)) if (options.compTarget.machine.cpu in arrayOf(CpuType.CPU6502, CpuType.CPU65c02))
// TODO rewrite 6502 codegen on new Intermediary Ast // TODO rewrite 6502 codegen on new Intermediary Ast or on new Intermediate Representation
return prog8.codegen.cpu6502.AsmGen(program, symbolTable, options, errors) return prog8.codegen.cpu6502.AsmGen(program, symbolTable, options, errors)
if (options.compTarget.name == VMTarget.NAME) { if (options.compTarget.name == VMTarget.NAME) {
val intermediateAst = IntermediateAstMaker(program).transform() val intermediateAst = IntermediateAstMaker(program).transform()

View File

@ -1,4 +1,4 @@
package prog8.compiler package prog8.compiler.astprocessing
import com.github.michaelbull.result.Ok import com.github.michaelbull.result.Ok
import com.github.michaelbull.result.Result import com.github.michaelbull.result.Result
@ -12,11 +12,16 @@ import prog8.code.ast.*
import prog8.code.core.DataType import prog8.code.core.DataType
import prog8.code.core.Position import prog8.code.core.Position
import prog8.code.core.SourceCode import prog8.code.core.SourceCode
import prog8.compiler.BuiltinFunctions
import prog8.compiler.builtinFunctionReturnType
import java.io.File import java.io.File
import kotlin.io.path.Path import kotlin.io.path.Path
import kotlin.io.path.isRegularFile import kotlin.io.path.isRegularFile
/**
* Convert 'old' compiler-AST into the 'new' simplified AST with baked types.
*/
class IntermediateAstMaker(val program: Program) { class IntermediateAstMaker(val program: Program) {
fun transform(): PtProgram { fun transform(): PtProgram {
val ptProgram = PtProgram( val ptProgram = PtProgram(

View File

@ -7,7 +7,7 @@ import io.kotest.matchers.shouldBe
import prog8.code.ast.* import prog8.code.ast.*
import prog8.code.core.DataType import prog8.code.core.DataType
import prog8.code.target.C64Target import prog8.code.target.C64Target
import prog8.compiler.IntermediateAstMaker import prog8.compiler.astprocessing.IntermediateAstMaker
import prog8tests.helpers.compileText import prog8tests.helpers.compileText
class TestIntermediateAst: FunSpec({ class TestIntermediateAst: FunSpec({

View File

@ -6,6 +6,7 @@ For next release
- vm: intermediate code: don't flatten everything. Instead, as a new intermediary step, - vm: intermediate code: don't flatten everything. Instead, as a new intermediary step,
convert the new Ast into *structured* intermediary code. convert the new Ast into *structured* intermediary code.
Basically keep the blocks and subroutines structure, including full subroutine signature information, Basically keep the blocks and subroutines structure, including full subroutine signature information,
don't do variable and zeropage allocations yet.
... ...