> On Jul 18, 2017, at 6:13 PM, Alex Harui <aha...@adobe.com.INVALID> wrote:
> 
> I assume you tested this with regular Flex and not the Falcon compiler?

Yes.

> I just want to verify a couple of your findings.
> 
> 1) Does passing empty string really produce an XML object with no children
> or is there a child textNode with “”?

new XML() and new XML(null) and new XML(“”) all produce identical XML objects. 
By default, XML seems to have a nodeKind of text. If you set properties on the 
XML, that changes. If you pass a string, it creates a text node with no 
children:

The following:

var xml7:XML = new XML();
var xml8:XML = new XML("");
var xml9:XML = new XML(null);
var xml10:XML = new XML("foo");
var xml11:XML = new XML({foo:"baz"});
trace(xml7.children().length());
trace(xml8.children().length());
trace(xml9.children().length());
trace(xml10.children().length());
trace(xml11.children().length());
trace(xml7);
trace(xml8);
trace(xml9);
trace(xml10);
trace(xml11);

Outputs:

0
0
0
0
0



foo
[object Object]

> 2) If you pass in an XMLList with one element, doesn't
> 
>  var harbs:XML = XML(someXMLListWithOneElement)
> 
> return the one element but
> 
>  var harbs:XML = new XML(someXMLListWithOneElement)
> 
> return a clone?

Good call.

The following code:

var xml1:XML = new XML("foo");
var xml2:XML = XML(xml1);
var xml3:XML = new XML(xml1);
trace(xml1 === xml2);
trace(xml1 === xml3);
var xml4:XMLList = new XMLList(xml1);
var xml5:XML = new XML(xml4);
var xml6:XML = XML(xml4);
trace(xml1 === xml5);
trace(xml1 === xml6);
trace(xml5 === xml6);

Outputs:

true
false
false
true
false

(“==“ outputs true for all of the above.)

>       
> IMO, toXML should do what Flash does unless it is really expensive.  If
> you had code that relied on Flash behavior, what would you have to do to
> rework the code to the spec?
> 

I think the observed behavior is bug-prone. The documented behavior makes much 
more sense. I can’t think of a good reason to cast null or undefined to XML. If 
you really want to cast on object to a string, you can always call toString(). 
Fixing such code should be really easy.

In terms of implementation, it’s not really harder one way or the other.

> My 2 cents,
> -Alex
> 
> On 7/18/17, 1:29 AM, "Harbs" <harbs.li...@gmail.com 
> <mailto:harbs.li...@gmail.com>> wrote:
> 
>> Actually, it’s not really necessary to allow null and undefined to get an
>> empty XML object. The constructor can default to en empty string. So an
>> empty string could get an XML object while null and undefined could throw
>> an error.
>> 
>> That might make more sense because it would likely catch more errors.
>> 
>>> On Jul 18, 2017, at 11:07 AM, Harbs <harbs.li...@gmail.com> wrote:
>>> 
>>> I discovered that the documentation on the top level functions is wrong.
>>> 
>>> According to the docs[1] the only valid expressions for XML and XMLList
>>> are: XML, XMLList, Boolean, Number and String. Anything else is supposed
>>> to throw an error.
>>> 
>>> What actually happens is that null and undefined are simply swallowed
>>> and you get an empty XML text node object. Everything else simply has
>>> toString() called on it, so if you pass in an Object which does not have
>>> an implementation of toString(), you’ll get a text node with a value of
>>> [object Object].
>>> 
>>> In my tests, new XML() and XML() behave identically.
>>> 
>>> That’s not what I’d call great behavior…
>>> 
>>> So the question is what to do. What I think makes sense is to make
>>> toXML() behave like the docs and new XML() behave like the observed
>>> behavior. At the least for null and undefined. There needs to be a way
>>> to instantiate an empty XML object. I’m on the fence about objects. I’m
>>> leaning toward always throwing an error if the argument is an object.
>>> 
>>> Thoughts?
>>> 
>>> Harbs
>>> 
>>> 
>>> [1]https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fhelp.a 
>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fhelp.a>
>>> dobe.com 
>>> <http://dobe.com/>%2Fen_US%2FFlashPlatform%2Freference%2Factionscript%2F3%2Fpackage
>>> .html%23XML&data=02%7C01%7C%7C9ab55b27d96c403de2e208d4cdb7a394%7Cfa7b1b5a
>>> 7b34438794aed2c178decee1%7C0%7C0%7C636359635983774211&sdata=rxcx9eUoc%2F%
>>> 2FufMzesTKqS8fp7bdV1yQUIoPyckupXGs%3D&reserved=0()
>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fhelp.ado 
>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fhelp.ado>
>>> be.com 
>>> <http://be.com/>%2Fen_US%2FFlashPlatform%2Freference%2Factionscript%2F3%2Fpackage.h
>>> tml%23XML&data=02%7C01%7C%7C9ab55b27d96c403de2e208d4cdb7a394%7Cfa7b1b5a7b
>>> 34438794aed2c178decee1%7C0%7C0%7C636359635983774211&sdata=rxcx9eUoc%2F%2F
>>> ufMzesTKqS8fp7bdV1yQUIoPyckupXGs%3D&reserved=0()>
>>> 
>>>> On Jul 18, 2017, at 8:20 AM, Harbs <harbs.li...@gmail.com 
>>>> <mailto:harbs.li...@gmail.com>
>>>> <mailto:harbs.li...@gmail.com <mailto:harbs.li...@gmail.com>>> wrote:
>>>> 
>>>> I’ll try to write these functions today.

Reply via email to