Created
October 30, 2013 11:15
-
-
Save mishoo/7230949 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//// Safari parser bug | |
//// derived from: https://github.com/mishoo/UglifyJS2/issues/313 | |
// fails with SyntaxError: Expected token ')' | |
( function(){ return this || eval('this'); }().x = "y" ); | |
// fails with SyntaxError: Unexpected token '=' | |
1, function(){ return this || eval('this'); }().x = "y"; | |
//// weird that we get different error messages | |
//// The following all work. | |
// place the function call inside parens | |
( (function(){ return this || eval('this'); }()).x = "y" ); | |
1, (function(){ return this || eval('this'); }()).x = "y"; | |
// simplify the return expression, keep `then` | |
( function(){ return this; }().x = "y" ); | |
1, function(){ return this; }().x = "y"; | |
// keep `eval` | |
( function(){ return eval('this'); }().x = "y" ); | |
1, function(){ return eval('this'); }().x = "y"; | |
// place the return expression inside parens (!!) | |
( function(){ return ( this || eval('this') ); }().x = "y" ); | |
1, function(){ return ( this || eval('this') ); }().x = "y"; | |
//// I have the strange feeling that the *parser* in JSC tries to | |
//// inline the return value and parse the result instead, like some | |
//// sort of macro-expansion. Huh?! */ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment