diff options
| Commit | cf56360e18a05da6c55148b2011fd22f8224bfef (patch) | |
|---|---|---|
| Author | 2025-02-14 00:26:44 +0200 | |
| Committer | 2025-02-14 00:26:44 +0200 | |
| Files | 20a362f38e83c95ed885a1c609248bca520c466c /assembler/src/parser | |
| tonkobali-cf56360e18a05da6c55148b2011fd22f8224bfef.tar tonkobali-cf56360e18a05da6c55148b2011fd22f8224bfef.tar.gz tonkobali-cf56360e18a05da6c55148b2011fd22f8224bfef.zip | ||
| Parent | aea15f0a2c265ea1afc04a227eff5cbfaef9c3a3 (diff) | |
fix(assembler): Fix instruction addressing
1 files changed, 2 insertions, 12 deletions
| -rw-r--r-- | assembler/src/parser/code_gen.rs | 14 |
diff --git a/assembler/src/parser/code_gen.rs b/assembler/src/parser/code_gen.rs index 4352e9e..92bf1d1 100644 --- a/assembler/src/parser/code_gen.rs +++ b/assembler/src/parser/code_gen.rs @@ -17,19 +17,9 @@ impl Program { pub(crate) fn collapse_instructions(&mut self) { let mut collapsed = Vec::new(); - let mut update_addrs = Vec::new(); for instr in &mut self.instructions { - update_addrs.push(collapsed.len()); - collapsed.extend(instr.collapse()); - } - - for instr in &mut self.instructions { - for arg in &mut instr.args { - if let Address::Instruction(num) = arg { - *arg = Address::Instruction(update_addrs[*num]); - } - } + collapsed.extend(instr.collapse(collapsed.len())); } self.instructions = collapsed; @@ -45,7 +35,7 @@ impl Program { self.constants.push(match arg { Address::Memory(num) => *num, Address::Constants(num) => absolute_start + *num, - Address::Instruction(num) => constlen + absolute_start + *num, + Address::Instruction(num) => constlen + absolute_start + *num * 3, _ => unreachable!("Definition addresses should've already been removed!"), } as Word); } |
