diff options
| author | Henry <mail@henrygressmann.de> | 2026-04-25 16:47:54 +0200 |
|---|---|---|
| committer | Henry <mail@henrygressmann.de> | 2026-04-25 16:47:54 +0200 |
| commit | e6691d035b6948452d6073317451b3f1ff0a24f8 (patch) | |
| tree | b29eee89fcb4e4df1630b2d09a6286e5ddfd620e /crates/parser/src/macros.rs | |
| parent | 4d829a824834b470ada9981ab3ab2caa3e289378 (diff) | |
fix: remove unsafe rewrites
Signed-off-by: Henry <mail@henrygressmann.de>
Diffstat (limited to 'crates/parser/src/macros.rs')
| -rw-r--r-- | crates/parser/src/macros.rs | 17 |
1 files changed, 4 insertions, 13 deletions
diff --git a/crates/parser/src/macros.rs b/crates/parser/src/macros.rs index a6eab61..ebab704 100644 --- a/crates/parser/src/macros.rs +++ b/crates/parser/src/macros.rs @@ -222,25 +222,16 @@ pub(crate) mod optimize { get = $get:ident, tee = $tee:ident, set = $set:ident, - copy = $copy:ident, binop_local_local_tee = $lltee:ident, binop_local_local_set = $llset:ident, binop_local_const_tee = $lctee:ident, binop_local_const_set = $lcset:ident $(, load_local_tee = $loadtee:ident, load_local_set = $loadset:ident)? ) => { - fn $name(instrs: &mut [Instruction], read: usize, instr: Instruction) -> Option<(Instruction, u16)> { + fn $name(instr: Instruction) -> Option<(Instruction, u16)> { Some(match instr { Instruction::$get(local) => (Instruction::Nop, local), - Instruction::$tee(local) => { - let replacement = if let Some([(prev_idx, Instruction::$get(src))]) = previous_non_nop::<1>(instrs, read) { - instrs[prev_idx] = Instruction::Nop; - if src == local { Instruction::Nop } else { Instruction::$copy(src, local) } - } else { - Instruction::$set(local) - }; - (replacement, local) - } + Instruction::$tee(local) => (Instruction::$set(local), local), Instruction::$lltee(op, a, b, local) => (Instruction::$llset(op, a, b, local), local), Instruction::$lctee(op, src, c, local) => (Instruction::$lcset(op, src, c, local), local), $(Instruction::$loadtee(memarg, addr, local) => (Instruction::$loadset(memarg, addr, local), local.into()),)? @@ -261,10 +252,10 @@ pub(crate) mod optimize { ) => {{ if let Some([(lhs_idx, lhs_src), (rhs_idx, rhs_src), (op_idx, raw_op)]) = previous_non_nop::<3>($instrs, $read) - && let Some((lhs_instr, lhs)) = $source($instrs, lhs_idx, lhs_src) + && let Some((lhs_instr, lhs)) = $source(lhs_src) && let Some(op) = $op(raw_op) { - if let Some((rhs_instr, rhs)) = $source($instrs, rhs_idx, rhs_src) { + if let Some((rhs_instr, rhs)) = $source(rhs_src) { $instrs[lhs_idx] = lhs_instr; $instrs[rhs_idx] = rhs_instr; $instrs[op_idx] = Instruction::Nop; |
