From 8baf35e7afd75e4987ae0c8eac226f167bcc657b Mon Sep 17 00:00:00 2001 From: bbb651 Date: Thu, 3 Dec 2020 11:12:32 +0200 Subject: [PATCH] Added AVM2 op "Swap" --- core/src/avm2/activation.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/core/src/avm2/activation.rs b/core/src/avm2/activation.rs index 4186dec7d..a5bbc2f5e 100644 --- a/core/src/avm2/activation.rs +++ b/core/src/avm2/activation.rs @@ -516,6 +516,7 @@ impl<'a, 'gc, 'gc_context> Activation<'a, 'gc, 'gc_context> { Op::RShift => self.op_rshift(), Op::Subtract => self.op_subtract(), Op::SubtractI => self.op_subtract_i(), + Op::Swap => self.op_swap(), Op::URShift => self.op_urshift(), Op::Jump { offset } => self.op_jump(offset, reader), Op::IfTrue { offset } => self.op_if_true(offset, reader), @@ -1731,6 +1732,16 @@ impl<'a, 'gc, 'gc_context> Activation<'a, 'gc, 'gc_context> { Ok(FrameControl::Continue) } + fn op_swap(&mut self) -> Result, Error> { + let value2 = self.context.avm2.pop().coerce_to_i32(self)?; + let value1 = self.context.avm2.pop().coerce_to_i32(self)?; + + self.context.avm2.push(value2); + self.context.avm2.push(value1); + + Ok(FrameControl::Continue) + } + fn op_urshift(&mut self) -> Result, Error> { let value2 = self.context.avm2.pop().coerce_to_u32(self)?; let value1 = self.context.avm2.pop().coerce_to_u32(self)?;