Age | Commit message (Expand) | Author |
2012-09-17 | minor | Mihai Bazon |
2012-09-17 | possible optimization for AST_Undefined...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.
| Mihai Bazon |
2012-09-17 | empty block to empty statement: {} ==> ; | Mihai Bazon |
2012-09-17 | more smallish optimizations | Mihai Bazon |
2012-09-17 | try negating AST_Binary | Mihai Bazon |
2012-09-16 | some cleanup | Mihai Bazon |
2012-09-16 | more sequencesizing (WIP) | Mihai Bazon |
2012-09-16 | drop unused function | Mihai Bazon |
2012-09-16 | rewrite handle_if_return...optimizations of if/return/continue seem to be even better now
| Mihai Bazon |
2012-09-15 | other small optimization:...if (foo) continue;
...body...
==>
if (!foo) { ...body ... }
Only when the parent block is the target loop of the `continue` statement.
| Mihai Bazon |
2012-09-15 | figure out label targets | Mihai Bazon |
2012-09-15 | join_vars:...var XXX;
for (var YYY; ...)
==>
for (var XXX,YYY; ...)
| Mihai Bazon |
2012-09-14 | compress typeof x == "undefined" to x === undefined, which further gets...shortened to x === void 0 (or x === [][0] in unsafe mode)
| Mihai Bazon |
2012-09-14 | minor...when unsafe, compress undefined as [][0]
| Mihai Bazon |
2012-09-14 | adding an imaginary "return undefined" can sometimes help...function f() {
if (foo) return x();
if (!bar) return y();
}
==>
function f() {
return foo ? x() : bar ? void 0 : y();
}
| Mihai Bazon |
2012-09-14 | more optimizations that v1 does and some cleanups...- 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
| Mihai Bazon |
2012-09-13 | few more optimizations:...- 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
| Mihai Bazon |
2012-09-12 | minor | Mihai Bazon |
2012-09-12 | more AST_If optimizations | Mihai Bazon |
2012-09-12 | side effect fixes and small optimization for gzip...prefer to always use > and >= operators (idea from Closure)
| Mihai Bazon |
2012-09-12 | fixed run-tests and an issue about reversing the condition in AST_If | Mihai Bazon |
2012-09-11 | minor | Mihai Bazon |
2012-09-11 | fixed some mess with symbols/scope...- 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
| Mihai Bazon |
2012-09-11 | checkpoint...- discard statements with no side effects (unsafe? could be)
- safer hoist_vars (needs some revamping of scope/mangling)
| Mihai Bazon |
2012-09-10 | hoist_vars is pretty bad, it seems. cancelled it for now. | Mihai Bazon |
2012-09-10 | adaptive base54 digits depending on char frequency (WIP) | Mihai Bazon |
2012-09-10 | more progress on the compressor (WIP) | Mihai Bazon |
2012-09-08 | minor | Mihai Bazon |
2012-09-08 | fix output for division followed by regexp...( v1 report: https://github.com/mishoo/UglifyJS/pull/458 )
| Mihai Bazon |
2012-09-07 | checkpoint | Mihai Bazon |
2012-09-07 | fix bug (forgot arg name) | Mihai Bazon |
2012-09-07 | always keep declarations found in unreachable code...a few more tests and some cleanups.
| Mihai Bazon |
2012-09-07 | fixed tests (need to drop the toplevel block in "expected" if it's a single s... | Mihai Bazon |
2012-09-05 | don't duplicate argument names | Mihai Bazon |
2012-09-05 | fix for variable names like `toString` | Mihai Bazon |
2012-09-05 | support for hoisting declarations...and finally it seems we beat v1 in terms of compression
| Mihai Bazon |
2012-09-05 | cleaned up usage of AST_BlockStatement...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).
| Mihai Bazon |
2012-09-04 | checkpoint | Mihai Bazon |
2012-09-04 | more fiddling with boolean expressions, etc....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).
| Mihai Bazon |
2012-09-04 | if present, the `else` in an `if` should always be forced statement | Mihai Bazon |
2012-09-03 | boolean and if/exit optimizations | Mihai Bazon |
2012-09-03 | minor | Mihai Bazon |
2012-09-03 | more optimizations for ifs/conditionals...(XXX: should add tests before anything else)
| Mihai Bazon |
2012-09-03 | resolve constant expressions | Mihai Bazon |
2012-09-03 | jumps, try and definitions are statements too | Mihai Bazon |
2012-09-03 | an AST_If is too a StatementWithBody | Mihai Bazon |
2012-09-03 | a LabeledStatement should be in fact a StatementWithBody...This fixes output for:
if (foo) {
moo: if (bar) {
break moo;
}
} else {
baz();
}
(the labeled statement must be outputted inside brackets)
| Mihai Bazon |
2012-09-03 | switch branches must be declared `required` so that the compressor doesn't...replace nodes with a single statement.
looks stable for now, though mess begins to sink in. need to review the AST
hierarchy.
| Mihai Bazon |
2012-09-03 | Reverting "minor perf. improvements"...Revert "minor perf. improvements"
This reverts commit 24bfd55a22afd791d4a97694641831cfbd27fb14.
broke the parser somehow; too early to optimize, let's get the other stuff running.
| Mihai Bazon |
2012-09-02 | add source mappings for more node types; started CLI utility | Mihai Bazon |