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 <aha...@adobe.com.INVALID> 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" <harbs.li...@gmail.com> 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 <aha...@adobe.com.INVALID>
>>> 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" <harbs.li...@gmail.com> 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 <joshtynj...@gmail.com>
>>>>> 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 <joshtynj...@gmail.com>
>>>>> 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 <harbs.li...@gmail.com>
>>>>>> 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 <harbs.li...@gmail.com> 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 <aha...@adobe.com.INVALID>
>>>>>>> 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" <harbs.li...@gmail.com> wrote:
>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>>> On Jul 12, 2017, at 8:20 AM, Alex Harui
>>>>>>>>>>> <aha...@adobe.com.INVALID>
>>>>>>>>>>> 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
>>>>>>>>> 
>>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>> 
>>>> 
>>> 
>> 
> 

Reply via email to