Amazing!

> On Jan 16, 2020, at 10:59 PM, Josh Tynjala <[email protected]> wrote:
> 
> Thank you, Harbs! Wrapping the variable name in a
> goog.reflect.objectProperty() call works perfectly. This is exactly why I
> started this thread, to see if anyone could suggest possible alternatives.
> 
> Thankfully, we can keep the same simple data structure as before, and my
> initial proposal with functions can be forgotten. In a release build, I can
> see that goog.reflect.objectProperty() calls are replaced by a simple
> string literal (containing the minified variable name), so we don't have to
> worry about extra performance impact.
> 
> --
> Josh Tynjala
> Bowler Hat LLC <https://bowlerhat.dev>
> 
> 
> On Wed, Jan 15, 2020 at 8:32 PM Harbs <[email protected]> wrote:
> 
>> Sounds good!
>> 
>> 
>> https://github.com/google/closure-compiler/wiki/Type-Based-Property-Renaming
>> <
>> https://github.com/google/closure-compiler/wiki/Type-Based-Property-Renaming
>>> 
>> 
>> The function seems to be goog.reflect.objectProperty()
>> 
>> I’m not sure exactly how it works though.
>> 
>>> On Jan 16, 2020, at 1:37 AM, Greg Dove <[email protected]> wrote:
>>> 
>>> 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