Reset CURRENT_SIZE to Size::Word before parsing a data directive
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
This commit is contained in:
parent
abd160e6e5
commit
e59e0ef83d
|
@ -604,6 +604,7 @@ fn parse_label(pair: pest::iterators::Pair<Rule>, next_pair: Option<pest::iterat
|
||||||
|
|
||||||
fn parse_data(pair: pest::iterators::Pair<Rule>) -> AstNode {
|
fn parse_data(pair: pest::iterators::Pair<Rule>) -> AstNode {
|
||||||
//println!("{:#?}", pair);
|
//println!("{:#?}", pair);
|
||||||
|
*CURRENT_SIZE.lock().unwrap() = Size::Word;
|
||||||
match pair.as_rule() {
|
match pair.as_rule() {
|
||||||
Rule::data_byte => {
|
Rule::data_byte => {
|
||||||
match parse_operand(pair.into_inner().next().unwrap(), false) {
|
match parse_operand(pair.into_inner().next().unwrap(), false) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user