vm: fix crashes when array contains pointers/strings

This commit is contained in:
Irmen de Jong
2022-09-24 13:54:00 +02:00
parent 5c9c7f2c5e
commit c26e116f0e
18 changed files with 175 additions and 30 deletions
@@ -9,7 +9,7 @@ import prog8.code.core.IErrorReporter
import prog8.codegen.intermediate.IRCodeGen
import prog8.intermediate.IRFileReader
import prog8.intermediate.IRFileWriter
import java.nio.file.Path
import kotlin.io.path.Path
class VmCodeGen(private val program: PtProgram,
private val symbolTable: SymbolTable,
@@ -33,7 +33,7 @@ class VmCodeGen(private val program: PtProgram,
companion object {
fun compileIR(listingFilename: String): IAssemblyProgram {
val irProgram = IRFileReader(Path.of(""), listingFilename).readFile()
val irProgram = IRFileReader(Path(""), listingFilename).readFile()
return VmAssemblyProgram(irProgram.name, irProgram)
}
}
@@ -58,7 +58,12 @@ internal class VmVariableAllocator(val st: SymbolTable, val encoding: IStringEnc
}
in ArrayDatatypes -> {
if(variable.onetimeInitializationArrayValue!==null) {
variable.onetimeInitializationArrayValue!!.joinToString(",") { it.number!!.toHex() }
variable.onetimeInitializationArrayValue!!.joinToString(",") {
if(it.number!=null)
it.number!!.toHex()
else
"&${it.addressOf!!.joinToString(".")}"
}
} else {
(1..variable.length!!).joinToString(",") { "0" }
}