avm2: Add utilities for formatting `Multiname`s and class instances' names.
This commit is contained in:
parent
e8d5274a18
commit
2ec606c5cb
|
@ -602,6 +602,39 @@ impl<'gc> Multiname<'gc> {
|
|||
pub fn params(&self) -> &[Multiname<'gc>] {
|
||||
&self.params[..]
|
||||
}
|
||||
|
||||
pub fn to_qualified_name(&self, mc: MutationContext<'gc, '_>) -> AvmString<'gc> {
|
||||
let mut uri = WString::new();
|
||||
let ns = match self.ns.get(0).filter(|_| self.ns.len() == 1) {
|
||||
Some(Namespace::Any) => "*".into(),
|
||||
Some(ns) => ns.as_uri(),
|
||||
None => "".into(),
|
||||
};
|
||||
|
||||
uri.push_str(&ns);
|
||||
|
||||
if let Some(name) = self.name {
|
||||
uri.push_str(WStr::from_units(b"::"));
|
||||
uri.push_str(&name);
|
||||
} else {
|
||||
uri.push_str(WStr::from_units(b"::*"));
|
||||
}
|
||||
|
||||
if !self.params.is_empty() {
|
||||
uri.push_str(WStr::from_units(b"<"));
|
||||
|
||||
for (i, param) in self.params.iter().enumerate() {
|
||||
uri.push_str(¶m.to_qualified_name(mc));
|
||||
if i < self.params.len() - 1 {
|
||||
uri.push_str(WStr::from_units(b","));
|
||||
}
|
||||
}
|
||||
|
||||
uri.push_str(WStr::from_units(b">"));
|
||||
}
|
||||
|
||||
AvmString::new(mc, uri)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'gc> From<QName<'gc>> for Multiname<'gc> {
|
||||
|
|
|
@ -815,6 +815,13 @@ pub trait TObject<'gc>: 'gc + Collect + Debug + Into<Object<'gc>> + Clone + Copy
|
|||
self.instance_of().map(|cls| cls.inner_class_definition())
|
||||
}
|
||||
|
||||
/// Get this object's class's name, formatted for debug output.
|
||||
fn instance_of_class_name(&self, mc: MutationContext<'gc, '_>) -> AvmString<'gc> {
|
||||
self.instance_of_class_definition()
|
||||
.map(|r| r.read().name().to_qualified_name(mc))
|
||||
.unwrap_or_else(|| "<Unknown type>".into())
|
||||
}
|
||||
|
||||
fn set_instance_of(&self, mc: MutationContext<'gc, '_>, instance_of: ClassObject<'gc>) {
|
||||
let instance_vtable = instance_of.instance_vtable();
|
||||
|
||||
|
|
Loading…
Reference in New Issue