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
-~----------~----~----~----~------~----~------~--~---