mirror of
https://github.com/irmen/prog8.git
synced 2024-11-25 19:31:36 +00:00
moved codeGenVirtual module into virtualmachine module
This commit is contained in:
parent
4d6dcbd173
commit
11c000f764
@ -1,66 +0,0 @@
|
|||||||
|
|
||||||
plugins {
|
|
||||||
id 'java'
|
|
||||||
id 'application'
|
|
||||||
id "org.jetbrains.kotlin.jvm"
|
|
||||||
id "io.kotest" version "0.3.9"
|
|
||||||
}
|
|
||||||
|
|
||||||
java {
|
|
||||||
toolchain {
|
|
||||||
languageVersion = JavaLanguageVersion.of(javaVersion)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
compileKotlin {
|
|
||||||
kotlinOptions {
|
|
||||||
jvmTarget = javaVersion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
compileTestKotlin {
|
|
||||||
kotlinOptions {
|
|
||||||
jvmTarget = javaVersion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
implementation project(':codeCore')
|
|
||||||
implementation project(':intermediate')
|
|
||||||
implementation project(':codeGenIntermediate')
|
|
||||||
implementation project(':virtualmachine')
|
|
||||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
|
|
||||||
// implementation "org.jetbrains.kotlin:kotlin-reflect"
|
|
||||||
implementation "com.michael-bull.kotlin-result:kotlin-result-jvm:1.1.16"
|
|
||||||
|
|
||||||
testImplementation 'io.kotest:kotest-runner-junit5-jvm:5.3.2'
|
|
||||||
}
|
|
||||||
|
|
||||||
sourceSets {
|
|
||||||
main {
|
|
||||||
java {
|
|
||||||
srcDirs = ["${project.projectDir}/src"]
|
|
||||||
}
|
|
||||||
resources {
|
|
||||||
srcDirs = ["${project.projectDir}/res"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
test {
|
|
||||||
java {
|
|
||||||
srcDir "${project.projectDir}/test"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
test {
|
|
||||||
// Enable JUnit 5 (Gradle 4.6+).
|
|
||||||
useJUnitPlatform()
|
|
||||||
|
|
||||||
// Always run tests, even when nothing changed.
|
|
||||||
dependsOn 'cleanTest'
|
|
||||||
|
|
||||||
// Show test results.
|
|
||||||
testLogging {
|
|
||||||
events "skipped", "failed"
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,21 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<module type="JAVA_MODULE" version="4">
|
|
||||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
|
||||||
<exclude-output />
|
|
||||||
<content url="file://$MODULE_DIR$">
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build" />
|
|
||||||
</content>
|
|
||||||
<orderEntry type="inheritedJdk" />
|
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
|
||||||
<orderEntry type="library" name="KotlinJavaRuntime" level="project" />
|
|
||||||
<orderEntry type="library" name="michael.bull.kotlin.result.jvm" level="project" />
|
|
||||||
<orderEntry type="library" name="io.kotest.assertions.core.jvm" level="project" />
|
|
||||||
<orderEntry type="library" name="io.kotest.runner.junit5.jvm" level="project" />
|
|
||||||
<orderEntry type="module" module-name="codeCore" />
|
|
||||||
<orderEntry type="module" module-name="intermediate" />
|
|
||||||
<orderEntry type="module" module-name="codeGenIntermediate" />
|
|
||||||
<orderEntry type="module" module-name="virtualmachine" />
|
|
||||||
</component>
|
|
||||||
</module>
|
|
@ -31,7 +31,6 @@ dependencies {
|
|||||||
implementation project(':codeOptimizers')
|
implementation project(':codeOptimizers')
|
||||||
implementation project(':compilerAst')
|
implementation project(':compilerAst')
|
||||||
implementation project(':codeGenCpu6502')
|
implementation project(':codeGenCpu6502')
|
||||||
implementation project(':codeGenVirtual')
|
|
||||||
implementation project(':codeGenExperimental')
|
implementation project(':codeGenExperimental')
|
||||||
implementation project(':virtualmachine')
|
implementation project(':virtualmachine')
|
||||||
implementation 'org.antlr:antlr4-runtime:4.10.1'
|
implementation 'org.antlr:antlr4-runtime:4.10.1'
|
||||||
|
@ -21,7 +21,6 @@
|
|||||||
<orderEntry type="module" module-name="codeOptimizers" />
|
<orderEntry type="module" module-name="codeOptimizers" />
|
||||||
<orderEntry type="module" module-name="codeGenCpu6502" />
|
<orderEntry type="module" module-name="codeGenCpu6502" />
|
||||||
<orderEntry type="module" module-name="codeGenExperimental" />
|
<orderEntry type="module" module-name="codeGenExperimental" />
|
||||||
<orderEntry type="module" module-name="codeGenVirtual" />
|
|
||||||
<orderEntry type="module" module-name="virtualmachine" />
|
<orderEntry type="module" module-name="virtualmachine" />
|
||||||
</component>
|
</component>
|
||||||
</module>
|
</module>
|
@ -17,6 +17,7 @@ import prog8.code.target.*
|
|||||||
import prog8.compiler.astprocessing.*
|
import prog8.compiler.astprocessing.*
|
||||||
import prog8.optimizer.*
|
import prog8.optimizer.*
|
||||||
import prog8.parser.ParseError
|
import prog8.parser.ParseError
|
||||||
|
import prog8.vm.codegen.VmCodeGen
|
||||||
import java.nio.file.Path
|
import java.nio.file.Path
|
||||||
import kotlin.io.path.Path
|
import kotlin.io.path.Path
|
||||||
import kotlin.io.path.nameWithoutExtension
|
import kotlin.io.path.nameWithoutExtension
|
||||||
@ -455,7 +456,7 @@ internal fun asmGeneratorFor(program: Program,
|
|||||||
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()
|
||||||
return prog8.codegen.virtual.VmCodeGen(intermediateAst, symbolTable, options, errors)
|
return VmCodeGen(intermediateAst, symbolTable, options, errors)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -139,7 +139,7 @@ Some notes and references into the compiler's source code modules:
|
|||||||
#. An *Intermediate Representation* has been defined that is generated from the intermediate AST. This IR
|
#. An *Intermediate Representation* has been defined that is generated from the intermediate AST. This IR
|
||||||
is more or less a machine code language for a virtual machine - and indeed this is what the built-in
|
is more or less a machine code language for a virtual machine - and indeed this is what the built-in
|
||||||
prog8 VM will execute if you use the 'virtual' compilaton target and use ``-emu`` to launch the VM.
|
prog8 VM will execute if you use the 'virtual' compilaton target and use ``-emu`` to launch the VM.
|
||||||
(``intermediate`` and ``codeGenIntermediate`` modules, and ``codeGenVirtual`` and ``virtualmachine`` module for the VM related stuff)
|
(``intermediate`` and ``codeGenIntermediate`` modules, and ``virtualmachine`` module for the VM related stuff)
|
||||||
#. Currently the 6502 ASM code generator still works directly on the *Compiler AST*. A future version
|
#. Currently the 6502 ASM code generator still works directly on the *Compiler AST*. A future version
|
||||||
should replace this by working on the IR code, and should be much smaller and simpler.
|
should replace this by working on the IR code, and should be much smaller and simpler.
|
||||||
(``codeGenCpu6502`` module)
|
(``codeGenCpu6502`` module)
|
||||||
|
@ -3,7 +3,6 @@ TODO
|
|||||||
|
|
||||||
For next release
|
For next release
|
||||||
^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^
|
||||||
- vm: move codeGenVirtual module into virtualmachine module?
|
|
||||||
- vm: actually translate IRProgram to vm program list again.
|
- vm: actually translate IRProgram to vm program list again.
|
||||||
- docs: modify compiler arch picture once this is done.
|
- docs: modify compiler arch picture once this is done.
|
||||||
|
|
||||||
|
@ -6,7 +6,6 @@ include(
|
|||||||
':codeOptimizers',
|
':codeOptimizers',
|
||||||
':virtualmachine',
|
':virtualmachine',
|
||||||
':codeGenIntermediate',
|
':codeGenIntermediate',
|
||||||
':codeGenVirtual',
|
|
||||||
':codeGenCpu6502',
|
':codeGenCpu6502',
|
||||||
':codeGenExperimental',
|
':codeGenExperimental',
|
||||||
':compiler',
|
':compiler',
|
||||||
|
@ -27,6 +27,7 @@ compileTestKotlin {
|
|||||||
dependencies {
|
dependencies {
|
||||||
implementation project(':codeCore')
|
implementation project(':codeCore')
|
||||||
implementation project(':intermediate')
|
implementation project(':intermediate')
|
||||||
|
implementation project(':codeGenIntermediate')
|
||||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
|
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
|
||||||
implementation "com.michael-bull.kotlin-result:kotlin-result-jvm:1.1.16"
|
implementation "com.michael-bull.kotlin-result:kotlin-result-jvm:1.1.16"
|
||||||
testImplementation 'io.kotest:kotest-runner-junit5-jvm:5.3.2'
|
testImplementation 'io.kotest:kotest-runner-junit5-jvm:5.3.2'
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package prog8.codegen.virtual
|
package prog8.vm.codegen
|
||||||
|
|
||||||
import prog8.code.SymbolTable
|
import prog8.code.SymbolTable
|
||||||
import prog8.code.ast.PtProgram
|
import prog8.code.ast.PtProgram
|
||||||
@ -22,14 +22,8 @@ class VmCodeGen(private val program: PtProgram,
|
|||||||
val irCodeGen = IRCodeGen(program, symbolTable, options, errors)
|
val irCodeGen = IRCodeGen(program, symbolTable, options, errors)
|
||||||
val irProgram = irCodeGen.generate()
|
val irProgram = irCodeGen.generate()
|
||||||
|
|
||||||
return if(options.keepIR) {
|
// no need to check options.keepIR, as the VM file format *is* the IR file.
|
||||||
//create IR file on disk and read it back.
|
return VmAssemblyProgram(irProgram.name, irProgram)
|
||||||
val irFile = IRFileWriter(irProgram, null).write()
|
|
||||||
val irProgram2 = IRFileReader().read(irFile)
|
|
||||||
VmAssemblyProgram(irProgram2.name, irProgram2)
|
|
||||||
} else {
|
|
||||||
VmAssemblyProgram(irProgram.name, irProgram)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@ -44,8 +38,8 @@ class VmCodeGen(private val program: PtProgram,
|
|||||||
internal class VmAssemblyProgram(override val name: String, private val irProgram: IRProgram): IAssemblyProgram {
|
internal class VmAssemblyProgram(override val name: String, private val irProgram: IRProgram): IAssemblyProgram {
|
||||||
|
|
||||||
override fun assemble(options: CompilationOptions): Boolean {
|
override fun assemble(options: CompilationOptions): Boolean {
|
||||||
val writtenFile = IRFileWriter(irProgram, null).write()
|
// the VM reads the IR file from disk.
|
||||||
println("Wrote intermediate representation to $writtenFile")
|
IRFileWriter(irProgram, null).write()
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -14,5 +14,6 @@
|
|||||||
<orderEntry type="library" name="io.kotest.runner.junit5.jvm" level="project" />
|
<orderEntry type="library" name="io.kotest.runner.junit5.jvm" level="project" />
|
||||||
<orderEntry type="module" module-name="codeCore" />
|
<orderEntry type="module" module-name="codeCore" />
|
||||||
<orderEntry type="module" module-name="intermediate" />
|
<orderEntry type="module" module-name="intermediate" />
|
||||||
|
<orderEntry type="module" module-name="codeGenIntermediate" />
|
||||||
</component>
|
</component>
|
||||||
</module>
|
</module>
|
Loading…
Reference in New Issue
Block a user