diff --git a/core/src/avm2/multiname.rs b/core/src/avm2/multiname.rs index d501796b4..170d23f56 100644 --- a/core/src/avm2/multiname.rs +++ b/core/src/avm2/multiname.rs @@ -253,8 +253,13 @@ impl<'gc> Multiname<'gc> { if self.has_lazy_ns() { let _ = activation.pop_stack(); // ignore the ns component } - let name = qname_object.name(); - return Ok(name.clone()); + let mut name = qname_object.name().clone(); + + if self.is_attribute() { + name.set_is_attribute(true); + } + + return Ok(name); } Some(name_value.coerce_to_string(activation)?) diff --git a/tests/tests/swfs/avm2/qname_as_lazy_name_attribute_multiname/Test.as b/tests/tests/swfs/avm2/qname_as_lazy_name_attribute_multiname/Test.as new file mode 100644 index 000000000..a4438651e --- /dev/null +++ b/tests/tests/swfs/avm2/qname_as_lazy_name_attribute_multiname/Test.as @@ -0,0 +1,18 @@ +package +{ + import flash.display.Sprite; + + public class Test extends Sprite + { + } +} + +var xml = + + + + +; + +var q = new QName("attr1"); +trace("xml..@[q]: " + xml..@[q]); diff --git a/tests/tests/swfs/avm2/qname_as_lazy_name_attribute_multiname/output.txt b/tests/tests/swfs/avm2/qname_as_lazy_name_attribute_multiname/output.txt new file mode 100644 index 000000000..02a3dceae --- /dev/null +++ b/tests/tests/swfs/avm2/qname_as_lazy_name_attribute_multiname/output.txt @@ -0,0 +1 @@ +xml..@[q]: value1value2 diff --git a/tests/tests/swfs/avm2/qname_as_lazy_name_attribute_multiname/test.swf b/tests/tests/swfs/avm2/qname_as_lazy_name_attribute_multiname/test.swf new file mode 100644 index 000000000..234b0122f Binary files /dev/null and b/tests/tests/swfs/avm2/qname_as_lazy_name_attribute_multiname/test.swf differ diff --git a/tests/tests/swfs/avm2/qname_as_lazy_name_attribute_multiname/test.toml b/tests/tests/swfs/avm2/qname_as_lazy_name_attribute_multiname/test.toml new file mode 100644 index 000000000..cf6123969 --- /dev/null +++ b/tests/tests/swfs/avm2/qname_as_lazy_name_attribute_multiname/test.toml @@ -0,0 +1 @@ +num_ticks = 1