From 20ccbfc5871b4d0f6d54b81302e7dd22ea4f3a72 Mon Sep 17 00:00:00 2001 From: Daan Vanden Bosch Date: Tue, 15 Dec 2020 21:29:58 +0100 Subject: [PATCH] Fixed a bug in the AssemblyWorker and tokenizer. Added several ASM-related tests. --- .../phantasmal/lib/asm/AsmTokenization.kt | 8 +- .../world/phantasmal/lib/asm/Assembly.kt | 17 +- .../world/phantasmal/lib/asm/BytecodeIr.kt | 23 +- .../asm/dataFlowAnalysis/ControlFlowGraph.kt | 3 + .../dataFlowAnalysis/GetMapDesignations.kt | 4 +- .../lib/fileFormats/quest/Bytecode.kt | 4 +- .../phantasmal/lib/fileFormats/quest/Quest.kt | 4 +- .../lib/asm/AsmTokenizationTests.kt | 27 ++ .../world/phantasmal/lib/asm/AssemblyTests.kt | 247 ++++++++++++++++-- .../asm/DisassemblyAssemblyRoundTripTests.kt | 72 +++++ .../phantasmal/lib/asm/DisassemblyTests.kt | 108 ++++++++ .../lib/test/BytecodeIrAssertions.kt | 81 ++++++ .../world/phantasmal/lib/test/TestUtils.kt | 20 ++ lib/src/commonTest/resources/quest27_e.bin | Bin 0 -> 81173 bytes .../resources/quest27_e_decompressed.bin | Bin 0 -> 198600 bytes .../observable/value/ValExtensions.kt | 5 +- .../web/assemblyWorker/AssemblyWorker.kt | 36 ++- web/build.gradle.kts | 6 +- 18 files changed, 606 insertions(+), 59 deletions(-) create mode 100644 lib/src/commonTest/kotlin/world/phantasmal/lib/asm/DisassemblyAssemblyRoundTripTests.kt create mode 100644 lib/src/commonTest/kotlin/world/phantasmal/lib/asm/DisassemblyTests.kt create mode 100644 lib/src/commonTest/kotlin/world/phantasmal/lib/test/BytecodeIrAssertions.kt create mode 100644 lib/src/commonTest/resources/quest27_e.bin create mode 100644 lib/src/commonTest/resources/quest27_e_decompressed.bin diff --git a/lib/src/commonMain/kotlin/world/phantasmal/lib/asm/AsmTokenization.kt b/lib/src/commonMain/kotlin/world/phantasmal/lib/asm/AsmTokenization.kt index d6b877c1..d56d1a4f 100644 --- a/lib/src/commonMain/kotlin/world/phantasmal/lib/asm/AsmTokenization.kt +++ b/lib/src/commonMain/kotlin/world/phantasmal/lib/asm/AsmTokenization.kt @@ -296,6 +296,7 @@ private class LineTokenizer(private var line: String) { var prevWasBackSpace = false var terminated = false + loop@ // Use label as workaround for https://youtrack.jetbrains.com/issue/KT-43943. while (hasNext()) { when (peek()) { '\\' -> { @@ -304,7 +305,7 @@ private class LineTokenizer(private var line: String) { '"' -> { if (!prevWasBackSpace) { terminated = true - break + break@loop } prevWasBackSpace = false @@ -317,13 +318,14 @@ private class LineTokenizer(private var line: String) { next() } + val lenWithoutQuotes = markedLen() val value = slice().replace("\\\"", "\"").replace("\\n", "\n") return if (terminated) { next() - Token.Str(col, markedLen() + 2, value) + Token.Str(col, lenWithoutQuotes + 2, value) } else { - Token.UnterminatedString(col, markedLen() + 1, value) + Token.UnterminatedString(col, lenWithoutQuotes + 1, value) } } diff --git a/lib/src/commonMain/kotlin/world/phantasmal/lib/asm/Assembly.kt b/lib/src/commonMain/kotlin/world/phantasmal/lib/asm/Assembly.kt index 03297ea4..eccbf69d 100644 --- a/lib/src/commonMain/kotlin/world/phantasmal/lib/asm/Assembly.kt +++ b/lib/src/commonMain/kotlin/world/phantasmal/lib/asm/Assembly.kt @@ -121,7 +121,6 @@ private class Assembler(private val asm: List, private val inlineStackAr private fun addInstruction( opcode: Opcode, args: List, - stackArgs: List, token: Token?, argTokens: List, stackArgTokens: List, @@ -150,8 +149,8 @@ private class Assembler(private val asm: List, private val inlineStackAr args = argTokens.map { SrcLoc(lineNo, it.col, it.len) }, - stackArgs = stackArgTokens.mapIndexed { i, sat -> - StackArgSrcLoc(lineNo, sat.col, sat.len, stackArgs[i].value) + stackArgs = stackArgTokens.map { sat -> + SrcLoc(lineNo, sat.col, sat.len) }, ) ) @@ -386,7 +385,7 @@ private class Assembler(private val asm: List, private val inlineStackAr addError( identToken.col, errorLength, - "Expected at least $paramCount argument ${if (paramCount == 1) "" else "s"}, got $argCount.", + "Expected at least $paramCount argument${if (paramCount == 1) "" else "s"}, got $argCount.", ) return @@ -411,7 +410,6 @@ private class Assembler(private val asm: List, private val inlineStackAr addInstruction( OP_ARG_PUSHB, listOf(arg), - emptyList(), null, listOf(argToken), emptyList(), @@ -420,7 +418,6 @@ private class Assembler(private val asm: List, private val inlineStackAr addInstruction( OP_ARG_PUSHR, listOf(arg), - emptyList(), null, listOf(argToken), emptyList(), @@ -435,7 +432,6 @@ private class Assembler(private val asm: List, private val inlineStackAr addInstruction( OP_ARG_PUSHB, listOf(arg), - emptyList(), null, listOf(argToken), emptyList(), @@ -451,7 +447,6 @@ private class Assembler(private val asm: List, private val inlineStackAr addInstruction( OP_ARG_PUSHW, listOf(arg), - emptyList(), null, listOf(argToken), emptyList(), @@ -462,7 +457,6 @@ private class Assembler(private val asm: List, private val inlineStackAr addInstruction( OP_ARG_PUSHL, listOf(arg), - emptyList(), null, listOf(argToken), emptyList(), @@ -473,7 +467,6 @@ private class Assembler(private val asm: List, private val inlineStackAr addInstruction( OP_ARG_PUSHL, listOf(Arg((arg.value as Float).toRawBits())), - emptyList(), null, listOf(argToken), emptyList(), @@ -484,7 +477,6 @@ private class Assembler(private val asm: List, private val inlineStackAr addInstruction( OP_ARG_PUSHS, listOf(arg), - emptyList(), null, listOf(argToken), emptyList(), @@ -502,12 +494,11 @@ private class Assembler(private val asm: List, private val inlineStackAr } val (args, argTokens) = insArgAndTokens.unzip() - val (stackArgs, stackArgTokens) = stackArgAndTokens.unzip() + val stackArgTokens = stackArgAndTokens.map { it.second } addInstruction( opcode, args, - stackArgs, identToken, argTokens, stackArgTokens, diff --git a/lib/src/commonMain/kotlin/world/phantasmal/lib/asm/BytecodeIr.kt b/lib/src/commonMain/kotlin/world/phantasmal/lib/asm/BytecodeIr.kt index 8655fee3..52b2ff42 100644 --- a/lib/src/commonMain/kotlin/world/phantasmal/lib/asm/BytecodeIr.kt +++ b/lib/src/commonMain/kotlin/world/phantasmal/lib/asm/BytecodeIr.kt @@ -32,19 +32,19 @@ sealed class Segment( class InstructionSegment( labels: MutableList, val instructions: MutableList, - srcLoc: SegmentSrcLoc, + srcLoc: SegmentSrcLoc = SegmentSrcLoc(mutableListOf()), ) : Segment(SegmentType.Instructions, labels, srcLoc) class DataSegment( labels: MutableList, val data: Buffer, - srcLoc: SegmentSrcLoc, + srcLoc: SegmentSrcLoc = SegmentSrcLoc(mutableListOf()), ) : Segment(SegmentType.Data, labels, srcLoc) class StringSegment( labels: MutableList, var value: String, - srcLoc: SegmentSrcLoc, + srcLoc: SegmentSrcLoc = SegmentSrcLoc(mutableListOf()), ) : Segment(SegmentType.String, labels, srcLoc) /** @@ -55,8 +55,8 @@ class Instruction( /** * Immediate arguments for the opcode. */ - val args: List, - val srcLoc: InstructionSrcLoc?, + val args: List = emptyList(), + val srcLoc: InstructionSrcLoc? = null, ) { /** * Maps each parameter by index to its immediate arguments. @@ -114,7 +114,7 @@ class Instruction( /** * Returns the source locations of the stack arguments for the parameter at the given index. */ - fun getStackArgSrcLocs(paramIndex: Int): List { + fun getStackArgSrcLocs(paramIndex: Int): List { val argSrcLocs = srcLoc?.stackArgs if (argSrcLocs == null || paramIndex > argSrcLocs.lastIndex) { @@ -189,7 +189,7 @@ data class Arg(val value: Any) /** * Position and length of related source assembly code. */ -open class SrcLoc( +class SrcLoc( val lineNo: Int, val col: Int, val len: Int, @@ -200,15 +200,10 @@ open class SrcLoc( */ class InstructionSrcLoc( val mnemonic: SrcLoc?, - val args: List, - val stackArgs: List, + val args: List = emptyList(), + val stackArgs: List = emptyList(), ) -/** - * Locations of an instruction's stack arguments in the source assembly code. - */ -class StackArgSrcLoc(lineNo: Int, col: Int, len: Int, val value: Any) : SrcLoc(lineNo, col, len) - /** * Locations of a segment's labels in the source assembly code. */ diff --git a/lib/src/commonMain/kotlin/world/phantasmal/lib/asm/dataFlowAnalysis/ControlFlowGraph.kt b/lib/src/commonMain/kotlin/world/phantasmal/lib/asm/dataFlowAnalysis/ControlFlowGraph.kt index 583728a4..327b391e 100644 --- a/lib/src/commonMain/kotlin/world/phantasmal/lib/asm/dataFlowAnalysis/ControlFlowGraph.kt +++ b/lib/src/commonMain/kotlin/world/phantasmal/lib/asm/dataFlowAnalysis/ControlFlowGraph.kt @@ -89,6 +89,9 @@ class ControlFlowGraph( } companion object { + fun create(bytecodeIr: BytecodeIr): ControlFlowGraph = + create(bytecodeIr.instructionSegments()) + fun create(segments: List): ControlFlowGraph { val cfg = ControlFlowGraphBuilder() diff --git a/lib/src/commonMain/kotlin/world/phantasmal/lib/asm/dataFlowAnalysis/GetMapDesignations.kt b/lib/src/commonMain/kotlin/world/phantasmal/lib/asm/dataFlowAnalysis/GetMapDesignations.kt index 85661a7b..871e904b 100644 --- a/lib/src/commonMain/kotlin/world/phantasmal/lib/asm/dataFlowAnalysis/GetMapDesignations.kt +++ b/lib/src/commonMain/kotlin/world/phantasmal/lib/asm/dataFlowAnalysis/GetMapDesignations.kt @@ -9,8 +9,8 @@ import world.phantasmal.lib.asm.OP_MAP_DESIGNATE_EX private val logger = KotlinLogging.logger {} fun getMapDesignations( - instructionSegments: List, func0Segment: InstructionSegment, + createCfg: () -> ControlFlowGraph, ): Map { val mapDesignations = mutableMapOf() var cfg: ControlFlowGraph? = null @@ -21,7 +21,7 @@ fun getMapDesignations( OP_MAP_DESIGNATE_EX.code, -> { if (cfg == null) { - cfg = ControlFlowGraph.create(instructionSegments) + cfg = createCfg() } val areaId = getRegisterValue(cfg, inst, inst.args[0].value as Int) diff --git a/lib/src/commonMain/kotlin/world/phantasmal/lib/fileFormats/quest/Bytecode.kt b/lib/src/commonMain/kotlin/world/phantasmal/lib/fileFormats/quest/Bytecode.kt index 07655b0f..a5a0f884 100644 --- a/lib/src/commonMain/kotlin/world/phantasmal/lib/fileFormats/quest/Bytecode.kt +++ b/lib/src/commonMain/kotlin/world/phantasmal/lib/fileFormats/quest/Bytecode.kt @@ -393,13 +393,13 @@ private fun parseInstructionsSegment( // Parse the arguments. try { val args = parseInstructionArguments(cursor, opcode, dcGcFormat) - instructions.add(Instruction(opcode, args, null)) + instructions.add(Instruction(opcode, args)) } catch (e: Exception) { if (lenient) { logger.error(e) { "Exception occurred while parsing arguments for instruction ${opcode.mnemonic}." } - instructions.add(Instruction(opcode, emptyList(), null)) + instructions.add(Instruction(opcode, emptyList())) } else { throw e } diff --git a/lib/src/commonMain/kotlin/world/phantasmal/lib/fileFormats/quest/Quest.kt b/lib/src/commonMain/kotlin/world/phantasmal/lib/fileFormats/quest/Quest.kt index a4cf255a..9ffcd1ec 100644 --- a/lib/src/commonMain/kotlin/world/phantasmal/lib/fileFormats/quest/Quest.kt +++ b/lib/src/commonMain/kotlin/world/phantasmal/lib/fileFormats/quest/Quest.kt @@ -9,6 +9,7 @@ import world.phantasmal.lib.Episode import world.phantasmal.lib.asm.BytecodeIr import world.phantasmal.lib.asm.InstructionSegment import world.phantasmal.lib.asm.OP_SET_EPISODE +import world.phantasmal.lib.asm.dataFlowAnalysis.ControlFlowGraph import world.phantasmal.lib.asm.dataFlowAnalysis.getMapDesignations import world.phantasmal.lib.compression.prs.prsDecompress import world.phantasmal.lib.cursor.Cursor @@ -105,7 +106,8 @@ fun parseBinDatToQuest( npc.episode = episode } - mapDesignations = getMapDesignations(instructionSegments, label0Segment) + mapDesignations = + getMapDesignations(label0Segment) { ControlFlowGraph.create(bytecodeIr) } } else { result.addProblem(Severity.Warning, "No instruction segment for label 0 found.") } diff --git a/lib/src/commonTest/kotlin/world/phantasmal/lib/asm/AsmTokenizationTests.kt b/lib/src/commonTest/kotlin/world/phantasmal/lib/asm/AsmTokenizationTests.kt index 40f7a387..51f7a435 100644 --- a/lib/src/commonTest/kotlin/world/phantasmal/lib/asm/AsmTokenizationTests.kt +++ b/lib/src/commonTest/kotlin/world/phantasmal/lib/asm/AsmTokenizationTests.kt @@ -55,4 +55,31 @@ class AsmTokenizationTests : LibTestSuite() { assertEquals(4, tokens4[0].col) assertEquals(2, tokens4[0].len) } + + @Test + fun strings_are_parsed_as_Str_tokens() { + val tokens0 = tokenizeLine(""" "one line" """) + + assertEquals(1, tokens0.size) + assertEquals(Token.Str::class, tokens0[0]::class) + assertEquals("one line", (tokens0[0] as Token.Str).value) + assertEquals(2, tokens0[0].col) + assertEquals(10, tokens0[0].len) + + val tokens1 = tokenizeLine(""" "two\nlines" """) + + assertEquals(1, tokens1.size) + assertEquals(Token.Str::class, tokens1[0]::class) + assertEquals("two\nlines", (tokens1[0] as Token.Str).value) + assertEquals(2, tokens1[0].col) + assertEquals(12, tokens1[0].len) + + val tokens2 = tokenizeLine(""" "is \"this\" escaped?" """) + + assertEquals(1, tokens2.size) + assertEquals(Token.Str::class, tokens2[0]::class) + assertEquals("is \"this\" escaped?", (tokens2[0] as Token.Str).value) + assertEquals(2, tokens2[0].col) + assertEquals(22, tokens2[0].len) + } } diff --git a/lib/src/commonTest/kotlin/world/phantasmal/lib/asm/AssemblyTests.kt b/lib/src/commonTest/kotlin/world/phantasmal/lib/asm/AssemblyTests.kt index 1401ac4d..b6e32dda 100644 --- a/lib/src/commonTest/kotlin/world/phantasmal/lib/asm/AssemblyTests.kt +++ b/lib/src/commonTest/kotlin/world/phantasmal/lib/asm/AssemblyTests.kt @@ -2,35 +2,252 @@ package world.phantasmal.lib.asm import world.phantasmal.core.Success import world.phantasmal.lib.test.LibTestSuite +import world.phantasmal.lib.test.assertDeepEquals import kotlin.test.Test -import kotlin.test.assertEquals import kotlin.test.assertTrue class AssemblyTests : LibTestSuite() { @Test - fun assemble_basic_script() { + fun basic_script() { val result = assemble(""" 0: set_episode 0 + bb_map_designate 1, 2, 3, 4 set_floor_handler 0, 150 - set_floor_handler 1, 151 - set_qt_success 250 - bb_map_designate 0, 0, 0, 0 - bb_map_designate 1, 1, 0, 0 ret - 1: - ret - 250: - gset 101 - window_msg "You've been awarded 500 Meseta." - bgm 1 - winend - pl_add_meseta 0, 500 + 150: + set_mainwarp 1 ret """.trimIndent().split('\n')) assertTrue(result is Success) assertTrue(result.problems.isEmpty()) - assertEquals(3, result.value.segments.size) + + assertDeepEquals(BytecodeIr(listOf( + InstructionSegment( + labels = mutableListOf(0), + instructions = mutableListOf( + Instruction( + opcode = OP_SET_EPISODE, + args = listOf(Arg(0)), + srcLoc = InstructionSrcLoc( + mnemonic = SrcLoc(2, 5, 11), + args = listOf(SrcLoc(2, 17, 1)), + stackArgs = emptyList(), + ), + ), + Instruction( + opcode = OP_BB_MAP_DESIGNATE, + args = listOf(Arg(1), Arg(2), Arg(3), Arg(4)), + srcLoc = InstructionSrcLoc( + mnemonic = SrcLoc(3, 5, 16), + args = listOf( + SrcLoc(3, 22, 1), + SrcLoc(3, 25, 1), + SrcLoc(3, 28, 1), + SrcLoc(3, 31, 1), + ), + stackArgs = emptyList(), + ), + ), + Instruction( + opcode = OP_ARG_PUSHL, + args = listOf(Arg(0)), + srcLoc = InstructionSrcLoc( + mnemonic = null, + args = listOf(SrcLoc(4, 23, 1)), + stackArgs = emptyList(), + ), + ), + Instruction( + opcode = OP_ARG_PUSHW, + args = listOf(Arg(150)), + srcLoc = InstructionSrcLoc( + mnemonic = null, + args = listOf(SrcLoc(4, 26, 3)), + stackArgs = emptyList(), + ), + ), + Instruction( + opcode = OP_SET_FLOOR_HANDLER, + args = emptyList(), + srcLoc = InstructionSrcLoc( + mnemonic = SrcLoc(4, 5, 17), + args = emptyList(), + stackArgs = listOf( + SrcLoc(4, 23, 1), + SrcLoc(4, 26, 3), + ), + ), + ), + Instruction( + opcode = OP_RET, + args = emptyList(), + srcLoc = InstructionSrcLoc( + mnemonic = SrcLoc(5, 5, 3), + args = emptyList(), + stackArgs = emptyList(), + ), + ), + ), + srcLoc = SegmentSrcLoc(labels = mutableListOf(SrcLoc(1, 1, 2))), + ), + InstructionSegment( + labels = mutableListOf(150), + instructions = mutableListOf( + Instruction( + opcode = OP_ARG_PUSHL, + args = listOf(Arg(1)), + srcLoc = InstructionSrcLoc( + mnemonic = null, + args = listOf(SrcLoc(7, 18, 1)), + stackArgs = emptyList(), + ), + ), + Instruction( + opcode = OP_SET_MAINWARP, + args = emptyList(), + srcLoc = InstructionSrcLoc( + mnemonic = SrcLoc(7, 5, 12), + args = emptyList(), + stackArgs = listOf(SrcLoc(7, 18, 1)), + ), + ), + Instruction( + opcode = OP_RET, + args = emptyList(), + srcLoc = InstructionSrcLoc( + mnemonic = SrcLoc(8, 5, 3), + args = emptyList(), + stackArgs = emptyList(), + ), + ), + ), + srcLoc = SegmentSrcLoc(labels = mutableListOf(SrcLoc(6, 1, 4))), + ) + )), result.value) + } + + @Test + fun pass_register_value_via_stack_with_inline_args() { + val result = assemble(""" + 0: + leti r255, 7 + exit r255 + ret + """.trimIndent().split('\n')) + + assertTrue(result is Success) + assertTrue(result.problems.isEmpty()) + + assertDeepEquals(BytecodeIr( + listOf( + InstructionSegment( + labels = mutableListOf(0), + instructions = mutableListOf( + Instruction( + opcode = OP_LETI, + args = listOf(Arg(255), Arg(7)), + srcLoc = InstructionSrcLoc( + mnemonic = SrcLoc(2, 5, 4), + args = listOf(SrcLoc(2, 10, 4), SrcLoc(2, 16, 1)), + stackArgs = emptyList(), + ), + ), + Instruction( + opcode = OP_ARG_PUSHR, + args = listOf(Arg(255)), + srcLoc = InstructionSrcLoc( + mnemonic = null, + args = listOf(SrcLoc(3, 10, 4)), + stackArgs = emptyList(), + ), + ), + Instruction( + opcode = OP_EXIT, + args = emptyList(), + srcLoc = InstructionSrcLoc( + mnemonic = SrcLoc(3, 5, 4), + args = emptyList(), + stackArgs = listOf(SrcLoc(3, 10, 4)), + ), + ), + Instruction( + opcode = OP_RET, + args = emptyList(), + srcLoc = InstructionSrcLoc( + mnemonic = SrcLoc(4, 5, 3), + args = emptyList(), + stackArgs = emptyList(), + ), + ), + ), + srcLoc = SegmentSrcLoc( + labels = mutableListOf(SrcLoc(1, 1, 2)) + ), + ) + ) + ), result.value) + } + + @Test + fun pass_register_reference_via_stack_with_inline_args() { + val result = assemble(""" + 0: + p_dead_v3 r200, 3 + ret + """.trimIndent().split('\n')) + + assertTrue(result is Success) + assertTrue(result.problems.isEmpty()) + + assertDeepEquals(BytecodeIr( + listOf( + InstructionSegment( + labels = mutableListOf(0), + instructions = mutableListOf( + Instruction( + opcode = OP_ARG_PUSHB, + args = listOf(Arg(200)), + srcLoc = InstructionSrcLoc( + mnemonic = null, + args = listOf(SrcLoc(2, 15, 4)), + stackArgs = emptyList(), + ), + ), + Instruction( + opcode = OP_ARG_PUSHL, + args = listOf(Arg(3)), + srcLoc = InstructionSrcLoc( + mnemonic = null, + args = listOf(SrcLoc(2, 21, 1)), + stackArgs = emptyList(), + ), + ), + Instruction( + opcode = OP_P_DEAD_V3, + args = emptyList(), + srcLoc = InstructionSrcLoc( + mnemonic = SrcLoc(2, 5, 9), + args = emptyList(), + stackArgs = listOf(SrcLoc(2, 15, 4), SrcLoc(2, 21, 1)), + ), + ), + Instruction( + opcode = OP_RET, + args = emptyList(), + srcLoc = InstructionSrcLoc( + mnemonic = SrcLoc(3, 5, 3), + args = emptyList(), + stackArgs = emptyList(), + ), + ), + ), + srcLoc = SegmentSrcLoc( + labels = mutableListOf(SrcLoc(1, 1, 2)) + ), + ) + ) + ), result.value) } } diff --git a/lib/src/commonTest/kotlin/world/phantasmal/lib/asm/DisassemblyAssemblyRoundTripTests.kt b/lib/src/commonTest/kotlin/world/phantasmal/lib/asm/DisassemblyAssemblyRoundTripTests.kt new file mode 100644 index 00000000..a172dcf6 --- /dev/null +++ b/lib/src/commonTest/kotlin/world/phantasmal/lib/asm/DisassemblyAssemblyRoundTripTests.kt @@ -0,0 +1,72 @@ +package world.phantasmal.lib.asm + +import world.phantasmal.core.Success +import world.phantasmal.lib.fileFormats.quest.parseBin +import world.phantasmal.lib.fileFormats.quest.parseBytecode +import world.phantasmal.lib.test.LibTestSuite +import world.phantasmal.lib.test.assertDeepEquals +import world.phantasmal.lib.test.readFile +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue + +class DisassemblyAssemblyRoundTripTests : LibTestSuite() { + @Test + fun assembling_disassembled_bytecode_should_result_in_the_same_IR() = asyncTest { + assembling_disassembled_bytecode_should_result_in_the_same_IR(inlineStackArgs = false) + } + + @Test + fun assembling_disassembled_bytecode_should_result_in_the_same_IR_inline_args() = asyncTest { + assembling_disassembled_bytecode_should_result_in_the_same_IR(inlineStackArgs = true) + } + + private suspend fun assembling_disassembled_bytecode_should_result_in_the_same_IR( + inlineStackArgs: Boolean, + ) { + val bin = parseBin(readFile("/quest27_e_decompressed.bin")) + val expectedIr = parseBytecode( + bin.bytecode, + bin.labelOffsets, + setOf(0), + dcGcFormat = false, + lenient = false, + ).unwrap() + + val assemblyResult = + assemble(disassemble(expectedIr, inlineStackArgs), inlineStackArgs) + + assertTrue(assemblyResult.problems.isEmpty()) + assertTrue(assemblyResult is Success) + assertDeepEquals(expectedIr, assemblyResult.value, ignoreSrcLocs = true) + } + + @Test + fun disassembling_assembled_bytecode_should_result_in_the_same_ASM() = asyncTest { + disassembling_assembled_bytecode_should_result_in_the_same_ASM(inlineStackArgs = false) + } + + @Test + fun disassembling_assembled_bytecode_should_result_in_the_same_ASM_inline_args() = asyncTest { + disassembling_assembled_bytecode_should_result_in_the_same_ASM(inlineStackArgs = true) + } + + private suspend fun disassembling_assembled_bytecode_should_result_in_the_same_ASM( + inlineStackArgs: Boolean, + ) { + val bin = parseBin(readFile("/quest27_e_decompressed.bin")) + val ir = parseBytecode( + bin.bytecode, + bin.labelOffsets, + setOf(0), + dcGcFormat = false, + lenient = false, + ).unwrap() + + val expectedAsm = disassemble(ir, inlineStackArgs) + val actualAsm = + disassemble(assemble(expectedAsm, inlineStackArgs).unwrap(), inlineStackArgs) + + assertDeepEquals(expectedAsm, actualAsm, ::assertEquals) + } +} diff --git a/lib/src/commonTest/kotlin/world/phantasmal/lib/asm/DisassemblyTests.kt b/lib/src/commonTest/kotlin/world/phantasmal/lib/asm/DisassemblyTests.kt new file mode 100644 index 00000000..4289480c --- /dev/null +++ b/lib/src/commonTest/kotlin/world/phantasmal/lib/asm/DisassemblyTests.kt @@ -0,0 +1,108 @@ +package world.phantasmal.lib.asm + +import world.phantasmal.lib.test.LibTestSuite +import kotlin.test.Test +import kotlin.test.assertEquals + +class DisassemblyTests : LibTestSuite() { + @Test + fun vararg_instructions() { + val ir = BytecodeIr(listOf( + InstructionSegment( + labels = mutableListOf(0), + instructions = mutableListOf( + Instruction( + opcode = OP_SWITCH_JMP, + args = listOf( + Arg(90), + Arg(100), + Arg(101), + Arg(102), + ), + ), + Instruction( + opcode = OP_RET, + args = emptyList() + ), + ), + ) + )) + + val asm = """ + |.code + | + |0: + | switch_jmp r90, 100, 101, 102 + | ret + | + """.trimMargin() + + testWithAllOptions(ir, asm, asm) + } + + // arg_push* instructions should always be output when in a va list whether inline stack + // arguments is on or off. + @Test + fun va_list_instructions() { + val ir = BytecodeIr(listOf( + InstructionSegment( + labels = mutableListOf(0), + instructions = mutableListOf( + Instruction( + opcode = OP_VA_START, + ), + Instruction( + opcode = OP_ARG_PUSHW, + args = listOf(Arg(1337)), + ), + Instruction( + opcode = OP_VA_CALL, + args = listOf(Arg(100)), + ), + Instruction( + opcode = OP_VA_END, + ), + Instruction( + opcode = OP_RET, + ), + ), + ) + )) + + val asm = """ + |.code + | + |0: + | va_start + | arg_pushw 1337 + | va_call 100 + | va_end + | ret + | + """.trimMargin() + + testWithAllOptions(ir, asm, asm) + } + + private fun testWithAllOptions( + ir: BytecodeIr, + expectedInlineAsm: String, + expectedManualAsm: String, + ) { + val asmInline = disassemble(ir, inlineStackArgs = true) + + assertEquals( + expectedInlineAsm.split('\n'), + asmInline, + "With inlineStackArgs", + ) + + val asmManual = disassemble(ir, inlineStackArgs = false) + + assertEquals( + expectedManualAsm.split('\n'), + asmManual, + "Without inlineStackArgs", + ) + } +} diff --git a/lib/src/commonTest/kotlin/world/phantasmal/lib/test/BytecodeIrAssertions.kt b/lib/src/commonTest/kotlin/world/phantasmal/lib/test/BytecodeIrAssertions.kt new file mode 100644 index 00000000..15de707d --- /dev/null +++ b/lib/src/commonTest/kotlin/world/phantasmal/lib/test/BytecodeIrAssertions.kt @@ -0,0 +1,81 @@ +package world.phantasmal.lib.test + +import world.phantasmal.lib.asm.* +import kotlin.test.assertEquals +import kotlin.test.assertNotNull +import kotlin.test.assertNull + +fun assertDeepEquals(expected: BytecodeIr, actual: BytecodeIr, ignoreSrcLocs: Boolean = false) { + assertDeepEquals(expected.segments, + actual.segments + ) { a, b -> assertDeepEquals(a, b, ignoreSrcLocs) } +} + +fun assertDeepEquals(expected: Segment, actual: Segment, ignoreSrcLocs: Boolean = false) { + assertEquals(expected::class, actual::class) + assertDeepEquals(expected.labels, actual.labels, ::assertEquals) + + if (!ignoreSrcLocs) { + assertDeepEquals(expected.srcLoc, actual.srcLoc) + } + + when (expected) { + is InstructionSegment -> { + actual as InstructionSegment + assertDeepEquals(expected.instructions, actual.instructions) { a, b -> + assertDeepEquals(a, b, ignoreSrcLocs) + } + } + is DataSegment -> { + actual as DataSegment + assertDeepEquals(expected.data, actual.data) + } + is StringSegment -> { + actual as StringSegment + assertEquals(expected.value, actual.value) + } + } +} + +fun assertDeepEquals(expected: Instruction, actual: Instruction, ignoreSrcLocs: Boolean = false) { + assertEquals(expected.opcode, actual.opcode) + assertDeepEquals(expected.args, actual.args, ::assertEquals) + + if (!ignoreSrcLocs) { + assertDeepEquals(expected.srcLoc, actual.srcLoc) + } +} + +fun assertDeepEquals(expected: SrcLoc?, actual: SrcLoc?) { + if (expected == null) { + assertNull(actual) + return + } + + assertNotNull(actual) + assertEquals(expected.lineNo, actual.lineNo) + assertEquals(expected.col, actual.col) + assertEquals(expected.len, actual.len) +} + +fun assertDeepEquals(expected: InstructionSrcLoc?, actual: InstructionSrcLoc?) { + if (expected == null) { + assertNull(actual) + return + } + + assertNotNull(actual) + assertDeepEquals(expected.mnemonic, actual.mnemonic) + assertDeepEquals(expected.args, actual.args, ::assertDeepEquals) + assertDeepEquals(expected.stackArgs, actual.stackArgs, ::assertDeepEquals) +} + +fun assertDeepEquals(expected: SegmentSrcLoc?, actual: SegmentSrcLoc?) { + if (expected == null) { + assertNull(actual) + return + } + + assertNotNull(actual) + assertDeepEquals(expected.labels, actual.labels, ::assertDeepEquals) +} diff --git a/lib/src/commonTest/kotlin/world/phantasmal/lib/test/TestUtils.kt b/lib/src/commonTest/kotlin/world/phantasmal/lib/test/TestUtils.kt index 91835e45..5bf99985 100644 --- a/lib/src/commonTest/kotlin/world/phantasmal/lib/test/TestUtils.kt +++ b/lib/src/commonTest/kotlin/world/phantasmal/lib/test/TestUtils.kt @@ -3,7 +3,9 @@ package world.phantasmal.lib.test import world.phantasmal.core.Success import world.phantasmal.lib.asm.InstructionSegment import world.phantasmal.lib.asm.assemble +import world.phantasmal.lib.buffer.Buffer import world.phantasmal.lib.cursor.Cursor +import kotlin.test.assertEquals import kotlin.test.assertTrue expect suspend fun readFile(path: String): Cursor @@ -16,3 +18,21 @@ fun toInstructions(assembly: String): List { return result.value.instructionSegments() } + +fun assertDeepEquals(expected: List, actual: List, assertDeepEquals: (T, T) -> Unit) { + assertEquals(expected.size, actual.size) + + for (i in actual.indices) { + assertDeepEquals(expected[i], actual[i]) + } +} + +fun assertDeepEquals(expected: Buffer, actual: Buffer): Boolean { + if (expected.size != actual.size) return false + + for (i in 0 until expected.size) { + if (expected.getByte(i) != actual.getByte(i)) return false + } + + return true +} diff --git a/lib/src/commonTest/resources/quest27_e.bin b/lib/src/commonTest/resources/quest27_e.bin new file mode 100644 index 0000000000000000000000000000000000000000..2d72d20aab4c820ee6dc66b492ad0d2af3107f18 GIT binary patch literal 81173 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 F{{uwpWl;bC literal 0 HcmV?d00001 diff --git a/lib/src/commonTest/resources/quest27_e_decompressed.bin b/lib/src/commonTest/resources/quest27_e_decompressed.bin new file mode 100644 index 0000000000000000000000000000000000000000..1aa9562345d3628ec78cdd8534d8affb48db626e GIT binary patch literal 198600 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%0DE1GXY%u=Q8KVj*(;#~7 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.and(other: Val): Val = infix fun Val.or(other: Val): Val = map(this, other) { a, b -> a || b } -// Use != because of https://youtrack.jetbrains.com/issue/KT-31277. infix fun Val.xor(other: Val): Val = + // Use != because of https://youtrack.jetbrains.com/issue/KT-31277. map(this, other) { a, b -> a != b } operator fun Val.not(): Val = map { !it } @@ -42,6 +42,9 @@ operator fun Val.not(): Val = map { !it } operator fun Val.plus(other: Int): Val = map { it + other } +operator fun Val.minus(other: Int): Val = + map { it - other } + fun Val.isEmpty(): Val = map { it.isEmpty() } diff --git a/web/assembly-worker/src/main/kotlin/world/phantasmal/web/assemblyWorker/AssemblyWorker.kt b/web/assembly-worker/src/main/kotlin/world/phantasmal/web/assemblyWorker/AssemblyWorker.kt index 0afe35b8..0d02afcc 100644 --- a/web/assembly-worker/src/main/kotlin/world/phantasmal/web/assemblyWorker/AssemblyWorker.kt +++ b/web/assembly-worker/src/main/kotlin/world/phantasmal/web/assemblyWorker/AssemblyWorker.kt @@ -2,16 +2,31 @@ package world.phantasmal.web.assemblyWorker import world.phantasmal.core.* import world.phantasmal.lib.asm.* +import world.phantasmal.lib.asm.dataFlowAnalysis.ControlFlowGraph import world.phantasmal.lib.asm.dataFlowAnalysis.getMapDesignations +import world.phantasmal.lib.asm.dataFlowAnalysis.getStackValue import world.phantasmal.web.shared.* import world.phantasmal.web.shared.AssemblyProblem import kotlin.math.min import world.phantasmal.lib.asm.AssemblyProblem as AssemblerAssemblyProblem class AssemblyWorker(private val sendMessage: (ServerMessage) -> Unit) { + // User input. private var inlineStackArgs: Boolean = true private val asm: JsArray = jsArrayOf() + + // Output. private var bytecodeIr = BytecodeIr(emptyList()) + private var problems: List? = null + + // Derived data. + private var _cfg: ControlFlowGraph? = null + private val cfg: ControlFlowGraph + get() { + if (_cfg == null) _cfg = ControlFlowGraph.create(bytecodeIr) + return _cfg!! + } + private var mapDesignations: Map? = null fun receiveMessage(message: ClientMessage) = @@ -137,6 +152,8 @@ class AssemblyWorker(private val sendMessage: (ServerMessage) -> Unit) { } private fun processAsm() { + _cfg = null + val assemblyResult = assemble(asm.asArray().toList(), inlineStackArgs) @Suppress("UNCHECKED_CAST") @@ -144,7 +161,10 @@ class AssemblyWorker(private val sendMessage: (ServerMessage) -> Unit) { AssemblyProblem(it.severity, it.uiMessage) } - sendMessage(ServerNotification.Problems(problems)) + if (problems != this.problems) { + this.problems = problems + sendMessage(ServerNotification.Problems(problems)) + } if (assemblyResult is Success) { bytecodeIr = assemblyResult.value @@ -152,9 +172,9 @@ class AssemblyWorker(private val sendMessage: (ServerMessage) -> Unit) { val instructionSegments = bytecodeIr.instructionSegments() instructionSegments.find { 0 in it.labels }?.let { label0Segment -> - val designations = getMapDesignations(instructionSegments, label0Segment) + val designations = getMapDesignations(label0Segment) { cfg } - if (mapDesignations != designations) { + if (designations != mapDesignations) { mapDesignations = designations sendMessage(ServerNotification.MapDesignations( designations @@ -349,10 +369,14 @@ class AssemblyWorker(private val sendMessage: (ServerMessage) -> Unit) { // Stack arguments. val argSrcLocs = inst.getStackArgSrcLocs(paramIdx) - for (argSrcLoc in argSrcLocs) { + for ((i, argSrcLoc) in argSrcLocs.withIndex()) { if (positionInside(lineNo, col, argSrcLoc)) { - val label = argSrcLoc.value as Int - result = getLabelDefinitions(label) + val labelValues = getStackValue(cfg, inst, argSrcLocs.lastIndex - i) + + if (labelValues.size <= 5) { + result = labelValues.flatMap(::getLabelDefinitions) + } + break@loop } } diff --git a/web/build.gradle.kts b/web/build.gradle.kts index a9d3092e..9981f852 100644 --- a/web/build.gradle.kts +++ b/web/build.gradle.kts @@ -53,10 +53,12 @@ dependencies { testImplementation(project(":test-utils")) } -// TODO: Figure out how to trigger this task automatically. -tasks.register("copyAssemblyWorkerJs") { +val copyAssemblyWorkerJsTask = tasks.register("copyAssemblyWorkerJs") { val workerDist = project(":web:assembly-worker").buildDir.resolve("distributions") from(workerDist.resolve("assembly-worker.js"), workerDist.resolve("assembly-worker.js.map")) into(buildDir.resolve("processedResources/js/main")) dependsOn(":web:assembly-worker:build") } + +// TODO: Figure out how to make this work with --continuous. +tasks.getByName("processResources").dependsOn(copyAssemblyWorkerJsTask)