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
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>

Reply via email to