Hi,

Chrome 49 enabled lots of ES6 features, 
see: http://v8project.blogspot.de/2016/01/v8-release-49.html

Part of this is the so called sloppy function hosting.

A simple example:


ES5 (old semantics)

ES2015 (new semantics)

Code

try {

 function foo() {

   foo=function(){};

   console.log('hello');

 }

} catch(e) { }

foo(); // overwrites behavior

foo(); // no-op

try {

 function foo() {

   foo=function(){};

   console.log('hello');

 }

} catch(e) { }

foo(); // does not overwrite

foo();

Output

hello

hello

hello


The problem here is the presence of the try catch block and that semantics 
have changed here.
We investigated this a few months back and all modern versions of GWT 
should not be impacted.

So my first recommendation would be to upgrade to GWT 2.8-beta1 and see if 
the issue still exists for you.
 


On Tuesday, April 5, 2016 at 9:38:28 PM UTC+2, TazmanianD wrote:
>
> I'm duplicating a comment I made in the Chrome group but I thought I 
> should cross-post it here as well. We're using GWT 2.5.0 and we're 
> suddenly experiencing massive errors as well although fortunately for us, 
> they only seem to be affecting our development env and not production.
>
> In our case, what I've discovered is that the static initializers for 
> *some* classes are being executed repeatedly. This is fatal for enums as 
> the enum values are recreated each time and they're supposed to be 
> singletons. The result is that EnumMaps for those enums don't work at all. 
> In debugging the code, I found that when the static initializer function 
> reassigns itself to the null function, this works in the function but when 
> the function returns, the function pointer is reset back to where it was 
> originally pointing. This means that next time the initializer is executed, 
> instead of it being a no-op, it runs again. I almost wonder if there's some 
> sort of scope confusion and the function assignment is assigning to the 
> wrong or duplicate function.
>
> And another thing I'll note is that we have soft-permutations enabled in 
> our dev env and when we disable those and generate separate permutations, 
> the problem goes away. I don't see how that can explain what I saw in my 
> debugger but I thought it was worth mentioning.
>
> Unfortunately my attempts at reducing the problem to a simple case have 
> totally failed as when I delete too much, the problem seems to disappear. 
> This unfortunately makes my report here not terribly useful but maybe 
> others can chime in if their seeing the same thing.
>
> But let me try to summarize with some pseudo-code (a simple example like 
> this does *not* exhibit the problem):
>
>
> class MyEnum {
>   static {
>     Window.alert("Static Initializer");
>   }
>
>   public void foo() {...}
> }
>
>
> MyEnum instance = new MyEnum();
> instance.foo();
>
> -- When this code is run the alert "Static Initializer" is displayed twice 
> (or more if you have additional usages)
>
> --- Get's compiled into (approximately):
>
> var instance = $clinit$MyEnum(), new MyEnum();
> $clinit$MyEnum(), instance.foo();
>
> function $clinit$MyEnum() {
>   $clinit$MyEnum() = nullFunction; // Disables the static initializer so 
> it doesn't run again
>   $wnd.alert("Static Initializer");
> }
>
> -- What I see in the Chrome debugger is that when $clinit$MyEnum is 
> assigned to the nullFunction, the watch immediately reflects this. However 
> the moment you step back out of the function, the value of "$clinit$MyEnum" 
> returns to the original function.
>

-- 
You received this message because you are subscribed to the Google Groups "GWT 
Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/google-web-toolkit.
For more options, visit https://groups.google.com/d/optout.

Reply via email to