I actually realized that if I don’t do a clean before a regular compile, the release is built from the modified JS files in the framework.
I moved "if (!goog.DEBUG)return;” to the very beginning of the function and removed the @export tag. With that change, all traces of trace are removed. (pun intended) ;-) I think the takeaway should be that we should have some kind of metadata that the compiler recognizes to not insert the @export tag and insert a bailout if goog.DEBUG is false. That would allow us to define arbitrary functions to run on a debug build and be automatically stripped out for release. A @debug comment before the function declaration is probably the simplest solution and fits with the current conventions. I’m not sure what this would all look like for a swf compile. Harbs > On Jul 13, 2017, at 12:35 AM, Alex Harui <aha...@adobe.com.INVALID> wrote: > > Bummer. It looks like you are using a custom template and I never tried > that. I think you can just check for a null mainCU and get past that. > > On 7/12/17, 10:11 AM, "Harbs" <harbs.li...@gmail.com> wrote: > >> 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.computeTargetAttr >> ibutes(FlexJSProject.java:354)org.apache.flex.compiler.internal.codegen.mx >> ml.flexjs.MXMLFlexJSPublisher.writeTemplate(MXMLFlexJSPublisher.java:554)o >> rg.apache.flex.compiler.internal.codegen.mxml.flexjs.MXMLFlexJSPublisher.p >> ublish(MXMLFlexJSPublisher.java:345)org.apache.flex.compiler.clients.MXMLJ >> SCFlex.compile(MXMLJSCFlex.java:387)org.apache.flex.compiler.clients.MXMLJ >> SCFlex._mainNoExit(MXMLJSCFlex.java:245)org.apache.flex.compiler.clients.M >> XMLJSCFlex.mainNoExit(MXMLJSCFlex.java:202)org.apache.flex.compiler.client >> s.MXMLJSC._mainNoExit(MXMLJSC.java:352)org.apache.flex.compiler.clients.MX >> MLJSC.mainNoExit(MXMLJSC.java:287)org.apache.flex.compiler.clients.MXMLJSC >> .staticMainNoExit(MXMLJSC.java:247)org.apache.flex.compiler.clients.MXMLJS >> C.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 >>>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>> >>>>> >>>> >>> >> >