From dc600cc3ed05e67354fe9c17d851c155314d3c63 Mon Sep 17 00:00:00 2001 From: Irmen de Jong Date: Wed, 23 Dec 2020 02:03:10 +0100 Subject: [PATCH] fix crash when printing Ast for asmsubroutine with multiple return values --- compiler/src/prog8/ast/AstToSourceCode.kt | 15 +++++++++++++-- compiler/src/prog8/compiler/Main.kt | 2 +- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/compiler/src/prog8/ast/AstToSourceCode.kt b/compiler/src/prog8/ast/AstToSourceCode.kt index fd956b9aa..5a743d7be 100644 --- a/compiler/src/prog8/ast/AstToSourceCode.kt +++ b/compiler/src/prog8/ast/AstToSourceCode.kt @@ -172,8 +172,19 @@ class AstToSourceCode(val output: (text: String) -> Unit, val program: Program): output(") ") } if(subroutine.returntypes.any()) { - val rt = subroutine.returntypes.single() - output("-> ${datatypeString(rt)} ") + if(subroutine.asmReturnvaluesRegisters.isNotEmpty()) { + val rts = subroutine.returntypes.zip(subroutine.asmReturnvaluesRegisters).joinToString(", ") { + val dtstr = datatypeString(it.first) + if(it.second.registerOrPair!=null) + "$dtstr @${it.second.registerOrPair}" + else + "$dtstr @${it.second.statusflag}" + } + output("-> $rts ") + } else { + val rts = subroutine.returntypes.joinToString(", ") { datatypeString(it) } + output("-> $rts ") + } } if(subroutine.asmAddress!=null) outputln("= ${subroutine.asmAddress.toHex()}") diff --git a/compiler/src/prog8/compiler/Main.kt b/compiler/src/prog8/compiler/Main.kt index 76f30d600..c96fe45a3 100644 --- a/compiler/src/prog8/compiler/Main.kt +++ b/compiler/src/prog8/compiler/Main.kt @@ -223,7 +223,7 @@ private fun writeAssembly(programAst: Program, errors: ErrorReporter, outputDir: programAst.processAstBeforeAsmGeneration(errors) errors.handle() - printAst(programAst) + // printAst(programAst) CompilationTarget.instance.machine.initializeZeropage(compilerOptions) val assembly = CompilationTarget.instance.asmGenerator(