From 5ddfd96f7311292e222a1bc8287eef33a8e097d8 Mon Sep 17 00:00:00 2001 From: Miquel Sabaté Solà Date: Wed, 18 Dec 2024 16:47:20 +0100 Subject: Reset literal mode on pending nodes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Failing to do so would spill over the previous literal mode into the evaluation of nodes pending to be crunched. Fixes: a9f50efdef40 ("Fix label references on control statements") Signed-off-by: Miquel Sabaté Solà --- lib/xixanta/src/assembler.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'lib/xixanta/src/assembler.rs') diff --git a/lib/xixanta/src/assembler.rs b/lib/xixanta/src/assembler.rs index f42db16..0341753 100644 --- a/lib/xixanta/src/assembler.rs +++ b/lib/xixanta/src/assembler.rs @@ -320,6 +320,7 @@ impl Assembler { self.labels_seen = pn.labels_seen; self.context.force_context_switch(&pn.context); + self.literal_mode = None; match self.evaluate_node(&pn.node) { Ok(mut bundle) => { let current = &self.mappings[pn.mapping].segments[pn.segment]; @@ -2548,6 +2549,7 @@ nop .segment "ONE" lala: rts + .byte $F3 .segment "TWO" code: @@ -2560,12 +2562,12 @@ code: "# .as_bytes(), ) - .unwrap()[0x11..]; // Ignoring HEADER + rts from ONE + .unwrap()[0x12..]; // Ignoring HEADER + first two ONE // "jsr code" from ONE (notice that it's intertwined!) assert_eq!(bundles[0].size, 3); assert_eq!(bundles[0].bytes[0], 0x20); - assert_eq!(bundles[0].bytes[1], 0x04); + assert_eq!(bundles[0].bytes[1], 0x05); assert_eq!(bundles[0].bytes[2], 0x80); // "jsr lala" from TWO @@ -2577,7 +2579,7 @@ code: // "jsr code" from TWO (again, notice that it's intertwined) assert_eq!(bundles[2].size, 3); assert_eq!(bundles[2].bytes[0], 0x20); - assert_eq!(bundles[2].bytes[1], 0x04); + assert_eq!(bundles[2].bytes[1], 0x05); assert_eq!(bundles[2].bytes[2], 0x80); } -- cgit v1.2.3