avm2: Support recursive Vector<Vector<T>> lookups

This commit is contained in:
Adrian Wielgosik 2024-07-29 20:36:24 +02:00 committed by Adrian Wielgosik
parent 6f4a9aeafb
commit 6f56016079
4 changed files with 21 additions and 4 deletions

View File

@ -298,9 +298,7 @@ impl<'gc> Domain<'gc> {
let res = self.get_defined_value(activation, name);
if let Some(type_name) = type_name {
let type_qname =
QName::from_qualified_name(type_name, api_version, &mut activation.context);
let type_class = self.get_defined_value(activation, type_qname)?;
let type_class = self.get_defined_value_handling_vector(activation, type_name)?;
if let Ok(res) = res {
let class = res.as_object().ok_or_else(|| {
Error::RustError(format!("Vector type {:?} was not an object", res).into())

View File

@ -58,7 +58,19 @@
trace("Vector.<CustomClass>: " + getDefinitionByName(name));
trace("ApplicationDomain.hasDefinition Vector.<CustomClass>: " + ApplicationDomain.currentDomain.hasDefinition(name));
trace("ApplicationDomain.getDefinition Vector.<CustomClass>: " + ApplicationDomain.currentDomain.getDefinition(name));
vec = new Vector.<Vector.<int>>();
name = getQualifiedClassName(vec);
trace("Vector.<Vector.<int>> name: " + name);
trace("__AS3__.vec::Vector.<__AS3__.vec::Vector.<int>>: " + getDefinitionByName(name));
trace("ApplicationDomain.hasDefinition __AS3__.vec::Vector.<__AS3__.vec::Vector.<int>>: " + ApplicationDomain.currentDomain.hasDefinition(name));
trace("ApplicationDomain.getDefinition __AS3__.vec::Vector.<__AS3__.vec::Vector.<int>>: " + ApplicationDomain.currentDomain.getDefinition(name));
name = "Vector.<Vector.<int>>";
trace("Vector.<Vector.<int>>: " + getDefinitionByName(name));
trace("ApplicationDomain.hasDefinition Vector.<Vector.<int>>: " + ApplicationDomain.currentDomain.hasDefinition(name));
trace("ApplicationDomain.getDefinition Vector.<Vector.<int>>: " + ApplicationDomain.currentDomain.getDefinition(name));
trace("Vector.<Number> without namespace" + getDefinitionByName("Vector.<Number>"));
trace("Vector.<Number> without namespace" + getDefinitionByName("Vector.<Number>"));
try {
trace("Vector without namespace: " + getDefinitionByName("Vector"));

View File

@ -25,5 +25,12 @@ Vector.<CustomClass> name: __AS3__.vec::Vector.<rs.ruffle::CustomClass>
Vector.<CustomClass>: [class Vector.<rs.ruffle::CustomClass>]
ApplicationDomain.hasDefinition Vector.<CustomClass>: true
ApplicationDomain.getDefinition Vector.<CustomClass>: [class Vector.<rs.ruffle::CustomClass>]
Vector.<Vector.<int>> name: __AS3__.vec::Vector.<__AS3__.vec::Vector.<int>>
__AS3__.vec::Vector.<__AS3__.vec::Vector.<int>>: [class Vector.<__AS3__.vec::Vector.<int>>]
ApplicationDomain.hasDefinition __AS3__.vec::Vector.<__AS3__.vec::Vector.<int>>: true
ApplicationDomain.getDefinition __AS3__.vec::Vector.<__AS3__.vec::Vector.<int>>: [class Vector.<__AS3__.vec::Vector.<int>>]
Vector.<Vector.<int>>: [class Vector.<__AS3__.vec::Vector.<int>>]
ApplicationDomain.hasDefinition Vector.<Vector.<int>>: true
ApplicationDomain.getDefinition Vector.<Vector.<int>>: [class Vector.<__AS3__.vec::Vector.<int>>]
Vector.<Number> without namespace[class Vector.<Number>]
Caught error: ReferenceError: Error #1065: Variable Vector is not defined.

Binary file not shown.