diff options
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); } |
