2021-12-16 19:27:22 +00:00
|
|
|
package prog8tests.codegeneration
|
|
|
|
|
|
|
|
import io.kotest.core.spec.style.FunSpec
|
2022-03-07 20:41:12 +00:00
|
|
|
import io.kotest.matchers.shouldNotBe
|
2022-03-11 19:35:25 +00:00
|
|
|
import prog8.code.target.C64Target
|
2024-02-09 23:54:15 +00:00
|
|
|
import prog8.code.target.VMTarget
|
2021-12-16 19:27:22 +00:00
|
|
|
import prog8tests.helpers.compileText
|
|
|
|
|
|
|
|
|
|
|
|
class TestVariables: FunSpec({
|
|
|
|
|
|
|
|
test("shared variables without refs not removed for inlined asm") {
|
|
|
|
val text = """
|
|
|
|
main {
|
|
|
|
sub start() {
|
2022-01-02 16:07:04 +00:00
|
|
|
ubyte[] @shared arrayvar = [1,2,3,4]
|
|
|
|
str @shared stringvar = "test"
|
2021-12-16 19:27:22 +00:00
|
|
|
ubyte @shared bytevar = 0
|
|
|
|
|
|
|
|
%asm {{
|
2023-12-20 21:20:12 +00:00
|
|
|
lda p8v_arrayvar
|
|
|
|
lda p8v_stringvar
|
|
|
|
lda p8v_bytevar
|
2021-12-16 19:27:22 +00:00
|
|
|
}}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
"""
|
2022-03-07 20:41:12 +00:00
|
|
|
compileText(C64Target(), true, text, writeAssembly = true) shouldNotBe null
|
2021-12-16 19:27:22 +00:00
|
|
|
}
|
2022-01-23 13:23:34 +00:00
|
|
|
|
|
|
|
test("array initialization with array literal") {
|
|
|
|
val text = """
|
|
|
|
main {
|
|
|
|
sub start() {
|
|
|
|
ubyte[] @shared arrayvar = [1,2,3,4]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
"""
|
2022-03-07 20:41:12 +00:00
|
|
|
compileText(C64Target(), true, text, writeAssembly = true) shouldNotBe null
|
2022-01-23 13:23:34 +00:00
|
|
|
}
|
|
|
|
|
2024-02-10 02:07:49 +00:00
|
|
|
test("array initialization with array var assignment") {
|
2022-01-23 13:23:34 +00:00
|
|
|
val text = """
|
|
|
|
main {
|
|
|
|
sub start() {
|
2024-02-10 02:07:49 +00:00
|
|
|
ubyte[3] @shared arrayvar=main.values1
|
|
|
|
arrayvar = main.values2
|
2022-01-23 13:23:34 +00:00
|
|
|
}
|
2024-02-10 02:07:49 +00:00
|
|
|
|
|
|
|
ubyte[] values1 = [1,2,3]
|
|
|
|
ubyte[] values2 = [1,2,3]
|
2022-01-23 13:23:34 +00:00
|
|
|
}
|
|
|
|
"""
|
2024-02-09 23:54:15 +00:00
|
|
|
compileText(VMTarget(), false, text, writeAssembly = true) shouldNotBe null
|
2022-03-07 20:41:12 +00:00
|
|
|
compileText(C64Target(), false, text, writeAssembly = true) shouldNotBe null
|
2022-01-23 13:23:34 +00:00
|
|
|
}
|
2022-06-04 20:25:51 +00:00
|
|
|
|
|
|
|
|
|
|
|
test("pipe character in string literal") {
|
|
|
|
val text = """
|
|
|
|
main {
|
|
|
|
sub start() {
|
|
|
|
str name = "first|second"
|
|
|
|
str name2 = "first | second"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
"""
|
|
|
|
compileText(C64Target(), false, text, writeAssembly = true) shouldNotBe null
|
|
|
|
}
|
2022-11-27 15:50:44 +00:00
|
|
|
|
|
|
|
test("negation of unsigned via casts") {
|
|
|
|
val text = """
|
|
|
|
main {
|
|
|
|
sub start() {
|
|
|
|
cx16.r0L = -(cx16.r0L as byte) as ubyte
|
|
|
|
cx16.r0 = -(cx16.r0 as word) as uword
|
|
|
|
ubyte ub
|
|
|
|
uword uw
|
|
|
|
ub = -(ub as byte) as ubyte
|
|
|
|
uw = -(uw as word) as uword
|
|
|
|
}
|
|
|
|
}
|
|
|
|
"""
|
|
|
|
compileText(C64Target(), false, text, writeAssembly = true) shouldNotBe null
|
|
|
|
}
|
2022-06-04 20:25:51 +00:00
|
|
|
|
2023-04-04 20:11:51 +00:00
|
|
|
test("initialization of boolean array with single value") {
|
|
|
|
val text = """
|
|
|
|
main {
|
|
|
|
sub start() {
|
|
|
|
bool[10] sieve0 = false
|
|
|
|
bool[10] sieve1 = true
|
|
|
|
bool[10] sieve2 = 42
|
|
|
|
sieve0[0] = true
|
|
|
|
sieve1[0] = true
|
|
|
|
sieve2[0] = true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
"""
|
|
|
|
compileText(C64Target(), false, text, writeAssembly = true) shouldNotBe null
|
|
|
|
}
|
2021-12-16 19:27:22 +00:00
|
|
|
})
|