Implement `coerce_s` and `convert_s`.
This commit is contained in:
parent
90d2964adf
commit
0138300b5a
|
@ -474,10 +474,12 @@ impl<'a, 'gc, 'gc_context> Activation<'a, 'gc, 'gc_context> {
|
||||||
Op::NewFunction { index } => self.op_new_function(method, index),
|
Op::NewFunction { index } => self.op_new_function(method, index),
|
||||||
Op::NewClass { index } => self.op_new_class(method, index),
|
Op::NewClass { index } => self.op_new_class(method, index),
|
||||||
Op::CoerceA => self.op_coerce_a(),
|
Op::CoerceA => self.op_coerce_a(),
|
||||||
|
Op::CoerceS => self.op_coerce_s(),
|
||||||
Op::ConvertB => self.op_convert_b(),
|
Op::ConvertB => self.op_convert_b(),
|
||||||
Op::ConvertI => self.op_convert_i(),
|
Op::ConvertI => self.op_convert_i(),
|
||||||
Op::ConvertU => self.op_convert_u(),
|
Op::ConvertU => self.op_convert_u(),
|
||||||
Op::ConvertD => self.op_convert_d(),
|
Op::ConvertD => self.op_convert_d(),
|
||||||
|
Op::ConvertS => self.op_convert_s(),
|
||||||
Op::Jump { offset } => self.op_jump(offset, reader),
|
Op::Jump { offset } => self.op_jump(offset, reader),
|
||||||
Op::IfTrue { offset } => self.op_if_true(offset, reader),
|
Op::IfTrue { offset } => self.op_if_true(offset, reader),
|
||||||
Op::IfFalse { offset } => self.op_if_false(offset, reader),
|
Op::IfFalse { offset } => self.op_if_false(offset, reader),
|
||||||
|
@ -1313,6 +1315,19 @@ impl<'a, 'gc, 'gc_context> Activation<'a, 'gc, 'gc_context> {
|
||||||
Ok(FrameControl::Continue)
|
Ok(FrameControl::Continue)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn op_coerce_s(&mut self) -> Result<FrameControl<'gc>, Error> {
|
||||||
|
let value = self.context.avm2.pop();
|
||||||
|
|
||||||
|
let coerced = match value {
|
||||||
|
Value::Undefined | Value::Null => Value::Null,
|
||||||
|
_ => value.coerce_to_string(self)?.into(),
|
||||||
|
};
|
||||||
|
|
||||||
|
self.context.avm2.push(coerced);
|
||||||
|
|
||||||
|
Ok(FrameControl::Continue)
|
||||||
|
}
|
||||||
|
|
||||||
fn op_convert_b(&mut self) -> Result<FrameControl<'gc>, Error> {
|
fn op_convert_b(&mut self) -> Result<FrameControl<'gc>, Error> {
|
||||||
let value = self.context.avm2.pop().coerce_to_boolean();
|
let value = self.context.avm2.pop().coerce_to_boolean();
|
||||||
|
|
||||||
|
@ -1337,6 +1352,14 @@ impl<'a, 'gc, 'gc_context> Activation<'a, 'gc, 'gc_context> {
|
||||||
Ok(FrameControl::Continue)
|
Ok(FrameControl::Continue)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn op_convert_s(&mut self) -> Result<FrameControl<'gc>, Error> {
|
||||||
|
let value = self.context.avm2.pop().coerce_to_string(self)?;
|
||||||
|
|
||||||
|
self.context.avm2.push(value);
|
||||||
|
|
||||||
|
Ok(FrameControl::Continue)
|
||||||
|
}
|
||||||
|
|
||||||
fn op_convert_u(&mut self) -> Result<FrameControl<'gc>, Error> {
|
fn op_convert_u(&mut self) -> Result<FrameControl<'gc>, Error> {
|
||||||
let value = self.context.avm2.pop().coerce_to_u32(self)?;
|
let value = self.context.avm2.pop().coerce_to_u32(self)?;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue