core: Make the AVM2 constructor registry global
This commit is contained in:
parent
b1be111a4e
commit
282508a281
|
@ -594,14 +594,11 @@ impl<'gc> MovieClip<'gc> {
|
||||||
&mut activation,
|
&mut activation,
|
||||||
)
|
)
|
||||||
.and_then(|v| v.coerce_to_object(&mut activation));
|
.and_then(|v| v.coerce_to_object(&mut activation));
|
||||||
let library = activation
|
match proto {
|
||||||
|
Ok(proto) => activation
|
||||||
.context
|
.context
|
||||||
.library
|
.library
|
||||||
.library_for_movie_mut(movie.clone());
|
|
||||||
match proto {
|
|
||||||
Ok(proto) => library
|
|
||||||
.avm2_constructor_registry_mut()
|
.avm2_constructor_registry_mut()
|
||||||
.expect("AVM2 movies should have AVM2 constructor registries")
|
|
||||||
.set_proto_symbol(proto, id),
|
.set_proto_symbol(proto, id),
|
||||||
Err(e) => log::warn!(
|
Err(e) => log::warn!(
|
||||||
"Got AVM2 error {} when getting prototype of symbol class {}",
|
"Got AVM2 error {} when getting prototype of symbol class {}",
|
||||||
|
@ -610,6 +607,11 @@ impl<'gc> MovieClip<'gc> {
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let library = activation
|
||||||
|
.context
|
||||||
|
.library
|
||||||
|
.library_for_movie_mut(movie.clone());
|
||||||
|
|
||||||
if id == 0 {
|
if id == 0 {
|
||||||
//TODO: This assumes only the root movie has `SymbolClass` tags.
|
//TODO: This assumes only the root movie has `SymbolClass` tags.
|
||||||
self.set_avm2_constructor(activation.context.gc_context, Some(constr));
|
self.set_avm2_constructor(activation.context.gc_context, Some(constr));
|
||||||
|
|
|
@ -105,10 +105,6 @@ pub struct MovieLibrary<'gc> {
|
||||||
avm_type: AvmType,
|
avm_type: AvmType,
|
||||||
avm2_domain: Option<Avm2Domain<'gc>>,
|
avm2_domain: Option<Avm2Domain<'gc>>,
|
||||||
|
|
||||||
/// A list of the symbols associated with specific AVM2 constructor
|
|
||||||
/// prototypes.
|
|
||||||
avm2_constructor_registry: Option<Avm2ConstructorRegistry<'gc>>,
|
|
||||||
|
|
||||||
/// Shared reference to the constructor registry used for this movie.
|
/// Shared reference to the constructor registry used for this movie.
|
||||||
/// Should be `None` if this is an AVM2 movie.
|
/// Should be `None` if this is an AVM2 movie.
|
||||||
avm1_constructor_registry: Option<Gc<'gc, Avm1ConstructorRegistry<'gc>>>,
|
avm1_constructor_registry: Option<Gc<'gc, Avm1ConstructorRegistry<'gc>>>,
|
||||||
|
@ -123,7 +119,6 @@ impl<'gc> MovieLibrary<'gc> {
|
||||||
fonts: HashMap::new(),
|
fonts: HashMap::new(),
|
||||||
avm_type,
|
avm_type,
|
||||||
avm2_domain: None,
|
avm2_domain: None,
|
||||||
avm2_constructor_registry: None,
|
|
||||||
avm1_constructor_registry: None,
|
avm1_constructor_registry: None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -330,16 +325,6 @@ impl<'gc> MovieLibrary<'gc> {
|
||||||
pub fn avm2_domain(&self) -> Avm2Domain<'gc> {
|
pub fn avm2_domain(&self) -> Avm2Domain<'gc> {
|
||||||
self.avm2_domain.unwrap()
|
self.avm2_domain.unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get the AVM2 constructor registry.
|
|
||||||
pub fn avm2_constructor_registry(&self) -> Option<&Avm2ConstructorRegistry<'gc>> {
|
|
||||||
self.avm2_constructor_registry.as_ref()
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Mutate the AVM2 constructor registry.
|
|
||||||
pub fn avm2_constructor_registry_mut(&mut self) -> Option<&mut Avm2ConstructorRegistry<'gc>> {
|
|
||||||
self.avm2_constructor_registry.as_mut()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Symbol library for multiple movies.
|
/// Symbol library for multiple movies.
|
||||||
|
@ -352,6 +337,10 @@ pub struct Library<'gc> {
|
||||||
|
|
||||||
constructor_registry_case_insensitive: Gc<'gc, Avm1ConstructorRegistry<'gc>>,
|
constructor_registry_case_insensitive: Gc<'gc, Avm1ConstructorRegistry<'gc>>,
|
||||||
constructor_registry_case_sensitive: Gc<'gc, Avm1ConstructorRegistry<'gc>>,
|
constructor_registry_case_sensitive: Gc<'gc, Avm1ConstructorRegistry<'gc>>,
|
||||||
|
|
||||||
|
/// A list of the symbols associated with specific AVM2 constructor
|
||||||
|
/// prototypes.
|
||||||
|
avm2_constructor_registry: Avm2ConstructorRegistry<'gc>,
|
||||||
}
|
}
|
||||||
|
|
||||||
unsafe impl<'gc> gc_arena::Collect for Library<'gc> {
|
unsafe impl<'gc> gc_arena::Collect for Library<'gc> {
|
||||||
|
@ -363,6 +352,7 @@ unsafe impl<'gc> gc_arena::Collect for Library<'gc> {
|
||||||
self.device_font.trace(cc);
|
self.device_font.trace(cc);
|
||||||
self.constructor_registry_case_insensitive.trace(cc);
|
self.constructor_registry_case_insensitive.trace(cc);
|
||||||
self.constructor_registry_case_sensitive.trace(cc);
|
self.constructor_registry_case_sensitive.trace(cc);
|
||||||
|
self.avm2_constructor_registry.trace(cc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -379,6 +369,7 @@ impl<'gc> Library<'gc> {
|
||||||
gc_context,
|
gc_context,
|
||||||
Avm1ConstructorRegistry::new(true, gc_context),
|
Avm1ConstructorRegistry::new(true, gc_context),
|
||||||
),
|
),
|
||||||
|
avm2_constructor_registry: Default::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -416,8 +407,6 @@ impl<'gc> Library<'gc> {
|
||||||
if vm_type == AvmType::Avm1 {
|
if vm_type == AvmType::Avm1 {
|
||||||
movie_library.avm1_constructor_registry =
|
movie_library.avm1_constructor_registry =
|
||||||
Some(self.get_avm1_constructor_registry(movie_version));
|
Some(self.get_avm1_constructor_registry(movie_version));
|
||||||
} else if vm_type == AvmType::Avm2 {
|
|
||||||
movie_library.avm2_constructor_registry = Some(Avm2ConstructorRegistry::new());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
self.movie_libraries.insert(movie.clone(), movie_library);
|
self.movie_libraries.insert(movie.clone(), movie_library);
|
||||||
|
@ -449,4 +438,14 @@ impl<'gc> Library<'gc> {
|
||||||
self.constructor_registry_case_sensitive
|
self.constructor_registry_case_sensitive
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get the AVM2 constructor registry.
|
||||||
|
pub fn avm2_constructor_registry(&self) -> &Avm2ConstructorRegistry<'gc> {
|
||||||
|
&self.avm2_constructor_registry
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Mutate the AVM2 constructor registry.
|
||||||
|
pub fn avm2_constructor_registry_mut(&mut self) -> &mut Avm2ConstructorRegistry<'gc> {
|
||||||
|
&mut self.avm2_constructor_registry
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue