mirror of
https://github.com/irmen/prog8.git
synced 2026-10-24 18:02:40 +00:00
fix split words arrays on m68k to be not split
This commit is contained in:
1 parent
c7a8e84fd0
commit
8a7922ffcc
45 files changed
+275
-234
No files matched your search
@@ -228,7 +228,7 @@ class IRCodeGen(
|
||||
val shadowInit = IRVariableInitializer.Array(initBytes.map { IRStSymbolicReference.Numeric(it.toDouble()) })
|
||||
val shadowVar = IRStStaticVariable(
|
||||
shadowName,
|
||||
DataType.arrayFor(BaseDataType.UBYTE, false),
|
||||
DataType.arrayFor(BaseDataType.UBYTE),
|
||||
shadowInit,
|
||||
initBytes.size.toUInt(),
|
||||
ZeropageWish.NOT_IN_ZEROPAGE,
|
||||
|
||||
@@ -2,15 +2,15 @@ import io.kotest.assertions.throwables.shouldThrow
|
||||
import io.kotest.core.spec.style.FunSpec
|
||||
import io.kotest.matchers.shouldBe
|
||||
import io.kotest.matchers.shouldNotBe
|
||||
import prog8.code.*
|
||||
import prog8.code.StNodeType
|
||||
import prog8.code.SymbolTableMaker
|
||||
import prog8.code.ast.*
|
||||
import prog8.code.core.*
|
||||
import prog8.code.source.SourceCode
|
||||
import prog8.code.target.VMTarget
|
||||
import prog8.codegen.intermediate.prefixScopedName
|
||||
import prog8.codegen.intermediate.prefixSymbols
|
||||
import prog8.codegen.intermediate.typePrefixChar
|
||||
import prog8tests.helpers.DummyMemsizer
|
||||
import prog8tests.helpers.DummyStringEncoder
|
||||
|
||||
|
||||
class TestSymbolPrefixer : FunSpec({
|
||||
@@ -59,7 +59,7 @@ class TestSymbolPrefixer : FunSpec({
|
||||
// --- full program prefixing tests ---
|
||||
|
||||
test("prefixSymbols prefixes a simple program") {
|
||||
val program = PtProgram("test", DummyMemsizer, DummyStringEncoder)
|
||||
val program = PtProgram("test", VMTarget())
|
||||
val block = PtBlock("main", false, SourceCode.Generated("test"), PtBlock.Options(), Position.DUMMY)
|
||||
val sub = PtSub("start", emptyList(), emptyList(), Position.DUMMY)
|
||||
val varX = PtVariable("x", DataType.UBYTE, ZeropageWish.DONTCARE, 0u, false, null, null, Position.DUMMY)
|
||||
@@ -84,7 +84,7 @@ class TestSymbolPrefixer : FunSpec({
|
||||
}
|
||||
|
||||
test("prefixSymbols handles subroutine parameters") {
|
||||
val program = PtProgram("test", DummyMemsizer, DummyStringEncoder)
|
||||
val program = PtProgram("test", VMTarget())
|
||||
val block = PtBlock("main", false, SourceCode.Generated("test"), PtBlock.Options(), Position.DUMMY)
|
||||
val sub = PtSub("start", emptyList(), emptyList(), Position.DUMMY)
|
||||
val param = PtSubroutineParameter("arg", DataType.UBYTE, null, Position.DUMMY)
|
||||
@@ -100,7 +100,7 @@ class TestSymbolPrefixer : FunSpec({
|
||||
}
|
||||
|
||||
test("prefixSymbols handles constants") {
|
||||
val program = PtProgram("test", DummyMemsizer, DummyStringEncoder)
|
||||
val program = PtProgram("test", VMTarget())
|
||||
val block = PtBlock("main", false, SourceCode.Generated("test"), PtBlock.Options(), Position.DUMMY)
|
||||
val constant = PtConstant("SIZE", DataType.UWORD, 100.0, null, Position.DUMMY)
|
||||
block.add(constant)
|
||||
@@ -114,7 +114,7 @@ class TestSymbolPrefixer : FunSpec({
|
||||
}
|
||||
|
||||
test("prefixSymbols handles labels") {
|
||||
val program = PtProgram("test", DummyMemsizer, DummyStringEncoder)
|
||||
val program = PtProgram("test", VMTarget())
|
||||
val block = PtBlock("main", false, SourceCode.Generated("test"), PtBlock.Options(), Position.DUMMY)
|
||||
val sub = PtSub("start", emptyList(), emptyList(), Position.DUMMY)
|
||||
val label = PtLabel("mylabel", Position.DUMMY)
|
||||
@@ -130,7 +130,7 @@ class TestSymbolPrefixer : FunSpec({
|
||||
}
|
||||
|
||||
test("prefixSymbols handles generated labels without prefixing them") {
|
||||
val program = PtProgram("test", DummyMemsizer, DummyStringEncoder)
|
||||
val program = PtProgram("test", VMTarget())
|
||||
val block = PtBlock("main", false, SourceCode.Generated("test"), PtBlock.Options(), Position.DUMMY)
|
||||
val sub = PtSub("start", emptyList(), emptyList(), Position.DUMMY)
|
||||
val genLabel = PtLabel("p8_label_gen_42", Position.DUMMY)
|
||||
@@ -146,7 +146,7 @@ class TestSymbolPrefixer : FunSpec({
|
||||
}
|
||||
|
||||
test("prefixSymbols handles struct declarations") {
|
||||
val program = PtProgram("test", DummyMemsizer, DummyStringEncoder)
|
||||
val program = PtProgram("test", VMTarget())
|
||||
val block = PtBlock("main", false, SourceCode.Generated("test"), PtBlock.Options(), Position.DUMMY)
|
||||
val struct = PtStructDecl("Point", listOf(
|
||||
PtStructField(DataType.UBYTE, "x", null),
|
||||
@@ -163,7 +163,7 @@ class TestSymbolPrefixer : FunSpec({
|
||||
}
|
||||
|
||||
test("prefixSymbols handles asmsub") {
|
||||
val program = PtProgram("test", DummyMemsizer, DummyStringEncoder)
|
||||
val program = PtProgram("test", VMTarget())
|
||||
val block = PtBlock("main", false, SourceCode.Generated("test"), PtBlock.Options(), Position.DUMMY)
|
||||
val asmsub = PtAsmSub("routine", PtAsmSub.Address(null, null, 0x5000u), setOf(CpuRegister.Y), emptyList(), emptyList(), false, Position.DUMMY)
|
||||
block.add(asmsub)
|
||||
@@ -177,7 +177,7 @@ class TestSymbolPrefixer : FunSpec({
|
||||
}
|
||||
|
||||
test("prefixSymbols handles memmapped variables") {
|
||||
val program = PtProgram("test", DummyMemsizer, DummyStringEncoder)
|
||||
val program = PtProgram("test", VMTarget())
|
||||
val block = PtBlock("main", false, SourceCode.Generated("test"), PtBlock.Options(), Position.DUMMY)
|
||||
val memvar = PtMemMapped("reg", DataType.UBYTE, 0xd020u, null, Position.DUMMY)
|
||||
block.add(memvar)
|
||||
@@ -193,7 +193,7 @@ class TestSymbolPrefixer : FunSpec({
|
||||
// --- noSymbolPrefixing tests ---
|
||||
|
||||
test("noSymbolPrefixing blocks keep their names intact") {
|
||||
val program = PtProgram("test", DummyMemsizer, DummyStringEncoder)
|
||||
val program = PtProgram("test", VMTarget())
|
||||
val libOptions = PtBlock.Options(noSymbolPrefixing = true)
|
||||
val libBlock = PtBlock("lib", false, SourceCode.Generated("test"), libOptions, Position.DUMMY)
|
||||
val libSub = PtSub("func", emptyList(), emptyList(), Position.DUMMY)
|
||||
@@ -209,7 +209,7 @@ class TestSymbolPrefixer : FunSpec({
|
||||
}
|
||||
|
||||
test("references from user block to noSymbolPrefixing block are not prefixed") {
|
||||
val program = PtProgram("test", DummyMemsizer, DummyStringEncoder)
|
||||
val program = PtProgram("test", VMTarget())
|
||||
|
||||
// Library block with no symbol prefixing
|
||||
val libOptions = PtBlock.Options(noSymbolPrefixing = true)
|
||||
@@ -240,7 +240,7 @@ class TestSymbolPrefixer : FunSpec({
|
||||
}
|
||||
|
||||
test("references from noSymbolPrefixing block to regular block get prefixed") {
|
||||
val program = PtProgram("test", DummyMemsizer, DummyStringEncoder)
|
||||
val program = PtProgram("test", VMTarget())
|
||||
|
||||
// Regular user block
|
||||
val userBlock = PtBlock("main", false, SourceCode.Generated("test"), PtBlock.Options(), Position.DUMMY)
|
||||
@@ -267,7 +267,7 @@ class TestSymbolPrefixer : FunSpec({
|
||||
}
|
||||
|
||||
test("identifier references are prefixed according to their target type") {
|
||||
val program = PtProgram("test", DummyMemsizer, DummyStringEncoder)
|
||||
val program = PtProgram("test", VMTarget())
|
||||
val block = PtBlock("main", false, SourceCode.Generated("test"), PtBlock.Options(), Position.DUMMY)
|
||||
val sub = PtSub("start", emptyList(), emptyList(), Position.DUMMY)
|
||||
val varX = PtVariable("x", DataType.UBYTE, ZeropageWish.DONTCARE, 0u, false, null, null, Position.DUMMY)
|
||||
@@ -290,7 +290,7 @@ class TestSymbolPrefixer : FunSpec({
|
||||
}
|
||||
|
||||
test("prefixSymbols exception for unknown identifier") {
|
||||
val program = PtProgram("test", DummyMemsizer, DummyStringEncoder)
|
||||
val program = PtProgram("test", VMTarget())
|
||||
val block = PtBlock("main", false, SourceCode.Generated("test"), PtBlock.Options(), Position.DUMMY)
|
||||
val sub = PtSub("start", emptyList(), emptyList(), Position.DUMMY)
|
||||
val idRef = PtIdentifier("nonexistent", DataType.UBYTE, Position.DUMMY)
|
||||
|
||||
@@ -12,8 +12,7 @@ import prog8.codegen.vm.VmCodeGen
|
||||
import prog8.intermediate.IRSubroutine
|
||||
import prog8.intermediate.Opcode
|
||||
import prog8.intermediate.toAddress
|
||||
import prog8tests.helpers.DummyMemsizer
|
||||
import prog8tests.helpers.DummyStringEncoder
|
||||
|
||||
import prog8tests.helpers.ErrorReporterForTests
|
||||
|
||||
class TestVmCodeGen: FunSpec({
|
||||
@@ -41,8 +40,9 @@ class TestVmCodeGen: FunSpec({
|
||||
// xx += cx16.r0
|
||||
// }
|
||||
//}
|
||||
val compTarget = VMTarget()
|
||||
val codegen = VmCodeGen(false)
|
||||
val program = PtProgram("test", DummyMemsizer, DummyStringEncoder)
|
||||
val program = PtProgram("test", VMTarget())
|
||||
val block = PtBlock("main", false, SourceCode.Generated("test"), PtBlock.Options(), Position.DUMMY)
|
||||
val sub = PtSub("start", emptyList(), emptyList(), Position.DUMMY)
|
||||
sub.add(PtVariable(
|
||||
@@ -153,7 +153,7 @@ class TestVmCodeGen: FunSpec({
|
||||
// Pattern: @(ptr+offset) = @(ptr+offset) + val i.e. ptr[offset] += val
|
||||
// Non-zero offsets are used to avoid potential optimization of the address expression.
|
||||
val codegen = VmCodeGen(false)
|
||||
val program = PtProgram("test", DummyMemsizer, DummyStringEncoder)
|
||||
val program = PtProgram("test", VMTarget())
|
||||
val block = PtBlock("main", false, SourceCode.Generated("test"), PtBlock.Options(), Position.DUMMY)
|
||||
val sub = PtSub("start", emptyList(), emptyList(), Position.DUMMY)
|
||||
sub.add(PtVariable("ptr", DataType.pointer(BaseDataType.UBYTE), ZeropageWish.DONTCARE, 0u, false, null, null, Position.DUMMY))
|
||||
@@ -230,7 +230,7 @@ class TestVmCodeGen: FunSpec({
|
||||
// }
|
||||
//}
|
||||
val codegen = VmCodeGen(false)
|
||||
val program = PtProgram("test", DummyMemsizer, DummyStringEncoder)
|
||||
val program = PtProgram("test", VMTarget())
|
||||
val block = PtBlock("main", false, SourceCode.Generated("test"), PtBlock.Options(), Position.DUMMY)
|
||||
val sub = PtSub("start", emptyList(), emptyList(), Position.DUMMY)
|
||||
sub.add(PtVariable(
|
||||
@@ -302,7 +302,7 @@ class TestVmCodeGen: FunSpec({
|
||||
// }
|
||||
//}
|
||||
val codegen = VmCodeGen(false)
|
||||
val program = PtProgram("test", DummyMemsizer, DummyStringEncoder)
|
||||
val program = PtProgram("test", VMTarget())
|
||||
val block = PtBlock("main", false, SourceCode.Generated("test"), PtBlock.Options(), Position.DUMMY)
|
||||
val sub = PtSub("start", emptyList(), emptyList(), Position.DUMMY)
|
||||
sub.add(PtVariable(
|
||||
@@ -370,7 +370,7 @@ class TestVmCodeGen: FunSpec({
|
||||
// }
|
||||
//}
|
||||
val codegen = VmCodeGen(false)
|
||||
val program = PtProgram("test", DummyMemsizer, DummyStringEncoder)
|
||||
val program = PtProgram("test", VMTarget())
|
||||
val block = PtBlock("main", false, SourceCode.Generated("test"), PtBlock.Options(), Position.DUMMY)
|
||||
val sub = PtSub("start", emptyList(), emptyList(), Position.DUMMY)
|
||||
sub.add(PtVariable(
|
||||
@@ -426,7 +426,7 @@ class TestVmCodeGen: FunSpec({
|
||||
// }
|
||||
//}
|
||||
val codegen = VmCodeGen(false)
|
||||
val program = PtProgram("test", DummyMemsizer, DummyStringEncoder)
|
||||
val program = PtProgram("test", VMTarget())
|
||||
val block = PtBlock("main", false, SourceCode.Generated("test"), PtBlock.Options(), Position.DUMMY)
|
||||
val sub = PtSub("start", emptyList(), emptyList(), Position.DUMMY)
|
||||
sub.add(PtVariable(
|
||||
@@ -498,7 +498,7 @@ class TestVmCodeGen: FunSpec({
|
||||
// }
|
||||
//}
|
||||
val codegen = VmCodeGen(false)
|
||||
val program = PtProgram("test", DummyMemsizer, DummyStringEncoder)
|
||||
val program = PtProgram("test", VMTarget())
|
||||
val block = PtBlock("main", false, SourceCode.Generated("test"), PtBlock.Options(), Position.DUMMY)
|
||||
val sub = PtSub("start", emptyList(), emptyList(), Position.DUMMY)
|
||||
sub.add(PtVariable(
|
||||
@@ -566,7 +566,7 @@ class TestVmCodeGen: FunSpec({
|
||||
// }
|
||||
//}
|
||||
val codegen = VmCodeGen(false)
|
||||
val program = PtProgram("test", DummyMemsizer, DummyStringEncoder)
|
||||
val program = PtProgram("test", VMTarget())
|
||||
val block = PtBlock("main", false, SourceCode.Generated("test"), PtBlock.Options(), Position.DUMMY)
|
||||
val sub = PtSub("start", emptyList(), emptyList(), Position.DUMMY)
|
||||
sub.add(PtVariable(
|
||||
@@ -615,7 +615,7 @@ class TestVmCodeGen: FunSpec({
|
||||
// }
|
||||
//}
|
||||
val codegen = VmCodeGen(false)
|
||||
val program = PtProgram("test", DummyMemsizer, DummyStringEncoder)
|
||||
val program = PtProgram("test", VMTarget())
|
||||
val block = PtBlock("main", false, SourceCode.Generated("test"), PtBlock.Options(), Position.DUMMY)
|
||||
val extsub = PtAsmSub("routine", PtAsmSub.Address(null, null, 0x5000u), setOf(CpuRegister.Y), emptyList(), emptyList(), false, Position.DUMMY)
|
||||
block.add(extsub)
|
||||
@@ -640,7 +640,7 @@ class TestVmCodeGen: FunSpec({
|
||||
|
||||
test("ir codegen for target 'virtual' produces no prefixed names") {
|
||||
val codegen = VmCodeGen(false)
|
||||
val program = PtProgram("test", DummyMemsizer, DummyStringEncoder)
|
||||
val program = PtProgram("test", VMTarget())
|
||||
val block = PtBlock("main", false, SourceCode.Generated("test"), PtBlock.Options(), Position.DUMMY)
|
||||
val sub = PtSub("start", emptyList(), emptyList(), Position.DUMMY)
|
||||
sub.add(PtVariable("x", DataType.UBYTE, ZeropageWish.DONTCARE, 0u, false, null, null, Position.DUMMY))
|
||||
@@ -668,7 +668,7 @@ class TestVmCodeGen: FunSpec({
|
||||
|
||||
test("ir codegen for target 'cx16' via newcodegen produces prefixed names") {
|
||||
val codegen = VmCodeGen(false)
|
||||
val program = PtProgram("test", DummyMemsizer, DummyStringEncoder)
|
||||
val program = PtProgram("test", VMTarget())
|
||||
val block = PtBlock("main", false, SourceCode.Generated("test"), PtBlock.Options(), Position.DUMMY)
|
||||
val sub = PtSub("start", emptyList(), emptyList(), Position.DUMMY)
|
||||
sub.add(PtVariable("x", DataType.UBYTE, ZeropageWish.DONTCARE, 0u, false, null, null, Position.DUMMY))
|
||||
|
||||
Reference in new issue
Block a user