Website Summary Files Commits Branches @commit @diff @stats
path: root / assembler / src / parser
diff options
context:
space:
mode:
1 files changed, 2 insertions, 12 deletions
-rw-r--r--assembler/src/parser/code_gen.rs14
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);
}