From 68ce4a1bf044762f7b4953d6520fc939f233787c Mon Sep 17 00:00:00 2001 From: Irmen de Jong Date: Sun, 15 Mar 2020 00:23:54 +0100 Subject: [PATCH] labels are now prefixed with underscore in assembly to fix undefined symbol errors from the assembler --- .../src/prog8/compiler/target/c64/codegen/AsmGen.kt | 11 +++++++++-- examples/lines-circles.p8 | 2 -- examples/test.p8 | 12 +++++++++++- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/compiler/src/prog8/compiler/target/c64/codegen/AsmGen.kt b/compiler/src/prog8/compiler/target/c64/codegen/AsmGen.kt index 4edb4c30b..ca4f1d3f5 100644 --- a/compiler/src/prog8/compiler/target/c64/codegen/AsmGen.kt +++ b/compiler/src/prog8/compiler/target/c64/codegen/AsmGen.kt @@ -750,7 +750,7 @@ internal class AsmGen(private val program: Program, } private fun translate(stmt: Label) { - out(stmt.name) + out("_${stmt.name}") // underscore prefix to make sure it's a local label } private fun translate(scope: AnonymousScope) { @@ -819,7 +819,14 @@ internal class AsmGen(private val program: Program, private fun getJumpTarget(jmp: Jump): String { return when { - jmp.identifier!=null -> asmIdentifierName(jmp.identifier) + jmp.identifier!=null -> { + val target = jmp.identifier.targetStatement(program.namespace) + val asmName = asmIdentifierName(jmp.identifier) + if(target is Label) + "_$asmName" // prefix with underscore to jump to local label + else + asmName + } jmp.generatedLabel!=null -> jmp.generatedLabel jmp.address!=null -> jmp.address.toHex() else -> "????" diff --git a/examples/lines-circles.p8 b/examples/lines-circles.p8 index 28e05c718..1baff3981 100644 --- a/examples/lines-circles.p8 +++ b/examples/lines-circles.p8 @@ -38,7 +38,6 @@ main { ubyte y = y1 if dx >= dy { - ; TODO fix assembler problem when defining label here forever { c64scr.setcc(x, y, 42, 5) if x==x2 @@ -51,7 +50,6 @@ main { } } } else { - ; TODO fix assembler problem when defining label here forever { c64scr.setcc(x, y, 42, 5) if y == y2 diff --git a/examples/test.p8 b/examples/test.p8 index 54d6d1f23..bba8d407a 100644 --- a/examples/test.p8 +++ b/examples/test.p8 @@ -1,8 +1,18 @@ %zeropage basicsafe -main 23232323 { +main { sub start() { + if A>Y { + label1: + Y=0 + goto label1 + } else { + label2: + Y=1 + goto label2 + } + c64scr.print("spstart:") print_stackpointer() sub1()