avm2: Use interned "*" character in `PropertyClass::get_name` and `Multiname::to_qualified_name_or_star`
This commit is contained in:
parent
3438966a04
commit
b3769aa6f2
|
@ -302,7 +302,8 @@ fn describe_internal_body<'gc>(
|
|||
if !flags.contains(DescribeTypeFlags::INCLUDE_VARIABLES) {
|
||||
continue;
|
||||
}
|
||||
let prop_class_name = vtable.slot_class_name(mc, *slot_id)?;
|
||||
let prop_class_name =
|
||||
vtable.slot_class_name(&mut activation.borrow_gc(), *slot_id)?;
|
||||
|
||||
let access = match prop {
|
||||
Property::ConstSlot { .. } => "readonly",
|
||||
|
@ -356,7 +357,10 @@ fn describe_internal_body<'gc>(
|
|||
continue;
|
||||
}
|
||||
|
||||
let return_type_name = method.method.return_type().to_qualified_name_or_star(mc);
|
||||
let return_type_name = method
|
||||
.method
|
||||
.return_type()
|
||||
.to_qualified_name_or_star(&mut activation.borrow_gc());
|
||||
let declared_by = method.class;
|
||||
|
||||
if flags.contains(DescribeTypeFlags::HIDE_OBJECT)
|
||||
|
@ -453,7 +457,8 @@ fn describe_internal_body<'gc>(
|
|||
Some(ns.as_uri())
|
||||
};
|
||||
|
||||
let accessor_type = method_type.to_qualified_name_or_star(mc);
|
||||
let accessor_type =
|
||||
method_type.to_qualified_name_or_star(&mut activation.borrow_gc());
|
||||
let declared_by = defining_class.dollar_removed_name(mc).to_qualified_name(mc);
|
||||
|
||||
let accessor_obj = activation
|
||||
|
@ -541,7 +546,7 @@ fn write_params<'gc>(
|
|||
for param in method.signature() {
|
||||
let param_type_name = param
|
||||
.param_type_name
|
||||
.to_qualified_name_or_star(activation.context.gc_context);
|
||||
.to_qualified_name_or_star(&mut activation.borrow_gc());
|
||||
let optional = param.default_value.is_some();
|
||||
let param_obj = activation
|
||||
.avm2()
|
||||
|
|
|
@ -464,9 +464,11 @@ impl<'gc> Multiname<'gc> {
|
|||
|
||||
/// Like `to_qualified_name`, but returns `*` if `self.is_any()` is true.
|
||||
/// This is used by `describeType`
|
||||
pub fn to_qualified_name_or_star(&self, mc: &Mutation<'gc>) -> AvmString<'gc> {
|
||||
pub fn to_qualified_name_or_star(&self, context: &mut GcContext<'_, 'gc>) -> AvmString<'gc> {
|
||||
let mc = context.gc_context;
|
||||
|
||||
if self.is_any_name() {
|
||||
AvmString::new_utf8(mc, "*")
|
||||
context.interner.get_char(mc, '*' as u16)
|
||||
} else {
|
||||
self.to_qualified_name(mc)
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ use crate::avm2::Error;
|
|||
use crate::avm2::Multiname;
|
||||
use crate::avm2::TranslationUnit;
|
||||
use crate::avm2::Value;
|
||||
use crate::context::GcContext;
|
||||
use crate::string::AvmString;
|
||||
use gc_arena::{Collect, Gc, Mutation};
|
||||
|
||||
|
@ -128,11 +129,13 @@ impl<'gc> PropertyClass<'gc> {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn get_name(&self, mc: &Mutation<'gc>) -> AvmString<'gc> {
|
||||
pub fn get_name(&self, context: &mut GcContext<'_, 'gc>) -> AvmString<'gc> {
|
||||
let mc = context.gc_context;
|
||||
|
||||
match self {
|
||||
PropertyClass::Class(class) => class.name().to_qualified_name(mc),
|
||||
PropertyClass::Name(gc) => gc.0.to_qualified_name_or_star(mc),
|
||||
PropertyClass::Any => AvmString::new_utf8(mc, "*"),
|
||||
PropertyClass::Name(gc) => gc.0.to_qualified_name_or_star(context),
|
||||
PropertyClass::Any => context.interner.get_char(mc, '*' as u16),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@ use crate::avm2::scope::ScopeChain;
|
|||
use crate::avm2::traits::{Trait, TraitKind};
|
||||
use crate::avm2::value::Value;
|
||||
use crate::avm2::{Class, Error, Multiname, Namespace, QName};
|
||||
use crate::context::GcContext;
|
||||
use crate::string::AvmString;
|
||||
use gc_arena::{Collect, GcCell, Mutation};
|
||||
use std::cell::Ref;
|
||||
|
@ -114,7 +115,7 @@ impl<'gc> VTable<'gc> {
|
|||
|
||||
pub fn slot_class_name(
|
||||
&self,
|
||||
mc: &Mutation<'gc>,
|
||||
context: &mut GcContext<'_, 'gc>,
|
||||
slot_id: u32,
|
||||
) -> Result<AvmString<'gc>, Error<'gc>> {
|
||||
self.0
|
||||
|
@ -122,7 +123,7 @@ impl<'gc> VTable<'gc> {
|
|||
.slot_classes
|
||||
.get(slot_id as usize)
|
||||
.ok_or_else(|| "Invalid slot ID".into())
|
||||
.map(|c| c.get_name(mc))
|
||||
.map(|c| c.get_name(context))
|
||||
}
|
||||
|
||||
pub fn get_trait(self, name: &Multiname<'gc>) -> Option<Property> {
|
||||
|
|
Loading…
Reference in New Issue