avm2: Improve Debug impl for EventObject

This commit is contained in:
Aaron Hill 2022-08-29 21:05:08 -05:00
parent 3417dceca2
commit cc9e283191
1 changed files with 21 additions and 1 deletions

View File

@ -13,6 +13,7 @@ use crate::events::KeyCode;
use crate::string::AvmString;
use gc_arena::{Collect, GcCell, MutationContext};
use std::cell::{Ref, RefMut};
use std::fmt::Debug;
/// A class instance allocator that allocates Event objects.
pub fn event_allocator<'gc>(
@ -31,7 +32,7 @@ pub fn event_allocator<'gc>(
.into())
}
#[derive(Clone, Collect, Debug, Copy)]
#[derive(Clone, Collect, Copy)]
#[collect(no_drop)]
pub struct EventObject<'gc>(GcCell<'gc, EventObjectData<'gc>>);
@ -168,3 +169,22 @@ impl<'gc> TObject<'gc> for EventObject<'gc> {
Some(RefMut::map(self.0.write(mc), |d| &mut d.event))
}
}
impl<'gc> Debug for EventObject<'gc> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
match self.0.try_read() {
Ok(obj) => f
.debug_struct("EventObject")
.field("type", &obj.event.event_type())
.field("class", &obj.base.debug_class_name())
.field("ptr", &self.0.as_ptr())
.finish(),
Err(err) => f
.debug_struct("EventObject")
.field("type", &err)
.field("class", &err)
.field("ptr", &self.0.as_ptr())
.finish(),
}
}
}