From 0e62f5b7598f84430ae7686e3a9f550d980712b2 Mon Sep 17 00:00:00 2001 From: Irmen de Jong Date: Sun, 21 Feb 2021 23:25:26 +0100 Subject: [PATCH] don't remove subroutines in a block marked with "force_output" --- compiler/src/prog8/optimizer/UnusedCodeRemover.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/compiler/src/prog8/optimizer/UnusedCodeRemover.kt b/compiler/src/prog8/optimizer/UnusedCodeRemover.kt index 809d1fc03..d20137184 100644 --- a/compiler/src/prog8/optimizer/UnusedCodeRemover.kt +++ b/compiler/src/prog8/optimizer/UnusedCodeRemover.kt @@ -28,7 +28,8 @@ internal class UnusedCodeRemover(private val program: Program, val entrypoint = program.entrypoint() program.modules.forEach { callgraph.forAllSubroutines(it) { sub -> - if (sub !== entrypoint && !sub.isAsmSubroutine && (callgraph.calledBy[sub].isNullOrEmpty() || sub.containsNoCodeNorVars())) { + val forceOutput = "force_output" in sub.definingBlock().options() + if (sub !== entrypoint && !forceOutput && !sub.isAsmSubroutine && (callgraph.calledBy[sub].isNullOrEmpty() || sub.containsNoCodeNorVars())) { removals.add(IAstModification.Remove(sub, sub.definingScope())) } }