On 2/9/16, 1:39 AM, "Harbs" <harbs.li...@gmail.com> wrote:
>Thanks for this. It’s really good to have someone else go through this >and give me a sanity check. Most of this is very much in line with what >I’ve already done. > >Some comments: > >> [[get]] >someXML[x] is only valid when x is 0 and that returns someXML and not a >child of someXML. OK, I hadn't realized that. That makes me wonder if we need to intercept all bracket calls on XML and XMLList and call child(int). Are you implementing XMLList as an Array or dynamic class with numeric property names? It might be better to implement a get() method and have the compiler call that with ints or property names. Apparently we are supposed to blur the distinction between XML and XMLList. I suppose another trick would be to create a "0" property on XML. > >> [[defaultValue]] >I’m not even sure what this means. I’ve implemented valueOf() and >toString(). I’m not clear on when [[defaultValue]] is used. I think it is used in automatic type conversion. See [1]. Maybe you can just implement valueOf() to call toString(). > >> [[hasProperty]] >I implemented hasOwnProperty() I’m not sure we need to do anything else. OK. Makes sense. > >> [[deepCopy]] >Yes. AFAICT, copy() is the the same as [[deepCopy]] Agreed. > >> [[resolveValue]] >Ditto. I implemented valueOf(). Not sure if it’s the same. I don't think this is the same. The spec says resolveValue is added so it is functionality unique to XML and XMLList handling. valueOf is used by the runtime in other places. It looks like resolveValue is only used in a few specific cases. It might have to be completely handled in the AS implementation. I don't know if the compiler needs to do anything. It looks like if you have some XML like: var xml:XML = <node><child /></node> Then do: var myChild:XMLList = xml.myChild; then myChild will be assigned an empty XMLList since there is no myChild tag in xml. But amazingly, if you then do: myChild[0] = foo; The implementation is supposed to use resolveValue to add a myChild property to the xml so the net is: <node><child /><myChild>foo</myChild></node> > >> [[append]] maps to concat() >That’s for XMLList. (which I’ve already done) What do we do for XML? Not >implement it? throw an error? If I understand the spec, it never gets called on XML. When the compiler sees the "+" operator, the generated code is supposed to generate a new XMLList. Thanks for working on the E4X. It will be pretty cool when it starts working. -Alex [1] http://www.i-programmer.info/programming/javascript/2951-objects-with-value s.html