I finally got the nerve together to update my local environment. The changes look pretty good.
I made a couple of small changes. One fixes hasAttribute which somehow broke with your changes. The second is a small tweak to the memory optimizations. The memory footprint seems to be a bit smaller than what it used to be. Good work. :-) Harbs > On Oct 2, 2019, at 11:29 AM, Greg Dove <greg.d...@gmail.com> wrote: > > @harbs > > FYI in addition to some other stuff, I am close to pushing my updates to > XML. This should be in the next hour or so. > > I kept the QName caching pretty close to how you had it, with only some > minor changes. > I tried to do some extra memory optimization, and in theory it should > provide better results, but to be honest I don't have a good way to measure > this in the browser. I tried the Chrome performance.memory extensions but I > don't have much confidence in that given how much it varies between reloads > without changing anything else. The extra code changes I made were to make > the '_nodeKind' strings into String object references, so they only refer > to a single reference to a string instead of multiple copies of primitives. > That change is isolated to a single commit so can easily be reversed if > there is something not good about it... but all my local tests continue to > pass. I will get the new tests into RoyaleUnit in the coming days. > > > > > On Thu, Sep 5, 2019 at 7:39 AM Greg Dove <greg.d...@gmail.com> wrote: > >> Yeah, I saw that ;) Don't worry, I am aware of it. >> >> My first goal is to make sure it works like it should, because that comes >> first, and then to optimize. I'll check the memory side of things and make >> sure it's at least the same as before. If you can point me to some >> publicly accessible large test cases that would be really helpful. I will >> work through that before I push anything. >> >> On Thu, Sep 5, 2019 at 7:26 AM Harbs <harbs.li...@gmail.com> wrote: >> >>> Heads up: >>> >>> I did some (on first blush) odd things in XML related to QNames. QNames >>> are pooled and many XML properties are not initialized by default. The >>> reason I did this was it avoided many MB of memory waste for complex XML. >>> Please don’t mess that up. >>> >>> Thanks, >>> Harbs >>> >>>> On Sep 4, 2019, at 1:02 PM, Greg Dove <greg.d...@gmail.com> wrote: >>>> >>>> This is particularly for Harbs and Yishay, as I think you are both (or >>> both >>>> have been) using XML quite a bit. I have quite a few fixes coming. All >>>> with tests that match on swf and js. >>>> >>>> I am currently working to demonstrate proof of concept to a prospective >>>> client for migration of a Flex app. The app makes extensive use of e4x >>> and >>>> uses a bunch of features that I expect had not received attention >>>> previously, because they were originally either not working with the >>>> codebase I am porting, or i think some even caused errors in the >>> javascript >>>> output. >>>> >>>> So I have spent the last several days almost full time figuring things >>> out >>>> and working on fixes, between the compiler and emulation classes. >>>> All the previous XML tests continue to pass, but I have many more unit >>>> tests and fixes lined up for the following: >>>> >>>> namespace directives >>>> default xml namespace >>>> use namespace (multiple) >>>> >>>> a number of fixes for xml filtering, including: >>>> -'this' resolves correctly in filters that include external references >>> from >>>> the fitler expression to the 'this' scope >>>> -handles alternate ordering of comparisons between XML 'getters' and >>>> literals >>>> e.g. something.(name() = "cat") or something.("cat" = name()) (these >>> are >>>> the same) >>>> -it (will) now handle XML e4x references in nested function calls inside >>>> the filter, e.g. things like: >>>> e.g. >>>> var people:XML = <people> >>>> <person> >>>> <name>Bob</name> >>>> <age>32</age> >>>> </person> >>>> <person> >>>> <name>Joe</name> >>>> <age>46</age> >>>> </person> >>>> </people>; >>>> var findJoeByAge:Function = function (i:int):Boolean { >>>> return i > 40; >>>> }; >>>> people.person.(findJoeByAge(parseInt(age))).name >>>> >>>> >>>> I have lots more granular tests in QName, Namespace, and XML with >>> tuning to >>>> improve reliability. >>>> toXMLString XML node output also matches flash more correctly in what I >>>> have coming. >>>> >>>> One thing that I am trying to figure out, which I would appreciate >>> input on >>>> if someone has an answer: >>>> For the example: >>>> >>>> var feed:XML = new XML( >>>> '<feed xmlns:atom="http://www.w3.org/2005/Atom" >>>> xmlns:m="nothing">\n' + >>>> ' <link rel="no_namespace" >>>> href="blah/12321/domain/"/>\n' + >>>> '</feed>\n'); >>>> var atomSpace:Namespace = new Namespace('http://www.w3.org/2005/Atom'); >>>> >>>> Can anyone explain why this (in SWF, as a reference implementation): >>>> trace(feed.atomSpace::link.length()) >>>> trace(feed.atomSpace::link.toXMLString()) >>>> //output: >>>> 0 >>>> {empty string} >>>> is different to: >>>> trace(feed.child(new QName(atomSpace,'link')).length()) >>>> trace(feed.child(new QName(atomSpace,'link')).toXMLString()) >>>> //output: >>>> 1 >>>> <link rel="no_namespace" href="blah/12321/domain/" xmlns:atom=" >>>> http://www.w3.org/2005/Atom" xmlns:m="nothing"/> >>>> >>>> I had assumed the above cases would be the same, but the second one is >>>> behaving as if it has the default namespace included with the specified >>>> namespace in the QName matching (it does correctly match the namespace >>>> specifically as well -with e.g. <atom:link nodes where the prefix atom >>> is >>>> bound to the uri, but also seems to include link nodes with the default >>>> namespace, whether or not it is declared). I can accommodate this >>>> difference to make them behave the same, I just would like to understand >>>> the basis for the actual rules if anyone knows.... >>>> >>>> I should be in a position to push the updates this coming weekend I >>> think. >>> >>>