royale-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Harbs <harbs.li...@gmail.com>
Subject Re: MXML attributes, minification, and initialization
Date Wed, 06 Dec 2017 08:48:11 GMT
Here’s my reading of the issue:

For some reason, when this code is output, the code gets minified to create a minified property
which is assigned the value of the non-minified one. Considering a boolean is immutable, changing
the value of myProp does not change the value of of the minified var.

When the variable is not assigned, no minified copy is made, so the original variable name
is always used.

Getters work because the same getter is always called no matter which variable name is used
to access it.

Harbs

> On Dec 6, 2017, at 10:34 AM, Yishay Weiss <yishayjobs@hotmail.com> wrote:
> 
> This the js output.
> 
> 
> 
> /**
> 
> * @export
> 
> * @type {boolean}
> 
> */
> 
> components.MyComp.prototype.myProp = false;
> 
> 
> 
> ________________________________
> From: Alex Harui <aharui@adobe.com.INVALID>
> Sent: Tuesday, December 5, 2017 7:31:54 PM
> To: dev@royale.apache.org
> Subject: Re: MXML attributes, minification, and initialization
> 
> It appears that the component in question is an MXML component, as opposed
> to an AS component.  In our AS Components, a public var, like the name
> property in HTTPHeader.as is output in HTTPHeader.js as:
> 
>  /**
>  * @export
>  * @type {string}
>  */
>  org.apache.royale.net.HTTPHeader.prototype.name;
> 
> Supposedly, the @export will prevent the name property from being renamed
> by GCC.
> 
> 
> If you look at your MXML component's .js output, does it have @export in
> the JSDoc for myProp?  I'm guessing it doesn't and that is the bug.  The
> compiler has to do some interesting things to output fx:Script blocks.
> 
> Thanks,
> -Alex
> 
> 
> On 12/5/17, 1:41 AM, "Yishay Weiss" <yishayjobs@hotmail.com> wrote:
> 
>> When I change MyComp to have get/set the result is the following added
>> line, which probably protects the public interface.
>> 
>> 
>> 
>> Object.defineProperties(wf.prototype,{myProp:{get:wf.prototype.ad,set:wf.p
>> rototype.me}})
>> 
>> 
>> 
>> ________________________________
>> From: Yishay Weiss <yishayjobs@hotmail.com>
>> Sent: Tuesday, December 5, 2017 11:00:40 AM
>> To: dev@royale.apache.org
>> Subject: RE: MXML attributes, minification, and initialization
>> 
>> In this [1] I get the following in debug:
>> 
>> [org.apache.royale.core.View, 1, '_id', true, '$ID1', 0, 0,
>> [components.MyComp, 2, 'id', true, 'myComp', 'myProp', true
>> And
>> this.myLabel.text = "myProp: " + this.myComp.myProp;
>> 
>> And this in release:
>> 
>> 
>> [W,1,'_id',!0,'$ID1',0,0,[wf,2,'id',!0,'myComp','myProp',!0,
>> And
>> 
>> this.myLabel.text='myProp: '+this.myComp.cc
>> 
>> 
>> So it looks like myComp.myProp is renamed to myComp.cc when reading, but
>> not when writing.
>> 
>> If I change the code from
>> 
>>                               public var myProp:Boolean = false;
>> to
>> 
>>                               public var myProp:Boolean;
>> 
>> Then I get in release
>> 
>> 
>> this.myLabel.text='myProp: '+this.myComp.myProp
>> 
>> Which has correct behavior.
>> 
>> [1]
>> https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.co
>> m%2Fyishayw%2FExamples%2Ftree%2Frelease_bug&data=02%7C01%7Caharui%40adobe.
>> com%7C07c1ce89c6e648015f0e08d53bc45175%7Cfa7b1b5a7b34438794aed2c178decee1%
>> 7C0%7C0%7C636480636727412967&sdata=yfqv4ORwJio8TJJLzFUSFcCbSWGNJHTQMQb9gT9
>> LJ9o%3D&reserved=0
>> 
>> From: Alex Harui<mailto:aharui@adobe.com.INVALID>
>> Sent: Monday, December 4, 2017 7:14 PM
>> To: dev@royale.apache.org<mailto:dev@royale.apache.org>
>> Subject: Re: MXML attributes, minification, and initialization
>> 
>> Interesting.
>> 
>> What is the generated data structure for that property?  How does the
>> generated data structure differ if the property is getter/setter?
>> 
>> Thanks,
>> -Alex
>> 
>> On 12/4/17, 3:30 AM, "Yishay Weiss" <yishayjobs@hotmail.com> wrote:
>> 
>>> We ran into an interesting problem with minification. If you have a
>>> component with an attribute that’s initialized like this:
>>> 
>>> public var myProp:Boolean = false;
>>> 
>>> and you try to initialize it from mxml (<comp myProp=”true”/>) the
result
>>> will be myComp == true in debug and myComp == false in release.
>>> 
>>> We found 2 ways around that: either don’t initialize (public var
>>> myProp:Boolean) or use get/set methods instead.
>>> 
>>> I’m not sure what’s going on there but it’s something to watch out for.
>>> 
>> 
> 


Mime
View raw message