Maybe I’m doing something wrong, but I get the following error when I tried
using -skip-transpile:
[java] java.lang.NullPointerException
org.apache.flex.compiler.internal.projects.FlexJSProject.computeTargetAttributes(FlexJSProject.java:354)org.apache.flex.compiler.internal.codegen.mxml.flexjs.MXMLFlexJSPublisher.writeTemplate(MXMLFlexJSPublisher.java:554)org.apache.flex.compiler.internal.codegen.mxml.flexjs.MXMLFlexJSPublisher.publish(MXMLFlexJSPublisher.java:345)org.apache.flex.compiler.clients.MXMLJSCFlex.compile(MXMLJSCFlex.java:387)org.apache.flex.compiler.clients.MXMLJSCFlex._mainNoExit(MXMLJSCFlex.java:245)org.apache.flex.compiler.clients.MXMLJSCFlex.mainNoExit(MXMLJSCFlex.java:202)org.apache.flex.compiler.clients.MXMLJSC._mainNoExit(MXMLJSC.java:352)org.apache.flex.compiler.clients.MXMLJSC.mainNoExit(MXMLJSC.java:287)org.apache.flex.compiler.clients.MXMLJSC.staticMainNoExit(MXMLJSC.java:247)org.apache.flex.compiler.clients.MXMLJSC.main(MXMLJSC.java:229)
[java]
[java]
[java] Java Result: 3
> On Jul 12, 2017, at 7:48 PM, Alex Harui <[email protected]> wrote:
>
> Trace supports multiple parameters and concatenates them with " "
> in-between.
>
> If you want to investigate more, you can use -sdk-js-lib to point to a
> hacked version of Language.js with goog.DEBUG around the "rest" code.
>
> I think you can also just modify what is in bin/js-debug and run the
> compiler with the -skip-transpile option and it won't re-transpile and
> just pass js-debug files to GCC and generate a new js-release output.
>
> -Alex
>
> On 7/12/17, 9:11 AM, "Harbs" <[email protected]> wrote:
>
>> That line was what was left of the trace function.
>>
>> The reason the trace function is not completely empty is because it has
>> this code generated from "…rest” at the start of the function:
>> rest = Array.prototype.slice.call(arguments, 0);
>>
>> I have no idea why that code is necessary. Maybe if it was not generated
>> and the function was truly empty, the trace calls would be stripped out
>> as well?
>>
>> Leftover trace calls elsewhere in the code look something like this:
>> uM('unexpected condition in deferredBindingsHandler’);
>>
>>> On Jul 12, 2017, at 6:08 PM, Alex Harui <[email protected]>
>>> wrote:
>>>
>>> If it were up to me, we'd strip traces based on the optimize compiler
>>> option. I think that's how it worked in the Flex SDK.
>>>
>>> I thought GCC had enough dead-code-removal logic to remove
>>> Language.trace
>>> once it saw that trace effectively did nothing.
>>>
>>> I can't seem to piece together from this thread what the original AS was
>>> and what the un-minified JS output was. Maybe there's something about
>>> the
>>> JS output that isn't right. It is strange to see the string name of the
>>> trace function.
>>>
>>> Regarding a logging system, I think folks are just used to trace and the
>>> cool thing about JS right now is that you can replace functions at
>>> runtime, so a logging bead would just replace Language.trace().
>>>
>>> -Alex
>>>
>>> On 7/12/17, 6:44 AM, "Harbs" <[email protected]> wrote:
>>>
>>>> Interesting scenarios. I would not have thought of that.
>>>>
>>>> If we could figure out how to strip the function call and leave the
>>>> parameter, the compiler would strip out the contents if it could be
>>>> safely removed.
>>>>
>>>> So trace(“something”) would become “something” which is en empty
>>>> statement and would be stripped out.
>>>>
>>>> Of course, I have no idea how to go about doing that… ;-)
>>>>
>>>> Harbs
>>>>
>>>>> On Jul 12, 2017, at 4:32 PM, Josh Tynjala <[email protected]>
>>>>> wrote:
>>>>>
>>>>> Probably the same with function calls too:
>>>>>
>>>>> trace(someFunction());
>>>>>
>>>>> They wanted this to remain:
>>>>>
>>>>> someFunction();
>>>>>
>>>>> - Josh
>>>>>
>>>>> On Wed, Jul 12, 2017 at 6:22 AM, Josh Tynjala <[email protected]>
>>>>> wrote:
>>>>>
>>>>>> One thing to keep in mind with stripping out trace() calls is that
>>>>>> some
>>>>>> developers expect any modifications to variables that happen inside
>>>>>> the
>>>>>> arguments to remain. I remember a while back someone at Adobe
>>>>>> mentioning
>>>>>> that people complained when something like this was completely
>>>>>> stripped out:
>>>>>>
>>>>>> trace(doSomething++);
>>>>>>
>>>>>> Because they expected this part to remain:
>>>>>>
>>>>>> doSomething++;
>>>>>>
>>>>>> - Josh
>>>>>>
>>>>>> On Wed, Jul 12, 2017 at 12:24 AM, Harbs <[email protected]>
>>>>>> wrote:
>>>>>>
>>>>>>> My bad. It does in fact compile down to this:
>>>>>>>
>>>>>>> function
>>>>>>> uM(a){a=Array.prototype.slice.call(arguments,0)}w('org.apach
>>>>>>> e.flex.utils.Language.trace',uM);
>>>>>>>
>>>>>>> So trace does not actually do anything. Great! :-)
>>>>>>>
>>>>>>> However, it’s still being called by the client code. (It just does
>>>>>>> nothing.) Not super important, but it would be nice if at some point
>>>>>>> we can
>>>>>>> figure out if there’s a way to strip out the calls completely.
>>>>>>>
>>>>>>>> On Jul 12, 2017, at 10:07 AM, Harbs <[email protected]> wrote:
>>>>>>>>
>>>>>>>> Oof. I think I’m still waking up. ;-)
>>>>>>>>
>>>>>>>> I did not realize what I was looking at with the goog.DEBUG. My
>>>>>>> recollection is that trace statements are still being used in the
>>>>>>> release,
>>>>>>> but I’ll double check that.
>>>>>>>>
>>>>>>>>> On Jul 12, 2017, at 9:56 AM, Alex Harui <[email protected]>
>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>> Well, the goal of using goog.DEBUG in Language.as trace() was to
>>>>>>> convince
>>>>>>>>> GCC to eliminate trace(). I haven't checked whether it is working
>>>>>>>>> or
>>>>>>> not.
>>>>>>>>> Requiring everyone to use goog.DEBUG around trace statements
>>>>>>>>> sounds
>>>>>>> like
>>>>>>>>> a pain. Probably better to teach the publisher to remove it if
>>>>>>>>> GCC
>>>>>>> can't
>>>>>>>>> be taught to do it. We visit almost every line of the JS output
>>>>>>>>> in
>>>>>>>>> the
>>>>>>>>> publishers right now.
>>>>>>>>>
>>>>>>>>> My 2 cents,
>>>>>>>>> -Alex
>>>>>>>>>
>>>>>>>>> On 7/11/17, 11:47 PM, "Harbs" <[email protected]> wrote:
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>> On Jul 12, 2017, at 8:20 AM, Alex Harui
>>>>>>>>>>> <[email protected]>
>>>>>>>>>>> wrote:
>>>>>>>>>>>
>>>>>>>>>>> Again, though, I think this optimization isn't urgent.
>>>>>>>>>>
>>>>>>>>>> I completely agree. That’s why I have not been bringing this up
>>>>>>> despite
>>>>>>>>>> it being on my mind. When the discussion came up, I couldn’t help
>>>>>>>>>> but
>>>>>>>>>> join. ;-)
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>> goog.DEBUG is already being used in Language.as.
>>>>>>>>>>
>>>>>>>>>> Thanks! I hadn’t noticed. I was missing an import of of
>>>>>>>>>> goog.DEBUG
>>>>>>>>>> in
>>>>>>>>>> COMPILE::JS I’m guessing the imports of goog.bind and goog.global
>>>>>>>>>> was
>>>>>>>>>> enough to make goog.DEBUG visible to the compiler in Language.as.
>>>>>>>>>>
>>>>>>>>>> Once we’re on this topic, there’s something that I had wanted to
>>>>>>> bring up
>>>>>>>>>> for a long time: I think trace statements should disappear in the
>>>>>>> release
>>>>>>>>>> JS build. Should we put all the JS trace code inside an
>>>>>>>>>> if(goog.DEBUG)
>>>>>>>>>> block?
>>>>>>>>>>
>>>>>>>>>> Thanks,
>>>>>>>>>> Harbs
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>
>>>
>>
>