aboutsummaryrefslogtreecommitdiff
path: root/lib/xixanta
diff options
context:
space:
mode:
Diffstat (limited to 'lib/xixanta')
-rw-r--r--lib/xixanta/src/assembler.rs32
1 files changed, 31 insertions, 1 deletions
diff --git a/lib/xixanta/src/assembler.rs b/lib/xixanta/src/assembler.rs
index e8ecd06..6ad2294 100644
--- a/lib/xixanta/src/assembler.rs
+++ b/lib/xixanta/src/assembler.rs
@@ -3167,7 +3167,9 @@ impl<'a> Assembler<'a> {
val.size = 1;
Ok((AddressingMode::RelativeOrZeropage, val))
} else if val.size == 1
- || (val.bytes[1] == 0x00 && !matches!(base.value.value.as_str(), "jmp" | "jsr"))
+ || (val.resolved
+ && val.bytes[1] == 0x00
+ && !matches!(base.value.value.as_str(), "jmp" | "jsr"))
{
self.asan_check_arm(left_arm, &val)?;
val.size = 1;
@@ -4713,6 +4715,34 @@ JAL procedure
}
#[test]
+ fn label_as_macro_argument() {
+ let res = just_bundles(
+ r#"
+.macro MACRO ADDR
+ adc ADDR
+.endmacro
+
+MACRO label
+
+label:
+ nop
+ "#,
+ );
+
+ assert_eq!(res.len(), 2);
+
+ // adc label
+ assert_eq!(res[0].size, 3);
+ assert_eq!(res[0].bytes[0], 0x6D);
+ assert_eq!(res[0].bytes[1], 0x03);
+ assert_eq!(res[0].bytes[2], 0x80);
+
+ // nop
+ assert_eq!(res[1].size, 1);
+ assert_eq!(res[1].bytes[0], 0xEA);
+ }
+
+ #[test]
fn jump_to_next() {
let res = just_assemble(
r#"