Mihai Bazon [Tue, 9 Oct 2012 10:13:55 +0000 (13:13 +0300)]
fix detecting symbols in use
Mihai Bazon [Tue, 9 Oct 2012 10:04:33 +0000 (03:04 -0700)]
Merge pull request #8 from SevInf/master
Fix crash in minify function
Sergej Tatarincev [Tue, 9 Oct 2012 09:52:28 +0000 (12:52 +0300)]
Fix nodejs minify without inSourceMap exception
When inSourceMap is omitted fs.readFile throws exception. Fixed version
calls fs.readFile only when inSourceMap argument is present
Mihai Bazon [Mon, 8 Oct 2012 18:22:20 +0000 (21:22 +0300)]
fix `inSourceMap` in `minify` (should read the file)
Mihai Bazon [Mon, 8 Oct 2012 18:15:47 +0000 (21:15 +0300)]
add simple API wrapper: UglifyJS.minify
(refs #7)
Mihai Bazon [Mon, 8 Oct 2012 11:30:34 +0000 (14:30 +0300)]
added some basic API doc
Mihai Bazon [Mon, 8 Oct 2012 10:37:27 +0000 (13:37 +0300)]
should not expose base54.sort() in the API docs, I think
Mihai Bazon [Mon, 8 Oct 2012 09:55:18 +0000 (12:55 +0300)]
added --self to easily get a browser-runnable version of UglifyJS
Mihai Bazon [Mon, 8 Oct 2012 09:53:17 +0000 (12:53 +0300)]
eliminate redundant directives in the same scope
Mihai Bazon [Mon, 8 Oct 2012 09:52:25 +0000 (12:52 +0300)]
for certain nodes that we invent we might not have a original source file to
map from, so just use "?". and in any case, don't fail hard when addMapping throws.
Mihai Bazon [Fri, 5 Oct 2012 20:10:52 +0000 (23:10 +0300)]
fix typo
Mihai Bazon [Fri, 5 Oct 2012 19:59:05 +0000 (22:59 +0300)]
remove unused code
Mihai Bazon [Fri, 5 Oct 2012 17:24:56 +0000 (20:24 +0300)]
minor
Mihai Bazon [Fri, 5 Oct 2012 13:51:16 +0000 (16:51 +0300)]
replace `(function(){ ...no side effects ... })()` with `undefined`.
Mihai Bazon [Fri, 5 Oct 2012 13:17:31 +0000 (16:17 +0300)]
prevent mangling only when eval is *called*, not when it's just referenced
Mihai Bazon [Fri, 5 Oct 2012 12:31:41 +0000 (15:31 +0300)]
add note about installation
Mihai Bazon [Fri, 5 Oct 2012 12:22:12 +0000 (15:22 +0300)]
added --acorn and --spidermonkey options
Mihai Bazon [Fri, 5 Oct 2012 12:05:06 +0000 (15:05 +0300)]
fixed import of locations from SpiderMonkey AST
Mihai Bazon [Thu, 4 Oct 2012 14:28:35 +0000 (17:28 +0300)]
use the appropriate constructor for symbols
Mihai Bazon [Thu, 4 Oct 2012 14:28:09 +0000 (17:28 +0300)]
minor
Mihai Bazon [Thu, 4 Oct 2012 05:49:18 +0000 (08:49 +0300)]
removed some unused variables
Mihai Bazon [Wed, 3 Oct 2012 18:39:47 +0000 (21:39 +0300)]
moving code around
Mihai Bazon [Wed, 3 Oct 2012 17:03:17 +0000 (20:03 +0300)]
define AST_Node.from_mozilla_ast(ast)
returns an UglifyJS2 AST given a Mozilla AST. Still needs some work to do
(need to create specific nodes like AST_SymbolRef, AST_SymbolLambda
etc. instead of base AST_Symbol, in order for the mangler/compressor to work
properly)
Mihai Bazon [Wed, 3 Oct 2012 17:01:32 +0000 (20:01 +0300)]
ignore tmp/
Mihai Bazon [Wed, 3 Oct 2012 12:52:01 +0000 (15:52 +0300)]
more cleanup (dropped AST_SwitchBlock)
Mihai Bazon [Wed, 3 Oct 2012 12:41:11 +0000 (15:41 +0300)]
AST cleanup (dropped AST_StatementBase)
Mihai Bazon [Wed, 3 Oct 2012 10:19:00 +0000 (13:19 +0300)]
added package.json
Mihai Bazon [Wed, 3 Oct 2012 10:08:03 +0000 (13:08 +0300)]
added option for side-effect-free statements, fix test
Mihai Bazon [Wed, 3 Oct 2012 09:49:47 +0000 (12:49 +0300)]
fix endless loop in tests
Mihai Bazon [Wed, 3 Oct 2012 09:49:33 +0000 (12:49 +0300)]
drop tmp. files
Mihai Bazon [Wed, 3 Oct 2012 09:22:59 +0000 (12:22 +0300)]
document the CLI tool
Mihai Bazon [Wed, 3 Oct 2012 08:34:05 +0000 (11:34 +0300)]
fix for `a = !b && !c && !d && !e → a=!(b||c||d||e)`
Mihai Bazon [Wed, 3 Oct 2012 08:27:05 +0000 (11:27 +0300)]
disable `hoist_vars` by default and change `comparations` to `comparisons`
Mihai Bazon [Tue, 2 Oct 2012 18:08:16 +0000 (21:08 +0300)]
fixed usage string
Mihai Bazon [Tue, 2 Oct 2012 13:40:42 +0000 (16:40 +0300)]
support for `--comments` option to keep comments containing @license or @preserve
Mihai Bazon [Tue, 2 Oct 2012 13:40:01 +0000 (16:40 +0300)]
discard annoying nodejs warning
Mihai Bazon [Tue, 2 Oct 2012 13:39:53 +0000 (16:39 +0300)]
line numbers start at 1
Mihai Bazon [Tue, 2 Oct 2012 11:32:30 +0000 (14:32 +0300)]
added option to keep some comments in the output
Mihai Bazon [Tue, 2 Oct 2012 11:02:33 +0000 (14:02 +0300)]
option to exclude certain names from mangling
Mihai Bazon [Tue, 2 Oct 2012 10:20:07 +0000 (13:20 +0300)]
support defines
Mihai Bazon [Tue, 2 Oct 2012 09:45:31 +0000 (12:45 +0300)]
"use strict";
Mihai Bazon [Tue, 2 Oct 2012 09:45:17 +0000 (12:45 +0300)]
more constant folding (for names defined with `const`)
Mihai Bazon [Tue, 2 Oct 2012 09:22:39 +0000 (12:22 +0300)]
add AST_SymbolConst for names defined with `const`
Mihai Bazon [Tue, 2 Oct 2012 09:02:33 +0000 (12:02 +0300)]
drop more unused names
Mihai Bazon [Tue, 2 Oct 2012 08:00:47 +0000 (11:00 +0300)]
a shy attempt to obey `width` in the beautifier; added `bracketize` option to always print brackets around if/do/while/for statements; export more options via the CLI
Mihai Bazon [Fri, 28 Sep 2012 08:12:47 +0000 (11:12 +0300)]
minor
Mihai Bazon [Wed, 26 Sep 2012 20:54:30 +0000 (23:54 +0300)]
fix mangling
(bug in our code prevented the mangler from using a name that was in use
prior to mangling but not after it)
Mihai Bazon [Wed, 26 Sep 2012 16:52:32 +0000 (19:52 +0300)]
removed the "squeeze" method (it's now effectively "transform")
Mihai Bazon [Wed, 26 Sep 2012 13:43:14 +0000 (16:43 +0300)]
some speedup and more savings from unused vars that have side effects in initialization
Mihai Bazon [Wed, 26 Sep 2012 10:04:54 +0000 (13:04 +0300)]
compressor successfully moved to TreeTransformer
Mihai Bazon [Wed, 26 Sep 2012 09:16:16 +0000 (12:16 +0300)]
checkpoint (refactoring, WIP)
Mihai Bazon [Wed, 26 Sep 2012 08:24:04 +0000 (11:24 +0300)]
minor
Mihai Bazon [Tue, 25 Sep 2012 15:03:31 +0000 (18:03 +0300)]
more cleanups
Mihai Bazon [Tue, 25 Sep 2012 12:59:27 +0000 (15:59 +0300)]
moving code around (refactoring, WIP)
Mihai Bazon [Tue, 25 Sep 2012 12:30:59 +0000 (15:30 +0300)]
discard all \uFEFF characters (https://github.com/mishoo/UglifyJS/issues/462)
Mihai Bazon [Tue, 25 Sep 2012 12:15:47 +0000 (15:15 +0300)]
started some refactoring (WIP) -- moving squeezer to TreeTransformer
Mihai Bazon [Tue, 25 Sep 2012 09:48:36 +0000 (12:48 +0300)]
minor
Mihai Bazon [Tue, 25 Sep 2012 07:32:14 +0000 (10:32 +0300)]
it's not safe to assume that property access is side-effect-free
(getters/setters + various browser bugs will trigger side effects; also, an
exception is thrown when the expression is undefined)
Mihai Bazon [Tue, 25 Sep 2012 07:31:03 +0000 (10:31 +0300)]
some boolean cleanup
Mihai Bazon [Mon, 24 Sep 2012 14:02:18 +0000 (17:02 +0300)]
Support input source map
This is useful while compressing generated code; for example compressing JS
compiled by CoffeeScript (assuming you got a source map):
uglifyjs2 --in-source-map generated.js.map \
--source-map uglified.js.map \
-o uglified.js
The above assumes you have a "generated.js.map" file which is the source
mapping between your CoffeeScript and the generated.js (compiled output from
CoffeeScript). The name of the input file is not present in this example;
it will be fetched from the source map (but it can be passed manually too).
The output will be in "uglified.js" and the output map "uglified.js.map"
will actually map to the original CoffeeScript code, rather than to
generated.js.
Mihai Bazon [Mon, 24 Sep 2012 07:27:49 +0000 (10:27 +0300)]
minor tests fix
Mihai Bazon [Sun, 23 Sep 2012 09:47:34 +0000 (12:47 +0300)]
properly drop mutually-referring declarations that are not otherwise
referenced and have no side effects
Mihai Bazon [Sat, 22 Sep 2012 10:32:32 +0000 (13:32 +0300)]
tree transformer api (WIP)
Mihai Bazon [Fri, 21 Sep 2012 11:38:52 +0000 (14:38 +0300)]
log filename in parse errors / compressor warnings
Mihai Bazon [Fri, 21 Sep 2012 11:19:05 +0000 (14:19 +0300)]
better support for multiple input files:
- use a single AST_Toplevel node for all files
- keep original source filename in the tokens
Mihai Bazon [Fri, 21 Sep 2012 08:23:44 +0000 (11:23 +0300)]
more on detecting side effects
Mihai Bazon [Wed, 19 Sep 2012 09:27:38 +0000 (12:27 +0300)]
drop unused variables
Mihai Bazon [Wed, 19 Sep 2012 07:22:36 +0000 (10:22 +0300)]
support -c with no arguments to disable compression entirely
Mihai Bazon [Tue, 18 Sep 2012 16:26:46 +0000 (19:26 +0300)]
fixed label scope/mangling
Mihai Bazon [Tue, 18 Sep 2012 11:17:23 +0000 (14:17 +0300)]
minor
Mihai Bazon [Tue, 18 Sep 2012 10:21:09 +0000 (13:21 +0300)]
support for directives
Mihai Bazon [Tue, 18 Sep 2012 07:53:46 +0000 (10:53 +0300)]
added AST_NaN (output as 0/0)
Mihai Bazon [Mon, 17 Sep 2012 17:02:14 +0000 (20:02 +0300)]
only do the typeof x == "undefined" optimization if x is a symbol reference and it's declared in scope, or x is not a symbol reference.
Mihai Bazon [Mon, 17 Sep 2012 15:49:52 +0000 (18:49 +0300)]
moved `typeof foo == "undefined"` ==> `foo === undefined` under `--unsafe`
because https://github.com/mishoo/UglifyJS2/commit/
43fd45154bac89b89330e13bd1f167e2a927a23c#commitcomment-
1864505
Mihai Bazon [Mon, 17 Sep 2012 12:06:06 +0000 (15:06 +0300)]
fix .undeclared (it's now a function)
Mihai Bazon [Mon, 17 Sep 2012 11:33:36 +0000 (14:33 +0300)]
minor
Mihai Bazon [Mon, 17 Sep 2012 09:53:52 +0000 (12:53 +0300)]
one more test for sequences
Mihai Bazon [Mon, 17 Sep 2012 09:24:21 +0000 (12:24 +0300)]
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 [Mon, 17 Sep 2012 09:03:02 +0000 (12:03 +0300)]
empty block to empty statement: {} ==> ;
Mihai Bazon [Mon, 17 Sep 2012 08:50:35 +0000 (11:50 +0300)]
more smallish optimizations
Mihai Bazon [Mon, 17 Sep 2012 08:16:44 +0000 (11:16 +0300)]
try negating AST_Binary
Mihai Bazon [Sun, 16 Sep 2012 15:05:15 +0000 (18:05 +0300)]
some cleanup
Mihai Bazon [Sun, 16 Sep 2012 13:29:17 +0000 (16:29 +0300)]
more sequencesizing (WIP)
Mihai Bazon [Sun, 16 Sep 2012 12:46:47 +0000 (15:46 +0300)]
drop unused function
Mihai Bazon [Sun, 16 Sep 2012 12:46:20 +0000 (15:46 +0300)]
rewrite handle_if_return
optimizations of if/return/continue seem to be even better now
Mihai Bazon [Sat, 15 Sep 2012 13:06:09 +0000 (16:06 +0300)]
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 [Sat, 15 Sep 2012 13:05:01 +0000 (16:05 +0300)]
figure out label targets
Mihai Bazon [Sat, 15 Sep 2012 07:54:59 +0000 (10:54 +0300)]
join_vars:
var XXX;
for (var YYY; ...)
==>
for (var XXX,YYY; ...)
Mihai Bazon [Fri, 14 Sep 2012 16:56:59 +0000 (19:56 +0300)]
compress typeof x == "undefined" to x === undefined, which further gets
shortened to x === void 0 (or x === [][0] in unsafe mode)
Mihai Bazon [Fri, 14 Sep 2012 16:04:18 +0000 (19:04 +0300)]
minor
when unsafe, compress undefined as [][0]
Mihai Bazon [Fri, 14 Sep 2012 13:26:30 +0000 (16:26 +0300)]
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 [Fri, 14 Sep 2012 12:36:38 +0000 (15:36 +0300)]
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 [Thu, 13 Sep 2012 16:45:16 +0000 (19:45 +0300)]
added -m and -c options
Mihai Bazon [Thu, 13 Sep 2012 12:20:57 +0000 (15:20 +0300)]
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 [Wed, 12 Sep 2012 13:29:20 +0000 (16:29 +0300)]
minor
Mihai Bazon [Wed, 12 Sep 2012 13:10:03 +0000 (16:10 +0300)]
more AST_If optimizations
Mihai Bazon [Wed, 12 Sep 2012 10:23:24 +0000 (13:23 +0300)]
side effect fixes and small optimization for gzip
prefer to always use > and >= operators (idea from Closure)
Mihai Bazon [Wed, 12 Sep 2012 10:00:13 +0000 (13:00 +0300)]
fixed run-tests and an issue about reversing the condition in AST_If
Mihai Bazon [Tue, 11 Sep 2012 15:37:08 +0000 (18:37 +0300)]
minor
Mihai Bazon [Tue, 11 Sep 2012 12:42:28 +0000 (15:42 +0300)]
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