aboutsummaryrefslogtreecommitdiff
path: root/lib/compress.js
AgeCommit message (Collapse)Author
2017-03-03collapse_vars should not replace constant in for-in init section (#1538)kzc
fixes #1537
2017-03-03properly cover all cases of for-in loop variables (#1536)Alex Lam S.L
2017-03-03fix reference marking in for-in loops (#1535)Alex Lam S.L
fixes #1533
2017-03-03disable do{...}while(false) optimisation (#1534)Alex Lam S.L
- fails to handle `break` in body fixes #1532
2017-03-02optimize trivial IIFEs returning constants (#1530)kzc
2017-03-02trim unused invocation parameters (#1526)Alex Lam S.L
2017-03-02minor improvement to string optimisation (#1514)Alex Lam S.L
- "" + "a" => "a" - "" + a + "b" => a + "b" - "a" + "" => "a" (improving on #45)
2017-03-02fix corner cases in `reduce_vars` (#1524)Alex Lam S.L
Avoid variable substitution in the following cases: - use of variable before declaration - declaration within conditional code blocks - declaration within loop body fixes #1518 fixes #1525
2017-03-01fix crash on missing `props` to `string_template()` (#1523)Alex Lam S.L
Patched up `make_node()` without `orig`. There may be other cases where `start` could be missing, so make it print "undefined" instead of crashing. fixes #1518
2017-03-01invert `reduce_vars` tracking flag (#1519)Alex Lam S.L
Modules like webpack and grunt-contrib-uglify still uses `ast.transform(compressor)` before `Compressor.compress(ast)` was introduced. Workaround this compatibility issue by deactivating `reduce_vars` in such case. Also fix use case with omitted `options` when calling `Compressor()`. fixes #1516
2017-03-01fix `evaluate` on object getter & setter (#1515)Alex Lam S.L
2017-03-01temporarily disables `reduce_vars` (#1517)Alex Lam S.L
... as we investigate #1516
2017-02-28warn & drop `#__PURE__` iff IIFE is dropped (#1511)Alex Lam S.L
- consolidate `side-effects` optimisations - improve string `+` optimisation - enhance literal & `conditionals` optimisations
2017-02-26faster tree transversal (#1462)Alex Lam S.L
- convert `[].forEach()` to for-loops
2017-02-26consolidate `evaluate` & `reduce_vars` (#1505)Alex Lam S.L
- improve marking efficiency - apply smarter `const` replacement to `var` fixes #1501
2017-02-24enable `collapse_vars` & `reduce_vars` by defaultalexlamsl
- fix corner cases in `const` optimisation - deprecate `/*@const*/` fixes #1497 closes #1498
2017-02-21Support marking a call as purekzc
A function call or IIFE with an immediately preceding comment containing `@__PURE__` or `#__PURE__` is deemed to be a side-effect-free pure function call and can potentially be dropped. Depends on `side_effects` option. `[#@]__PURE__` hint will be removed from comment when pure call is dropped. fixes #1261 closes #1448
2017-02-21fix `pure_funcs` & improve `side_effects`alexlamsl
- only drops side-effect-free arguments - drop side-effect-free parts with discarded value from `AST_Seq` & `AST_SimpleStatement` closes #1494
2017-02-21introduce `unsafe_proto`alexlamsl
- `Array.prototype.slice` => `[].slice` closes #1491
2017-02-21enhance `global_defs`alexlamsl
- support arrays, objects & AST_Node - support `"a.b":1` on both cli & API - emit warning if variable is modified - override top-level variables fixes #1416 closes #1198 closes #1469
2017-02-21evaluate AST_SymbolRef as parameteralexlamsl
fix invalid boolean conversion now exposed in `make_node_from_constant()` closes #1477
2017-02-21improve reduce_vars and fix a bugalexlamsl
- update modified flag between compress() passes - support IIFE arguments - fix corner case with multiple definitions closes #1473
2017-02-21improve keep_fargs & keep_fnamesalexlamsl
- utilise in_use_ids instead of unreferenced() - drop_unused now up-to-date for subsequent passes closes #1476
2017-02-21smarter const replacement taking name length into accountkzc
closes #1459
2017-02-21clean up `negate_iife`alexlamsl
- remove extra tree scanning phase for `negate_iife` - `negate_iife` now only deals with the narrowest form, i.e. IIFE sitting directly under `AST_SimpleStatement` - `booleans`, `conditionals` etc. will now take care the rest via more accurate accounting - `a(); void b();` => `a(); b();` fixes #1288 closes #1451
2017-02-21improve string concatenationalexlamsl
shuffle associative operations to minimise parentheses and aid other uglification efforts closes #1454
2017-02-21`-c sequences=N` suboptimal at N expression cutoffalexlamsl
N = 2: a; b; c; d; was: a, b; c; d; now: a, b; c, d; fixes #1455 closes #1457
2017-02-21tweak do-while loopsalexlamsl
- `do{...}while(false)` => `{...}` - clean up `AST_While` logic closes #1452
2017-02-21fixes & improvements to [].join()alexlamsl
fixes - [a].join() => "" + a - ["a", , "b"].join() => "a,,b" - ["a", null, "b"].join() => "a,,b" - ["a", undefined, "b"].join() => "a,,b" improvements - ["a", "b"].join(null) => "anullb" - ["a", "b"].join(undefined) => "a,b" - [a + "b", c].join("") => a + "b" + c closes #1453
2017-02-21drop unused: toplevel, assign-onlyalexlamsl
- assign statement does not count towards variable usage by default - only works with assignments on the same scope level as declaration - can be disabled with `unused` set to "keep_assign" - `toplevel` to drop unused top-level variables and/or functions - `top_retain` to whitelist top-level exceptions closes #1450
2017-02-21fix stray else in compress with conditionals=falsekzc
closes #1449
2017-02-18enable typeof "undefined" for general usealexlamsl
move out of unsafe, guard corner case with screw_id8 instead closes #1446
2017-02-18fix crash in unsafe replacement of undefinedalexlamsl
remove extraneous call to AST_SymbolRef.reference() closes #1443
2017-02-18Improve optimizing `function() { if(c){return foo} bar();}`Anthony Van de Gejuchte
closes #1437
2017-01-26optimise binary operands with evaluate() (#1427)Alex Lam S.L
- remove call to evaluate() in is_constant() and let nested optimize() does its job instead - reject RegExp in is_constant() and remove special case logic under collapse_vars - operands to conditionals optimisation are now always evaluate()-ed - throw error in constant_value() instead of returning undefined to catch possible bugs, similar to make_node_from_constant() - optimise binary boolean operators under `evaluate` instead of `conditionals`
2017-01-26augment evaluate to extract within objects (#1425)Alex Lam S.L
- gated by `unsafe` - replaces previous optimisation specific to String.length - "123"[0] => 1 - [1, 2, 3][0] => 1 - [1, 2, 3].length => 3 - does not apply to objects with overridden prototype functions
2017-01-19add missing LHS cases which global_defs should avoidalexlamsl
2016-11-29Do not overwrite options.comments + cleanupAnthony Van de Gejuchte
2016-10-06Fix (typeof side_effect()) in boolean contextkzc
Fixes #1289 with suggestion by @rvanvelzen
2016-10-01Optimize unmodified variablesalexlamsl
2016-09-01Account for side effects in `string + expr` optimizationkzc
2016-08-30implement optimization: (x = 2 * x) ---> (x *= 2)kzc
2016-08-17Fix negate_iife transform to return a correct tree for nested IIFEsRichard van Velzen
Fix for #1256, partially reverts d854523783b4
2016-07-15Keep const in own scope while compressingAnthony Van de Gejuchte
- Fixes #1205 - Fix provided by @kzc
2016-07-01Change the default sequences limit to 200 to speed up compress.kzc
Has little or no impact on minification size in the majority of cases but can speed up rollup builds significantly. This sequences change also has the beneficial side effect of avoiding "stack size exceeded" errors on very large input files. The user is free to alter the sequences limit if they are so inclined. The previous sequences limit was 2000. 20 is often sufficient.
2016-07-01Allow sequences maximum length to be user configurable.kzc
2016-06-30Enable --screw-ie8 by default.kzc
catch identifier is mangled correctly for ES5 standards-compliant JS engines by default. Unconditionally use the ie8 if/do-while workaround whether or not --screw-ie8 is enabled. To support non-standard ie8 javascript use: uglifyjs --support-ie8
2016-06-30Fix spidermonkey AST (ESTree) export and import, Array holeskzc
Fixes: #1156 #1161 Also add test to exercise Uglify after spidermonkey export/import of itself.
2016-06-21Fix conditional expressions of form (x ? -1 : -1)kzc
Fixes #1154, #1153
2016-06-21Don't replace undefined, NaN and Infinity within with scopekzc