upgrade to java 22 and fix miscompile of variable loads

This commit is contained in:
Alex Zenla 2025-03-15 21:16:48 -07:00
parent 6e225aab88
commit 4100752f1c
No known key found for this signature in database
GPG Key ID: 067B238899B51269
5 changed files with 33 additions and 16 deletions

View File

@ -3,5 +3,5 @@ plugins {
}
tasks.withType<Wrapper> {
gradleVersion = "8.11.1"
gradleVersion = "8.13"
}

View File

@ -1,4 +1,5 @@
@file:Suppress("UnstableApiUsage")
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
@ -12,19 +13,21 @@ repositories {
}
dependencies {
implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:2.1.0")
implementation("org.jetbrains.kotlin:kotlin-serialization:1.7.3")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0")
implementation("com.charleskorn.kaml:kaml:0.66.0")
implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:2.1.10")
implementation("org.jetbrains.kotlin:kotlin-serialization:2.1.10")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.1")
implementation("com.charleskorn.kaml:kaml:0.72.0")
}
java {
sourceCompatibility = JavaVersion.toVersion(17)
targetCompatibility = JavaVersion.toVersion(17)
sourceCompatibility = JavaVersion.toVersion(22)
targetCompatibility = JavaVersion.toVersion(22)
}
tasks.withType<KotlinCompile> {
kotlinOptions.jvmTarget = "17"
compilerOptions {
jvmTarget.set(JvmTarget.JVM_22)
}
}
gradlePlugin {

View File

@ -5,7 +5,7 @@ import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.plugins.JavaPluginExtension
import org.gradle.kotlin.dsl.*
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
open class PorkModulePlugin : Plugin<Project> {
@ -17,20 +17,22 @@ open class PorkModulePlugin : Plugin<Project> {
target.repositories.maven(url = "https://gitlab.com/api/v4/projects/49101454/packages/maven")
target.extensions.getByType<JavaPluginExtension>().apply {
val javaVersion = JavaVersion.toVersion(17)
val javaVersion = JavaVersion.toVersion(22)
sourceCompatibility = javaVersion
targetCompatibility = javaVersion
}
target.tasks.withType<KotlinCompile> {
kotlinOptions.jvmTarget = "17"
compilerOptions {
jvmTarget.set(JvmTarget.JVM_22)
}
}
target.dependencies {
add("implementation", "org.jetbrains.kotlin:kotlin-bom")
add("implementation", "org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3")
add("api", "gay.pizza.dough:dough-core:0.1.0-SNAPSHOT")
add("api", "gay.pizza.dough:dough-fs:0.1.0-SNAPSHOT")
add("implementation", "org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.0")
add("api", "gay.pizza.dough:dough-core:0.2.0-SNAPSHOT")
add("api", "gay.pizza.dough:dough-fs:0.2.0-SNAPSHOT")
}
}
}

View File

@ -30,7 +30,9 @@ class IrStubOpEmitter(val irDefinition: IrDefinition, val code: CodeBuilder) : I
if (callOrStubVar.stubVar != null) {
code.emit(Opcode.LoadLocal, listOf(callOrStubVar.stubVar.index))
} else {
code.emit(Opcode.Integer, listOf(code.nextOpInst() + 2u))
val retRel = MutableRel(0u)
retRel.rel = code.nextOpInst() + 2u
code.patch(Opcode.ReturnAddress, listOf(0u), 0, symbol, retRel)
code.patch(Opcode.Call, listOf(0u), mapOf(0 to callOrStubVar.call!!))
}
}

View File

@ -11,6 +11,8 @@ import gay.pizza.pork.ast.gen.Symbol
import gay.pizza.pork.bir.IrSymbolGraph
import gay.pizza.pork.bir.IrWorld
import gay.pizza.pork.bytecode.CompiledWorld
import gay.pizza.pork.bytecode.ConstantTag
import gay.pizza.pork.bytecode.Opcode
import gay.pizza.pork.compiler.Compiler
import gay.pizza.pork.minimal.FileTool
@ -61,7 +63,15 @@ class CompileCommand : CliktCommand(help = "Compile Pork", name = "compile") {
if (annotations.isNotEmpty()) {
annotation = " ; ${annotations.joinToString(", ") { it.text}}"
}
println(" ${symbol.offset + index.toUInt()} ${op}${annotation}")
print(" ${symbol.offset + index.toUInt()} ${op}${annotation}")
if (op.code == Opcode.Constant) {
val constant = compiledWorld.constantPool.constants[op.args[0].toInt()]
val constantString = when (constant.tag) {
ConstantTag.String -> "\"" + constant.readAsString() + "\""
}
print(" ; constant: $constantString")
}
println()
}
}
}