I implemented this locally and the idea works pretty well for the most part.
We still need to do toString() when possible because of edge cases. For example: stringFromXmlList1 == stringFromXmlList2 fails because the Javascript engine does not try to convert them (correctly) to primitive values. On Aug 5, 2016, at 11:59 AM, Harbs <harbs.li...@gmail.com> wrote: > I’m thinking that I should implement valueOf() for XML like this: > var str:String = this.toString(); > var asInt:int = parseInt(str); > if(asInt.toString() == str) > return asInt; > > var asFloat:Number = parseFloat(str); > if(asFloat.toString() == str) > return asFloat; > > return str; > > This would make XML work natively with primitives in most cases even if we > can’t infer types: > > var xml:XML = <xml name”Fred” value=“10”/>; > var name:* = xml.@name; > var value:* = xml.@value; > > trace(value+5)//15 > trace(name+ “ Flintstone”); //Fred Flintstone > trace(“10”+value)//“1010” > trace(value+value)//20 > > This will not work if we’re expecting a valid number to actually be a string. > We could end up with arithmetic instead of string concatenation. > > It will also not allow things like: > name.toLowerCase()// error > name.split(“”);//error > > One hack we could do would be to add all string and number methods to XML and > XMLLIst which would essentially call toString(). Something like this: > > public function > split(separator:*=undefined,limit:int=Number.POSITIVE_INFINITY):Array > { > this.toString.split(separator,limit); > } > > That would let XML act as if it’s a string (and number) in most cases. > > Thoughts? > > On Aug 4, 2016, at 5:33 PM, Alex Harui <aha...@adobe.com> wrote: > >> >> >> On 8/4/16, 7:22 AM, "Harbs" <harbs.li...@gmail.com> wrote: >> >>> I’m not sure how to deal with this case: >>> >>> >>> private var name:String; >>> >>> this.name = someXML.@Name; >>> >>> The above compiles to >>> >>> this.name = someXML.attribute('Name’); >>> >>> In Javascript this.name becomes an XMLList, but in Flash, the XMLList is >>> implicitly converted to a string. >>> >>> Is it possible to make the compiler smarter and make the compiled version >>> look like this? >>> >>> this.name = someXML.attribute('Name’).toString(); >> >> I will look into it. >> >> -Alex >> >