On 11/16/15, 12:51 AM, "Harbs" <harbs.li...@gmail.com> wrote:
>This seems like a partial solution. The thing with dot notation, is that >you can use anything — even elements that do not exist. You have a >mismatch between your xml and your code. In your example, xml.committer >will return an XMLList with two elements. xml.employee will return an >XMLList with a length() of 0. Unless we map the dot notation to child() >in the compiler, we will get a LOT of errors in existing E4X code. >Checking xml.element.length() is a very common way of checking that an >element exists. Ah, ok. Didn’t know that. > >I guess we could use defineProperty for the cases when the Type of the >XML is not clear to the compiler, but even then, it will only work if the >client code is only checking elements which exist. It seems to me that >consistently failing on non-typed XML is easier to deal with then >sometimes-yes- sometimes-no access. But I could imagine others disagree. One compiler feature I’ve wanted to try to implement I’ve referred to in the past as ‘frickin-strict’ or ‘super-strict’, although I think a better name would be warn-on-Object-access. And it would basically emit a warning wherever your code read or wrote to something of type Object (and *). I don’t think we’ve done this anywhere else in the compiler, but in theory we could also enable/disable that checking per-file or per-method. I’ve been told if you were to turn on such a feature, almost everybody’s code would generate 100’s of such warning. So I think the summary of compiler changes is: 1) no more _as3_ prefixes on the function calls on XML/XMLList 2) detect read and write on XML/XMLList and convert read to child(). What about write()? 3) detect for..in and foreach..in on XML/XMLList. There is no foreach in JS, so foreach is converted into for..in with some glue code so the body of the loop executes correctly. I think all we need is an elementNames():Array method that returns the array of element names. 4) detect read and write on plain Object and add warning. Thoughts? -Alex