aboutsummaryrefslogtreecommitdiff
path: root/lib
AgeCommit message (Collapse)Author
2012-09-17minorMihai Bazon
2012-09-17possible optimization for AST_UndefinedMihai Bazon
if undefined is defined, ;-), we replace AST_Undefined nodes to a reference to the "undefined" variable; in turn the mangler will compress it to a single letter; this helps at least on jQuery.
2012-09-17empty block to empty statement: {} ==> ;Mihai Bazon
2012-09-17more smallish optimizationsMihai Bazon
2012-09-17try negating AST_BinaryMihai Bazon
2012-09-16some cleanupMihai Bazon
2012-09-16more sequencesizing (WIP)Mihai Bazon
2012-09-16drop unused functionMihai Bazon
2012-09-16rewrite handle_if_returnMihai Bazon
optimizations of if/return/continue seem to be even better now
2012-09-15other small optimization:Mihai Bazon
if (foo) continue; ...body... ==> if (!foo) { ...body ... } Only when the parent block is the target loop of the `continue` statement.
2012-09-15figure out label targetsMihai Bazon
2012-09-15join_vars:Mihai Bazon
var XXX; for (var YYY; ...) ==> for (var XXX,YYY; ...)
2012-09-14compress typeof x == "undefined" to x === undefined, which further getsMihai Bazon
shortened to x === void 0 (or x === [][0] in unsafe mode)
2012-09-14minorMihai Bazon
when unsafe, compress undefined as [][0]
2012-09-14adding an imaginary "return undefined" can sometimes helpMihai Bazon
function f() { if (foo) return x(); if (!bar) return y(); } ==> function f() { return foo ? x() : bar ? void 0 : y(); }
2012-09-14more optimizations that v1 does and some cleanupsMihai Bazon
- a = a + x ==> a+=x - joining consecutive var statements (hoisting is not always desirable) - x == false ==> x == 0, x != true ==> x != 1 - x, x ==> x; x = exp(), x ==> x = exp() - discarding useless break-s
2012-09-13few more optimizations:Mihai Bazon
- do multiple passes in tighten_body if it was changed - transform if (foo) return x; return y; ==> return foo?x:y - don't optimize !0 as true (use best_of after evaluation of constant expr) With hoist_vars off we now beat UglifyJS v1 on jQuery-1.8.1
2012-09-12minorMihai Bazon
2012-09-12more AST_If optimizationsMihai Bazon
2012-09-12side effect fixes and small optimization for gzipMihai Bazon
prefer to always use > and >= operators (idea from Closure)
2012-09-12fixed run-tests and an issue about reversing the condition in AST_IfMihai Bazon
2012-09-11minorMihai Bazon
2012-09-11fixed some mess with symbols/scopeMihai Bazon
- all symbols now have a `thedef` property which is a SymbolDef object, instead of the `uniq` that we had before (pointing to the first occurrence of the name as declaration). - for undeclared symbols we still create a SymbolDef object in the toplevel scope but mark it "undeclared" - we can now call figure_out_scope after squeezing, which is useful in order not to mangle names that were dropped by the squeezer
2012-09-11checkpointMihai Bazon
- discard statements with no side effects (unsafe? could be) - safer hoist_vars (needs some revamping of scope/mangling)
2012-09-10hoist_vars is pretty bad, it seems. cancelled it for now.Mihai Bazon
2012-09-10adaptive base54 digits depending on char frequency (WIP)Mihai Bazon
2012-09-10more progress on the compressor (WIP)Mihai Bazon
2012-09-08minorMihai Bazon
2012-09-08fix output for division followed by regexpMihai Bazon
( v1 report: https://github.com/mishoo/UglifyJS/pull/458 )
2012-09-07checkpointMihai Bazon
2012-09-07fix bug (forgot arg name)Mihai Bazon
2012-09-07always keep declarations found in unreachable codeMihai Bazon
a few more tests and some cleanups.
2012-09-07fixed tests (need to drop the toplevel block in "expected" if it's a single ↵Mihai Bazon
statement)
2012-09-05don't duplicate argument namesMihai Bazon
2012-09-05fix for variable names like `toString`Mihai Bazon
2012-09-05support for hoisting declarationsMihai Bazon
and finally it seems we beat v1 in terms of compression
2012-09-05cleaned up usage of AST_BlockStatementMihai Bazon
The following nodes were instances of AST_BlockStatement: AST_Scope, AST_SwitchBlock, AST_SwitchBranch. Also, AST_Try, AST_Catch, AST_Finally were having a body instanceof AST_BlockStatement. Overloading the meaning of AST_BlockStatement this way turned out to be a mess; we now have an AST_Block class that is the base class for things having a block of statements (might or might not be bracketed). The `this.body` of AST_Scope, AST_Try, AST_Catch, AST_Finally is now an array of statements (as they inherit from AST_Block). Avoiding calling superclass's _walk function in walkers (turns out we walked a node multiple times).
2012-09-04checkpointMihai Bazon
2012-09-04more fiddling with boolean expressions, etc.Mihai Bazon
optimize away while(false), and transform while(true) ==> for(;;). UNSAFE: some expressions are optimized away when we're in boolean context and can determine that the value will always be true or false. For example: x() || true ==> always `true` in boolean context x() && false ==> always `false` in boolean context It's not technically correct to drop these expressions since we drop the function call too (that might have side effects); on the other hand, I can't see any legitimate use for such expressions and they might simply indicate a bug (we do warn about it).
2012-09-04if present, the `else` in an `if` should always be forced statementMihai Bazon
2012-09-03boolean and if/exit optimizationsMihai Bazon
2012-09-03minorMihai Bazon
2012-09-03more optimizations for ifs/conditionalsMihai Bazon
(XXX: should add tests before anything else)
2012-09-03resolve constant expressionsMihai Bazon
2012-09-03jumps, try and definitions are statements tooMihai Bazon
2012-09-03an AST_If is too a StatementWithBodyMihai Bazon
2012-09-03a LabeledStatement should be in fact a StatementWithBodyMihai Bazon
This fixes output for: if (foo) { moo: if (bar) { break moo; } } else { baz(); } (the labeled statement must be outputted inside brackets)
2012-09-03switch branches must be declared `required` so that the compressor doesn'tMihai Bazon
replace nodes with a single statement. looks stable for now, though mess begins to sink in. need to review the AST hierarchy.
2012-09-03Reverting "minor perf. improvements"Mihai Bazon
Revert "minor perf. improvements" This reverts commit 24bfd55a22afd791d4a97694641831cfbd27fb14. broke the parser somehow; too early to optimize, let's get the other stuff running.
2012-09-02add source mappings for more node types; started CLI utilityMihai Bazon