On Thu, Jul 2, 2009 at 2:02 PM, <[email protected]> wrote:

> There's a few corner cases in which this optimization may change the
> meaning of code:
>
> 1.  Name scoping of builtins using locals/builtins:
>
> var Array = function() { this.toString = function() { return "bleh"; }
> };
> x = new Array()
> alert(x);
>

Ugh, you're right. Trapping this would be kind of tricky. I suppose I could
keep track of any vars in scope that shadow Array/Object. There's also the
case where
an insane person modifies the global Array ($wnd.Array = ...) Would be nice
if it implicity invoked Array's prototype constructor.




>
> var x = { Array: function() { this.toString = function() { return
> "bleh"; } } };
> with (x) {
>   y = new Array();
> }
> alert(y);


This one is easy. GWT's Javascript parser does not support 'with'. It's
banned.


>
> 2. Parameters to constructor:
>
> new Object(1) - "wraps" the object in the parameter so that it has a
> different identity.  This shouldn't be modified.
>
> new Array(1,2,3) - wraps the parameters in a new array.  This is always
> equivalent to [1,2,3] (with the exception of cases that fall under 1
> above).
>

This case can be handled.

Given the complexity of tracking variable shadowing vs the benefit this
patch provides, I'm not sure it's worth it. For example, in Showcase,
there's only a single call to new Array() in the entire output.

-Ray


>
>
>
> http://gwt-code-reviews.appspot.com/47810
>

--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---

Reply via email to