From e3ca9ae4a81bdd546a2292bfb54958c925b945e0 Mon Sep 17 00:00:00 2001 From: Irmen de Jong Date: Sat, 17 Oct 2026 02:03:40 +0200 Subject: [PATCH] Fix virtual target typed pop results --- .../prog8/codegen/intermediate/BuiltinFuncGen.kt | 6 +++--- compiler/test/vm/TestCompilerVirtual.kt | 15 ++++++++++++++- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/codeGenIntermediate/src/prog8/codegen/intermediate/BuiltinFuncGen.kt b/codeGenIntermediate/src/prog8/codegen/intermediate/BuiltinFuncGen.kt index 66b6420eb..3836f4caf 100644 --- a/codeGenIntermediate/src/prog8/codegen/intermediate/BuiltinFuncGen.kt +++ b/codeGenIntermediate/src/prog8/codegen/intermediate/BuiltinFuncGen.kt @@ -120,21 +120,21 @@ internal class BuiltinFuncGen(private val codeGen: IRCodeGen, private val exprGe val result = mutableListOf() val resultRegister = codeGen.registers.next(IRDataType.WORD) addInstr(result, IRInstructions.pop(IRDataType.WORD, resultRegister), null) - return ExpressionCodeResult(result, IRDataType.BYTE, resultRegister, -1) + return ExpressionCodeResult(result, IRDataType.WORD, resultRegister, -1) } private fun funcPopL(): ExpressionCodeResult { val result = mutableListOf() val resultRegister = codeGen.registers.next(IRDataType.LONG) addInstr(result, IRInstructions.pop(IRDataType.LONG, resultRegister), null) - return ExpressionCodeResult(result, IRDataType.BYTE, resultRegister, -1) + return ExpressionCodeResult(result, IRDataType.LONG, resultRegister, -1) } private fun funcPopF(): ExpressionCodeResult { val result = mutableListOf() val resultRegister = codeGen.registers.next(IRDataType.FLOAT) addInstr(result, IRInstructions.pop(IRDataType.FLOAT, resultRegister), null) - return ExpressionCodeResult(result, IRDataType.BYTE, -1, resultRegister) + return ExpressionCodeResult(result, IRDataType.FLOAT, -1, resultRegister) } private fun funcCopyFromPointer1ToPointer2(call: PtFunctionCall, type: IRDataType): ExpressionCodeResult { diff --git a/compiler/test/vm/TestCompilerVirtual.kt b/compiler/test/vm/TestCompilerVirtual.kt index ee40b38a8..b6dca411f 100644 --- a/compiler/test/vm/TestCompilerVirtual.kt +++ b/compiler/test/vm/TestCompilerVirtual.kt @@ -65,7 +65,7 @@ main { } test("taking address of split arrays works") { - val src=""" + val src = """ main { sub start() { cx16.r0L=0 @@ -885,6 +885,19 @@ main { instructions[10].type shouldBe IRDataType.WORD } + test("word pop comparison uses the word result type") { + val src=$$""" +main { + sub start() { + ubyte a + if popw() != $abcd { + a++ + } + } +}""" + compileText(VMTarget(), false, src, outputDir, writeAssembly = true) shouldNotBe null + } + test("typed address-of a const pointer with non-const array indexing") { val src= """ main {