aboutsummaryrefslogtreecommitdiff
path: root/lib
AgeCommit message (Collapse)Author
2013-03-22Keep legit code working even when --screw-ie is not passed.Mihai Bazon
Previously: Without `--screw-ie`, UglifyJS would always leak names of function expressions into the containing scope, as if they were function declarations. That was to emulate IE<9 behavior. Code relying on this IE bug would continue to work properly after mangling, although it would only work in IE (since other engines don't share the bug). Sometimes this broke legitimage code (see #153 and #155). With `--screw-ie` the names would not be leaked into the current scope, working properly in legit cases; but still it broke legit code when running in IE<9 (see #24). Currently: Regardless of the `--screw-ie` setting, the names will not be leaked. Code relying on the IE bug will not work properly after mangling. <evil laughter here> Without `--screw-ie`: a hack has been added to the mangler to avoid using the same name for a function expression and some other variable in the same scope. This keeps legit code working, at the (negligible, indeed) cost of one more identifier. With `--screw-ie` you allow the mangler to name function expressions with the same identifier as another variable in scope. After mangling code might break in IE<9. Oh man, the commit message is longer than the patch. Fix #153, #155
2013-03-13Support mangling toplevel namesMihai Bazon
Close #127
2013-03-11Disable `unsafe` by defaultMihai Bazon
Close #147
2013-03-04Fix reordering comparisonsMihai Bazon
Close #143
2013-03-02Add `--screw-ie` optionMihai Bazon
For now the implication is that UglifyJS will not leak a function expression's name in the surrounding scope (IE < 9 does that). (ref. mishoo/UglifyJS#485)
2013-03-01Drop last `default:` if it's the last branch and emptyMihai Bazon
Close #141
2013-03-01Compress boolean constants after evaluationMihai Bazon
Close #137
2013-02-19Fix compressing `do {...} while (false)`Mihai Bazon
It's not safe to transform it to {...} because the body might contain `break`. The solution could be more elaborate (detect if body contains `break`) but I don't think it's worth the trouble. Close #129
2013-02-06Force space after literal regexp when used in "instanceof" or "in"Mihai Bazon
Close #118
2013-02-06Give up evaluating (unary-prefix '-' 0)Mihai Bazon
Close #117 ------ JS, WHY YOU SUCK SO BADLY? ;-(
2013-02-06Fix parens for NaNMihai Bazon
Close #116
2013-02-06Fix parens for negative numbersMihai Bazon
Close #115
2013-02-06Fix parens for AST_NewMihai Bazon
Close #114
2013-02-06Fix handling of constantsMihai Bazon
Close #113
2013-02-05Ugly hack to print comments before return/throw statementsMihai Bazon
Close #112
2013-02-01Fix end token for Assign nodesMihai Bazon
2013-01-23Fix #105: property comparison to undefined is not always safeRichard Gibson
2013-01-17[AST_Hole] the print function can be a no-op.Mihai Bazon
2013-01-17Fix output for arrays containing undefined values.David Glasser
1b6bcca7 was a first attempt at this. That commit made Uglify stop replacing holes with undefined, but instead it started replacing undefined with holes. This is slightly problematic, because there is a difference between a hole and an undefined value. More problematically, it changed [1,undefined] to [1,] which generally doesn't even parse as a hole (just as a trailing comma), so it didn't even preserve the length of the array! Instead, parse holes as their own special AST node which prints invisibly.
2013-01-17Handle String() with no arguments.Mihai Bazon
Fix #91
2013-01-04Fix handling of labels in nested scopesMihai Bazon
2013-01-02Implement `-m sort=true`Mihai Bazon
close #83
2012-12-22Accept string or number as name of an accessor.Mihai Bazon
[not sure I'm happy about this fix] Reference mishoo/UglifyJS#478
2012-12-21Optimize new Array(1, 2, 3) → [1, 2, 3]Mihai Bazon
Close #74
2012-12-21Fix output when semicolons is off.Mihai Bazon
(need to force a semicolon for the empty body of an `if`) Close #72
2012-12-12Small cleanupMihai Bazon
2012-12-06Add proper parens in "NoIn" expressions.Mihai Bazon
fix #60.
2012-12-05small improvement on merging assignments into hoisted varsMihai Bazon
2012-12-05When hoisting variables, try to merge in assignments that follow.Mihai Bazon
2012-11-30Don't messup compressor stack while optimizing SwitchMihai Bazon
Fix #59
2012-11-24fix #55Mihai Bazon
2012-11-23fix for https://github.com/mishoo/UglifyJS/issues/474Mihai Bazon
2012-11-18fix #51Mihai Bazon
2012-11-17retain (1,eval) as is when it's the expression of an AST_CallMihai Bazon
otherwise we change the meaning of eval from global to lexical.
2012-11-14Add support for somewhat preserving line numbers.Richard van Velzen
Usage: uglifyjs2 -b "beautify=0,preserve_line=1" /path/to/js ref #46
2012-11-14better solution for the last test in constant switch foldingMihai Bazon
2012-11-14optimize constant switch blocksMihai Bazon
ref. mishoo/UglifyJS#441
2012-11-13Merge branch 'optimize_concat' of https://github.com/rvanvelzen/UglifyJS2 ↵Mihai Bazon
into rvanvelzen-optimize_concat
2012-11-13don't change order in binary expressions if both operands have side effectsMihai Bazon
2012-11-12Add simple optimization for empty-string concats.Richard van Velzen
ref. #43
2012-11-12fix invalid AST produced by dropping unused variableMihai Bazon
close #44
2012-11-11convert x.toString() to ""+x instead of x+""Dan Wolff
In some places this can save one byte in whitespace, e.g. after return. Example: function f(arg) { // return""+arg - no space between return and "" return arg.toString(); }
2012-11-08AST_LabelRef no longer inherits from AST_SymbolRefMihai Bazon
2012-11-08fix API breakageMihai Bazon
close #36, #38
2012-11-08optimization for if/break as first statement in a loop bodyMihai Bazon
for(...; x; ...) if (y) break; → for(...; x&&!y; ...); similarly for `while` and some combinations (i.e. the `break` appears in the `else` clause, etc.)
2012-11-07fix another small regressionMihai Bazon
we do need parens here: `new (foo.bar().baz)`, but not here: `new foo.bar.baz`
2012-11-07fix regression from 5346fb94 (shouldn't parenthesize i++ in x[i++])Mihai Bazon
2012-11-07add AST_Accessor and AST_SymbolAccessor node typesMihai Bazon
AST_Accessor will represent the function for a setter or getter. Since they are not mangleable, and they should not introduce a name in scope, we have a new node for their name (AST_SymbolAccessor) which doesn't inherit from AST_SymbolDeclaration. fix #37
2012-11-07parenthesize property access when it's the expression in NewMihai Bazon
refs #35
2012-11-07further fix for parens around New (refs #35)Mihai Bazon