I've moved the Language changes and some related changes in Basic org.apache.royale.html.util.getLabelFromData to PR #1150.
(I've left the related changes in MX mx.collections.SortField and MX mx.controls.beads.AdvancedDataGridItemRendererInitializer on this PR, since they only affect MX.) On 9/19/2021 8:08 AM, Harbs wrote: > 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 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 >>>> >>>> >>>> >>>> >>>> >>>> >