actually just as another fyi, Harbs pointed out some intriguing goog
methods recently - I don't have an immediate reference to it sorry. One of
those seemed to allow for access to renamed names by wrapping the original
names in a 'magic' method that presumably GCC recognises (but presumably
returns the name unchanged in debug mode)


On Thu, Jan 16, 2020 at 12:33 PM Greg Dove <[email protected]> wrote:

> reflection data has similar stuff to support release mode get/set for
> public vars.
>
> I did not look at MXML startup assignments like this, but it sounds good
> to me. I don't know if it makes sense, but considering this is just startup
> assignments, could one function combine all of the startup assignments (in
> the same sequence as before)?
>
>
> On Thu, Jan 16, 2020 at 12:23 PM Josh Tynjala <[email protected]>
> wrote:
>
>> According to the commit linked below, the -warn-public-vars compiler
>> option
>> was added because setting a public var in MXML does not currently work
>> properly in a release build.
>>
>>
>> https://github.com/apache/royale-compiler/commit/eed5882ba935870a98ba4fe8cbf499e5d8344f60
>>
>> In other words, this MXML code won't work if it's a public variable and
>> not
>> a setter:
>>
>> <Component publicVar="value"/>
>>
>> For reference, the compiler currently writes the name of the public
>> variable as a string to the generated JS, like this:
>>
>> var data = [
>> Component,
>>     1,
>>     'publicVar',
>>     true,
>>     'value'
>> ]
>>
>> At runtime, it interprets this array of properties, and basically runs
>> code
>> like this:
>>
>> comp['publicVar'] = 'value';
>>
>> Since Closure compiler rewrites variable names during the minification
>> process, this code keeps using the original name, but other code in the
>> app
>> might start looking for a shorter variable name like "uB". This is the
>> failure that we're warning about.
>>
>> I propose updating the code generated by the compiler to something like
>> this instead:
>>
>> var data = [
>>     Component,
>>     1,
>>     function(){ this.publicVar=true }
>> ]
>>
>> At runtime, the class that interprets MXML data will detect the function
>> and call it like this:
>>
>> func.apply(comp);
>>
>> Because this new code will no longer use a string, Closure can rewrite the
>> property name with its minified version, just like in other parts of the
>> app, and we'll no longer need to warn on declarations of public variables.
>>
>> I have a working prototype for primitive values, like String, Boolean, and
>> Number. Objects and Arrays follow a different path in the MXML data
>> interpreter, but I don't see why I wouldn't be able to handle those with a
>> similar approach.
>>
>> Thoughts?
>>
>> --
>> Josh Tynjala
>> Bowler Hat LLC <https://bowlerhat.dev>
>>
>

Reply via email to