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()
}