I'm unable to gather from this thread what code is being generated and
what errors are being generated when it doesn't work.

-Alex

On 7/12/17, 12:39 PM, "Harbs" <harbs.li...@gmail.com> wrote:

>I tried on a simpler project and the only thing being output is a trace
>declaration with an empty function:
>u('org.apache.flex.utils.Language.trace',m());
>
>All calls to trace() are stripped out by the google compiler.
>
>This looks to be the case even without modifying the Language.trace
>output.
>
>FWIW, This is with -remove-circulars. When I tried to compile without
>-remove-circulars it had all kinds of runtime errors including calls to
>non-existent trace functions. I don’t know hwy. The project is really
>simple, and I’d think -remove-circulars should not be required.
>
>I have no idea why my more complex project outputs trace differently…
>
>Harbs
>
>> On Jul 12, 2017, at 8:11 PM, 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.computeTargetAtt
>>ributes(FlexJSProject.java:354)org.apache.flex.compiler.internal.codegen.
>>mxml.flexjs.MXMLFlexJSPublisher.writeTemplate(MXMLFlexJSPublisher.java:55
>>4)org.apache.flex.compiler.internal.codegen.mxml.flexjs.MXMLFlexJSPublish
>>er.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.cl
>>ients.MXMLJSCFlex.mainNoExit(MXMLJSCFlex.java:202)org.apache.flex.compile
>>r.clients.MXMLJSC._mainNoExit(MXMLJSC.java:352)org.apache.flex.compiler.c
>>lients.MXMLJSC.mainNoExit(MXMLJSC.java:287)org.apache.flex.compiler.clien
>>ts.MXMLJSC.staticMainNoExit(MXMLJSC.java:247)org.apache.flex.compiler.cli
>>ents.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