I think there’s some confusion here. The issue is not that there couldn’t be a dependency on XML, but rather to properly parse E4X, the XML type needs to be known at compile time. That’s because we actually rewrite bracket and E4X access into function calls.
TreeXMLItemRenderer takes an untyped object which is not known to be XML. It sounds like sortOn has a similar problem. You’re sorting an array of possible xml objects, but since the type is not known, the values cannot be resolved. So basically, a special function is needed when sorting xml objects. The vast majority of apps will not need this. I think the correct way to do change Array.sortOn would be to have a bead which modifies the function used for sorting. However, I’m not convinced that Array.sortOn really needs to be XML aware at all. It seems like a component which accepts XML data can just call a specialized XML sort method instead. Thoughts? Harbs > On Sep 17, 2021, at 2:00 PM, Edward Stangler <estang...@bradmark.com> wrote: > > > Every Array.sortOn() calls Language.sortOn(), a static function that > calls the (Language) static function compareNumber, > compareStringCaseinsensitive, or compareString, depending on options. > > Inside those compareXX() static functions, it would access the sort > field value using "a[n]" or "b[n]" (n = field name string). But that > doesn't work for XML objects, on the JS side. > > Aside: previously, Basic TreeXMLItemRenderer needed to get a value from > an XML object, but to avoid depending on the XML project, it had some > code to manually get the values it needed. I started with that code, > refined it a bit to handle more cases, and put that code into various > places (in order to read an XML object without depending on the XML > project). > > So in this case, I created a new static function Language.getValue() to > replace "a[n]" and "b[n]" (with getValue(a, n) and getValue(b, n), > respectively). The code in getValue() is too much to inline, in my opinion. > > > 1. The code is needed for XML objects in the Array.sortOn(), i.e. > sorting on a column in a grid with data that is XML (if I remember > correctly; eventually goes through class Sort, which can call > Array.sortOn()). The code is to avoid depending on the XML project. > > 2. I can't think of any possible way, in this case. > > > Why go through so much trouble to avoid depending on the XML project? > Well, I don't know why XML was separated into its own project. Perhaps > for PAYG? If so, then I suppose we could create some extensible system > in Language where you could specify custom functions, like getValue(), > residing in other projects, to get the sort field values for custom > object types; that would be PAYG. But is it worth it for 204 bytes, > for an object type (XML) built into Flex? What would be the hook (the > step at runtime) for XML to tell Language about its custom function? > I'm not sure the extensible system would take less than 204 bytes, > either. (The performance of getValue() is mostly PAYG; it does the > extra JS code for XML only if the regular method "a[n]" is null.) > > > > On 9/17/2021 1:30 AM, Harbs wrote: >> Basically not PAYG. >> >> FYI there are some ongoing tasks to reduce the PAYG debt. I don’t want to >> add to it. https://github.com/apache/royale-asjs/issues/641 >> >> Most of the code in Language.as gets stripped out if not used. >> >> If that’s not the case here, I’m going to ask some more questions. >> >> 1. Where/why is this code needed? You made a comment about XML not being >> available. Why would that be an issue? >> 2. Is there another way to achieve the same result that’s more PAYG? >> >> Thanks, >> Harbs >> >>> On Sep 17, 2021, at 4:44 AM, Edward Stangler wrote: >>> >>> >>> 204 bytes (~0.03% of small program) in JS release >>> >>> (presumably mostly due to the one new static function) >>> (develop vs. develop + just these Language changes) >>> (no difference between full rebuild or just Language rebuild) >>> >>> TestSetClipboard.swf >>> release - before: 87,634 >>> release - after: 87,634 >>> debug - before: 176,590 >>> debug - after: 176,590 >>> >>> TestSetClipboard JS directory >>> release - before: 620,221 >>> release - after: 620,425 >>> debug - before: 3,145,663 >>> debug - after: 3,146,567 >>> >>> >>> (Test case from issue #995) Test.swf >>> release - before: 121,852 >>> release - after: 121,777 >>> debug - before: 244,914 >>> debug - after: 244,916 >>> >>> (Test case from issue #995) Test JS directory >>> release - before: 831,174 >>> release - after: 831,378 >>> debug - before: 4,003,520 >>> debug - after: 4,004,424 >>> >>> >>> TestSetClipboard.mxml: >>> <?xml version="1.0" encoding="utf-8"?> >>> <mx:Application >>> xmlns:fx="http://ns.adobe.com/mxml/2009"<http://ns.adobe.com/mxml/2009> >>> xmlns:js="library://ns.apache.org/royale/express" >>> xmlns:mx="library://ns.apache.org/royale/mx"> >>> >>> <fx:Script> >>> <![CDATA[ >>> import mx.system.System; >>> >>> public function testSetClipboard() : void >>> { >>> System.setClipboard(" This has three spaces >>> in front."); >>> } >>> ]]> >>> </fx:Script> >>> >>> <mx:Button label="Go" click="testSetClipboard();" /> >>> </mx:Application> >>> >>> >>> >>> On 9/16/2021 12:25 PM, Harbs wrote: >>> >>> One question I had: >>> >>> Do the changes to Language.as add to application size for applications >>> which don't need it? >>> >>> >>> >>> On Sep 16, 2021, at 9:20 AM, Piotr Zarzycki wrote: >>> >>> This fixes seems to be helpful. Do you think we should merge them ? >>> >>> czw., 16 wrz 2021 o 00:41 estanglerbm >>> <notificati...@github.com><mailto:notificati...@github.com> napisa?(a): >>> >>> >>> >>> Don't forget about these fixes. >>> >>> - >>> You are receiving this because you are subscribed to this thread. >>> Reply to this email directly, view it on GitHub >>> <https://github.com/apache/royale-asjs/pull/1127#issuecomment-920434990><https://github.com/apache/royale-asjs/pull/1127#issuecomment-920434990>, >>> or unsubscribe >>> <https://github.com/notifications/unsubscribe-auth/AF3K2K72XOPFFUX4P335WNLUCEOILANCNFSM5AFBH67Q><https://github.com/notifications/unsubscribe-auth/AF3K2K72XOPFFUX4P335WNLUCEOILANCNFSM5AFBH67Q> >>> . >>> >>> >>> >>> >>> >>> -- >>> >>> Piotr Zarzycki >>> >>> >>> >>> >>> >>> >