Previously, the following program:
push.16 0
data.16 0
... crashed fox32asm:
thread 'main' panicked at 'internal error: entered unreachable code', src/main.rs:620:22
stack backtrace:
0: rust_begin_unwind
at /usr/src/rustc-1.63.0/library/std/src/panicking.rs:584:5
1: core::panicking::panic_fmt
at /usr/src/rustc-1.63.0/library/core/src/panicking.rs:142:14
2: core::panicking::panic
at /usr/src/rustc-1.63.0/library/core/src/panicking.rs:48:5
3: fox32asm::parse_data
4: fox32asm::build_ast_from_expression
5: fox32asm::main
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
The issue in line 620 is that parse_data expects a constant in the form
of AstNode::Immediate32, but finds an AstNode::Immediate16, because
CURRENT_SIZE was previously set to Half. Set CURRENT_SIZE to Word when
starting to parse a new data directive, in order to fix this issue.
Fixes#4
A common pattern in fox32 software is this:
data.str "Some string here" data.8 0
i.e. a zero- or NUL-terminated string. To make such strings easier to
write, introduce a new directive data.strz, which adds the zero byte
automatically:
data.strz "Some string here"