From 5b6569d0f9db689b3531904f31f18976588b0eb8 Mon Sep 17 00:00:00 2001 From: Irmen de Jong Date: Sun, 30 Oct 2022 19:03:02 +0100 Subject: [PATCH] ir: fix overwriting chunk label --- .../src/prog8/codegen/intermediate/IRCodeGen.kt | 13 +++++++++---- compiler/test/vm/TestCompilerVirtual.kt | 3 --- docs/source/todo.rst | 1 - 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/codeGenIntermediate/src/prog8/codegen/intermediate/IRCodeGen.kt b/codeGenIntermediate/src/prog8/codegen/intermediate/IRCodeGen.kt index 7b9449371..64e09c67b 100644 --- a/codeGenIntermediate/src/prog8/codegen/intermediate/IRCodeGen.kt +++ b/codeGenIntermediate/src/prog8/codegen/intermediate/IRCodeGen.kt @@ -346,8 +346,14 @@ class IRCodeGen( private fun labelFirstChunk(chunks: IRCodeChunks, label: String): IRCodeChunks { require(chunks.isNotEmpty() && label.isNotBlank()) - val newChunks = chunks.drop(1).toMutableList() - val labeledFirstChunk = when(val first=chunks[0]) { + val first = chunks[0] + if(first.label!=null) { + if(first.label==label) + return chunks + val newFirst = IRCodeChunk(label, first.position, first) + return listOf(newFirst) + chunks + } + val labeledFirstChunk = when(first) { is IRCodeChunk -> { val newChunk = IRCodeChunk(label, first.position, first.next) newChunk.instructions += first.instructions @@ -363,8 +369,7 @@ class IRCodeGen( throw AssemblyError("invalid chunk") } } - newChunks.add(0, labeledFirstChunk) - return newChunks + return listOf(labeledFirstChunk) + chunks.drop(1) } private fun translate(whenStmt: PtWhen): IRCodeChunks { diff --git a/compiler/test/vm/TestCompilerVirtual.kt b/compiler/test/vm/TestCompilerVirtual.kt index 2d170f43a..5cba906ed 100644 --- a/compiler/test/vm/TestCompilerVirtual.kt +++ b/compiler/test/vm/TestCompilerVirtual.kt @@ -99,19 +99,16 @@ mylabel2: goto mylabel2 } until cx16.r0 -; TODO fix this for vm codegen: repeat cx16.r0 { mylabel3: goto mylabel3 } -; TODO fix this for vm codegen: for cx16.r0L in 0 to 2 { mylabel4: goto mylabel4 } -; TODO fix this for vm codegen: for cx16.r0L in cx16.r1L to cx16.r2L { mylabel5: goto mylabel5 diff --git a/docs/source/todo.rst b/docs/source/todo.rst index 16221a276..933aaf6af 100644 --- a/docs/source/todo.rst +++ b/docs/source/todo.rst @@ -3,7 +3,6 @@ TODO For next release ^^^^^^^^^^^^^^^^ -- ir: fix unit tests - ir: join more codechunks, before ir is written to file - ir: fix removeWeirdBranches in IR optimizer - update diagram in technical.rst?