diff --git a/core/src/avm2/e4x.rs b/core/src/avm2/e4x.rs
index fcd6cf805..d02879ccc 100644
--- a/core/src/avm2/e4x.rs
+++ b/core/src/avm2/e4x.rs
@@ -649,7 +649,9 @@ impl<'gc> E4XNode<'gc> {
return Ok(to_xml_string(E4XOrXml::E4X(*self), activation));
}
- other => Err(format!("XML.toString(): Not yet implemented for {other:?}").into()),
+ E4XNodeKind::Comment(_) | E4XNodeKind::ProcessingInstruction(_) => {
+ return Ok(to_xml_string(E4XOrXml::E4X(*self), activation));
+ }
}
}
diff --git a/tests/tests/swfs/avm2/xml_tostring/Test.as b/tests/tests/swfs/avm2/xml_tostring/Test.as
index 540ab27c6..34c51cd43 100644
--- a/tests/tests/swfs/avm2/xml_tostring/Test.as
+++ b/tests/tests/swfs/avm2/xml_tostring/Test.as
@@ -1,10 +1,12 @@
-package {
+package {
import flash.display.Sprite;
public class Test extends Sprite { }
}
// FIXME: Implement indentation.
XML.prettyPrinting = false;
+XML.ignoreComments = false;
+XML.ignoreProcessingInstructions = false;
var xml = Cow
trace("xml.toString(): " + xml.toString());
@@ -20,3 +22,9 @@ trace("xml.toString(): " + xml.toString());
xml = >&<;
trace("xml.toString(): " + xml.toString());
+
+xml = ;
+trace("xml.toString(): " + xml.toString());
+
+xml = processing instruction! ?>;
+trace("xml.toString(): " + xml.toString());
diff --git a/tests/tests/swfs/avm2/xml_tostring/output.txt b/tests/tests/swfs/avm2/xml_tostring/output.txt
index 72dc939c0..b81f80206 100644
--- a/tests/tests/swfs/avm2/xml_tostring/output.txt
+++ b/tests/tests/swfs/avm2/xml_tostring/output.txt
@@ -2,3 +2,5 @@ xml.toString(): Cow
xml.toString(): CowPig
xml.toString():
xml.toString(): >&<
+xml.toString():
+xml.toString(): processing instruction! ?>
diff --git a/tests/tests/swfs/avm2/xml_tostring/test.swf b/tests/tests/swfs/avm2/xml_tostring/test.swf
index ff83d136d..1e5c22767 100644
Binary files a/tests/tests/swfs/avm2/xml_tostring/test.swf and b/tests/tests/swfs/avm2/xml_tostring/test.swf differ