(&mut self, base: StackBase, c32: u16, c64: u16, c128: u16)
| 592 | } |
| 593 | |
| 594 | fn emit_dropkeep(&mut self, base: StackBase, c32: u16, c64: u16, c128: u16) { |
| 595 | if base.s32 == 0 && c32 == 0 && base.s64 == 0 && c64 == 0 && base.s128 == 0 && c128 == 0 { |
| 596 | return; |
| 597 | } |
| 598 | |
| 599 | let fits_u8 = base.s32 <= u8::MAX as u16 |
| 600 | && c32 <= u8::MAX as u16 |
| 601 | && base.s64 <= u8::MAX as u16 |
| 602 | && c64 <= u8::MAX as u16 |
| 603 | && base.s128 <= u8::MAX as u16 |
| 604 | && c128 <= u8::MAX as u16; |
| 605 | |
| 606 | if fits_u8 { |
| 607 | self.instructions.push(Instruction::DropKeep { |
| 608 | base32: base.s32, |
| 609 | keep32: c32 as u8, |
| 610 | base64: base.s64, |
| 611 | keep64: c64 as u8, |
| 612 | base128: base.s128, |
| 613 | keep128: c128 as u8, |
| 614 | }); |
| 615 | } else { |
| 616 | self.instructions.push(Instruction::DropKeep32(base.s32, c32)); |
| 617 | self.instructions.push(Instruction::DropKeep64(base.s64, c64)); |
| 618 | self.instructions.push(Instruction::DropKeep128(base.s128, c128)); |
| 619 | } |
| 620 | } |
| 621 | |
| 622 | fn patch_jump(&mut self, jump_ip: usize, target: usize) { |
| 623 | match &mut self.instructions[jump_ip] { |
no test coverage detected