From 9a5edeebbc21af5bbc99a5672d9317ee10bfa779 Mon Sep 17 00:00:00 2001 From: Irmen de Jong Date: Sat, 24 Jan 2026 00:29:45 +0100 Subject: [PATCH] upgrade to kotlin 2.3.0 --- .idea/libraries/KotlinJavaRuntime.xml | 20 +++---- build.gradle.kts | 2 +- codeCore/src/prog8/code/core/MemoryRegions.kt | 2 +- .../src/prog8/codegen/cpu6502/AsmOptimizer.kt | 52 +++++++++---------- .../cpu6502/assignment/AssignmentAsmGen.kt | 2 +- .../src/prog8/optimizer/UnusedCodeRemover.kt | 2 +- .../compiler/astprocessing/CodeDesugarer.kt | 4 +- .../prog8/ast/expressions/AstExpressions.kt | 6 +-- .../src/prog8/ast/statements/AstStatements.kt | 4 +- intermediate/src/prog8/intermediate/Utils.kt | 15 +++--- virtualmachine/src/prog8/vm/VirtualMachine.kt | 1 - 11 files changed, 55 insertions(+), 55 deletions(-) diff --git a/.idea/libraries/KotlinJavaRuntime.xml b/.idea/libraries/KotlinJavaRuntime.xml index 21d73669e..5e7d961f9 100644 --- a/.idea/libraries/KotlinJavaRuntime.xml +++ b/.idea/libraries/KotlinJavaRuntime.xml @@ -1,23 +1,23 @@ - + - - + + - + - - + + - + - - + + - + \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index f54bcad03..108cf95ad 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,7 +5,7 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinVersion plugins { - kotlin("jvm") version "2.2.21" + kotlin("jvm") version "2.3.0" } allprojects { diff --git a/codeCore/src/prog8/code/core/MemoryRegions.kt b/codeCore/src/prog8/code/core/MemoryRegions.kt index fa9c74b53..eaad27e1b 100644 --- a/codeCore/src/prog8/code/core/MemoryRegions.kt +++ b/codeCore/src/prog8/code/core/MemoryRegions.kt @@ -39,7 +39,7 @@ abstract class Zeropage(options: CompilationOptions): MemoryAllocator(options) { for (reserved in options.zpReserved) reserve(reserved) - free.removeAll(arrayOf(SCRATCH_B1, SCRATCH_REG, SCRATCH_W1, SCRATCH_W1 + 1u, SCRATCH_W2, SCRATCH_W2 + 1u, SCRATCH_PTR, SCRATCH_PTR+1u)) + free.removeAll(setOf(SCRATCH_B1, SCRATCH_REG, SCRATCH_W1, SCRATCH_W1 + 1u, SCRATCH_W2, SCRATCH_W2 + 1u, SCRATCH_PTR, SCRATCH_PTR+1u)) } } diff --git a/codeGenCpu6502/src/prog8/codegen/cpu6502/AsmOptimizer.kt b/codeGenCpu6502/src/prog8/codegen/cpu6502/AsmOptimizer.kt index 627a35644..eb807d248 100644 --- a/codeGenCpu6502/src/prog8/codegen/cpu6502/AsmOptimizer.kt +++ b/codeGenCpu6502/src/prog8/codegen/cpu6502/AsmOptimizer.kt @@ -811,44 +811,44 @@ private fun optimizeAddWordToSameVariableOrExtraRegisterLoadInWordStore(linesByF sta P8ZP_SCRATCH_PTR sty P8ZP_SCRATCH_PTR+1 - -> + -> clc - adc P8ZP_SCRATCH_PTR - sta P8ZP_SCRATCH_PTR - tya - adc P8ZP_SCRATCH_PTR+1 - sta P8ZP_SCRATCH_PTR+1 + adc P8ZP_SCRATCH_PTR + sta P8ZP_SCRATCH_PTR + tya + adc P8ZP_SCRATCH_PTR+1 + sta P8ZP_SCRATCH_PTR+1 - also SECOND SEQUENCE: + also SECOND SEQUENCE: ldx VALUE/ ldy VALUE - sta SOMEWHERE_WITHOUT_,x_OR_,y - txa / tya - ldy #1 - sta SOMEWHERE - --> - sta SOMEWHERE_WITHOUT_,x_OR_,y - lda VALUE - ldy #1 - sta SOMEWHERE + sta SOMEWHERE_WITHOUT_,x_OR_,y + txa / tya + ldy #1 + sta SOMEWHERE + --> + sta SOMEWHERE_WITHOUT_,x_OR_,y + lda VALUE + ldy #1 + sta SOMEWHERE also THIRD SEQUENCE: ldx VALUE - ldy #0 - sta SOMEWHERE_WITHOUT_,x - txa - iny - sta SOMEWHERE + ldy #0 + sta SOMEWHERE_WITHOUT_,x + txa + iny + sta SOMEWHERE --> - ldy #0 - sta SOMEWHERE_WITHOUT_,x - lda VALUE - iny - sta SOMEWHERE + ldy #0 + sta SOMEWHERE_WITHOUT_,x + lda VALUE + iny + sta SOMEWHERE */ val mods = mutableListOf() for (lines in linesByFourteen) { diff --git a/codeGenCpu6502/src/prog8/codegen/cpu6502/assignment/AssignmentAsmGen.kt b/codeGenCpu6502/src/prog8/codegen/cpu6502/assignment/AssignmentAsmGen.kt index ba06c3ad4..b7cb16905 100644 --- a/codeGenCpu6502/src/prog8/codegen/cpu6502/assignment/AssignmentAsmGen.kt +++ b/codeGenCpu6502/src/prog8/codegen/cpu6502/assignment/AssignmentAsmGen.kt @@ -562,7 +562,7 @@ internal class AssignmentAsmGen( dt.isLong -> { TODO("read long ${value.position}") } - else -> throw AssemblyError("unsupported dereference type ${dt} ${value.position}") + else -> throw AssemblyError("unsupported dereference type $dt ${value.position}") } } else { diff --git a/codeOptimizers/src/prog8/optimizer/UnusedCodeRemover.kt b/codeOptimizers/src/prog8/optimizer/UnusedCodeRemover.kt index 70dbc1d1a..b872d6e76 100644 --- a/codeOptimizers/src/prog8/optimizer/UnusedCodeRemover.kt +++ b/codeOptimizers/src/prog8/optimizer/UnusedCodeRemover.kt @@ -46,7 +46,7 @@ class UnusedCodeRemover(private val program: Program, subroutines .filter { s -> s.name == "internal_long_R1_to_float_AY" || s.name=="internal_long_AY_to_FAC" } - .forEach { neverRemoveSubroutines.add(it) } + .forEach { sub -> neverRemoveSubroutines.add(sub) } } } diff --git a/compiler/src/prog8/compiler/astprocessing/CodeDesugarer.kt b/compiler/src/prog8/compiler/astprocessing/CodeDesugarer.kt index d38394042..6460eb4b6 100644 --- a/compiler/src/prog8/compiler/astprocessing/CodeDesugarer.kt +++ b/compiler/src/prog8/compiler/astprocessing/CodeDesugarer.kt @@ -1028,9 +1028,9 @@ _after: if (numValues>0 && struct.fields.size != numValues) { if (numValues < struct.fields.size) { val missing = struct.fields.drop(numValues).joinToString(", ") { it.second } - errors.err("invalid number of field values: expected ${struct.fields.size} or 0 but got ${numValues}, missing: $missing", array.position) + errors.err("invalid number of field values: expected ${struct.fields.size} or 0 but got $numValues, missing: $missing", array.position) } else - errors.err("invalid number of field values: expected ${struct.fields.size} or 0 but got ${numValues}", array.position) + errors.err("invalid number of field values: expected ${struct.fields.size} or 0 but got $numValues", array.position) return false } return true diff --git a/compilerAst/src/prog8/ast/expressions/AstExpressions.kt b/compilerAst/src/prog8/ast/expressions/AstExpressions.kt index d5f2737ed..0ec22a32e 100644 --- a/compilerAst/src/prog8/ast/expressions/AstExpressions.kt +++ b/compilerAst/src/prog8/ast/expressions/AstExpressions.kt @@ -198,7 +198,7 @@ class BinaryExpression( InferredTypes.unknown() else if(operator=="-" && leftDt.isNumeric && rightDt.isPointer) { // x - pointer is not pointer arithmetic like pointer-x or pointer+x, it's invalid, but return untyped pointer uword here - return InferredTypes.knownFor(BaseDataType.UWORD) + InferredTypes.knownFor(BaseDataType.UWORD) } else { try { @@ -322,7 +322,7 @@ class BinaryExpression( return when (leftDt.base) { BaseDataType.BOOL -> { - return if(rightDt.isBool) + if(rightDt.isBool) Pair(DataType.BOOL, null) else Pair(DataType.BOOL, right) @@ -512,7 +512,7 @@ class TypecastExpression(var expression: Expression, var type: DataType, val imp return if(cast.isValid) { val newval = cast.valueOrZero() newval.linkParents(parent) - return newval + newval } else null diff --git a/compilerAst/src/prog8/ast/statements/AstStatements.kt b/compilerAst/src/prog8/ast/statements/AstStatements.kt index e2d7fb281..6e6ea471b 100644 --- a/compilerAst/src/prog8/ast/statements/AstStatements.kt +++ b/compilerAst/src/prog8/ast/statements/AstStatements.kt @@ -752,12 +752,12 @@ data class AssignTarget( arrayindexed != null -> value is ArrayIndexedExpression && arrayindexed!!.isSameArrayIndexedAs(value) multi != null -> false pointerDereference != null -> { - return if (value is PtrDereference) { + if (value is PtrDereference) { pointerDereference!!.chain==value.chain } else false } arrayIndexedDereference != null -> { - return if (value is ArrayIndexedPtrDereference) { + if (value is ArrayIndexedPtrDereference) { arrayIndexedDereference!!.chain==value.chain && arrayIndexedDereference!!.derefLast==value.derefLast } else false } diff --git a/intermediate/src/prog8/intermediate/Utils.kt b/intermediate/src/prog8/intermediate/Utils.kt index 649666b71..b16a4411c 100644 --- a/intermediate/src/prog8/intermediate/Utils.kt +++ b/intermediate/src/prog8/intermediate/Utils.kt @@ -152,13 +152,14 @@ fun parseIRCodeLine(line: String): Either { val value = if(oper[0]=='#') parseIRValue(oper.drop(1)) else parseIRValue(oper) if (format.immediate) { if (immediateInt == null && immediateFp == null) { - if (type == IRDataType.FLOAT && opcode != Opcode.LOADFIELD && opcode != Opcode.STOREFIELD) - immediateFp = value - else if(type == IRDataType.LONG) { - val immediateLong = value.toLong() - immediateInt = if(immediateLong == 0x80000000L) -2147483648 else immediateLong.toInt() - } else - immediateInt = value.toInt() + when (type) { + IRDataType.FLOAT if opcode != Opcode.LOADFIELD && opcode != Opcode.STOREFIELD -> immediateFp = value + IRDataType.LONG -> { + val immediateLong = value.toLong() + immediateInt = if (immediateLong == 0x80000000L) -2147483648 else immediateLong.toInt() + } + else -> immediateInt = value.toInt() + } } else { address = value.toInt() } diff --git a/virtualmachine/src/prog8/vm/VirtualMachine.kt b/virtualmachine/src/prog8/vm/VirtualMachine.kt index 943f43f5d..20fdece30 100644 --- a/virtualmachine/src/prog8/vm/VirtualMachine.kt +++ b/virtualmachine/src/prog8/vm/VirtualMachine.kt @@ -2646,7 +2646,6 @@ class VirtualMachine(irProgram: IRProgram) { registers.setFloat(i.fpReg1!!, value2) registers.setFloat(i.fpReg2!!, value1) } - else -> throw IllegalArgumentException("invalid type for this instruction $i") } nextPc() }