aboutsummaryrefslogtreecommitdiff
path: root/lib/compress.js
AgeCommit message (Expand)Author
2017-04-08fix a couple of bugs in `global_defs` (#1802)...- `optimize()` substituted expression - compute nested property string correctly fixes #1801 Miscellaneous - reset optimisation flags on all node typesAlex Lam S.L
2017-04-08fix `delete` corner cases (#1799)...- assignment - boolean - conditional - sequenceAlex Lam S.L
2017-04-07fix `pure_getters` for chained property access (#1798)Alex Lam S.L
2017-04-07fix corner cases with `delete` (#1796)...`delete Infinity` returns `false` where as `delete (1/0)` returns `true`Alex Lam S.L
2017-04-07introduce "strict" to `pure_getters` (#1795)Alex Lam S.L
2017-04-07fix `reduce_vars` on catch variable (#1794)...Improved catch handling in `figure_out_scope()` means special case treatment of IE8 is no longer valid in `reset_opt_flags()`. Also fixed recursive assignment in variable definition.Alex Lam S.L
2017-04-07fix incorrect context in variable substitution (#1791)...`AST_Node.optimize()` is context-aware, so don't cache its results to be used elsewhere. Also fixed a few cases of AST corruption and beef up safety of `pure_getters`.Alex Lam S.L
2017-04-06improve `pure_getters` (#1786)...- property access to `null` & `undefined` always has side effects - utilise `reduce_vars` to determine safe property access - may-be cases treated as side effects unless `unsafe`Alex Lam S.L
2017-04-05implement delayed resolution for `reduce_vars` (#1788)...Although it would be nice to enforce `AST_Node` cloning during transformation, that ship has sailed a long time ago. We now get the assigned value when resolving `AST_SymbolRef` instead of `reset_opt_flags()`, which has the added advantage of improved compressor efficiency. fixes #1787Alex Lam S.L
2017-04-04optimise `do{...}while(false)` (#1785)...- better heuristics to avoid issues like #1532 - fix `TreeWalker.loopcontrol_target()` - `continue` cannot refer to `switch` blocksAlex Lam S.L
2017-04-02fix corner case in `switch` (#1765)Alex Lam S.L
2017-04-02avoid confusion of `NaN` & `Infinity` with `catch` symbol of the same name (#......fixes #1760 fixes #1761Alex Lam S.L
2017-04-02fix corner cases in switch and undefined (#1762)...- fix side effects in switch condition for singular blocks - fix `undefined` confusion with local variable - gate `OPT(AST_Switch)` with `switches` fixes #1758 fixes #1759Alex Lam S.L
2017-04-01fix switch branch elimination (#1752)...Merge unreachable case body with previous fallthrough case fixes #1750Alex Lam S.L
2017-04-01improve compression of undefined, NaN & Infinitiy (#1748)...- migrate transformation logic from `OutputStream` to `Compressor` - always turn `undefined` into `void 0` (unless `unsafe`) - always keep `NaN` except when avoiding local variable redefinition - introduce `keep_infinity` to suppress `1/0` transform, except when avoiding local variable redefinition supersedes #1723 fixes #1730Alex Lam S.L
2017-03-31combine rules for binary boolean operations (#1744)Alex Lam S.L
2017-03-31sort options in alphabetical order (#1743)...They started off as functional groups I guess, but given the sheer number of options this is becoming too difficult to read.Alex Lam S.L
2017-03-30remove paranthesis for `-(x*y)` (#1732)Alex Lam S.L
2017-03-30optimize try-catch-finally (#1731)...- eliminate empty blocks - flatten out if try-block does not throwAlex Lam S.L
2017-03-29speed up IIFE elimination (#1728)...- `side_effects` will clean up inner statements, so checking for an empty function body should suffice - drop side effects when dropping `return` from statementAlex Lam S.L
2017-03-29speed up `equivalent_to()` and `AST_Switch` (#1727)Alex Lam S.L
2017-03-29output optimal representations of NaN & Infinity (#1723)...- move these optimisations out from `Compressor` to `OutputStream` - fixes behaviour inconsistency when running uglified code from global or module levels due to redefinitionAlex Lam S.L
2017-03-29fix corner case in `unused` (#1718)...When fixing catch-related issue in #1715, it tries to optimise for duplicate definitions but did not take anonymous functions into account. Remove such optimisation for now and we can cover this as a more general rule later.Alex Lam S.L
2017-03-28fix `unused` on var of the same name within catch (#1716)...fixes #1715Alex Lam S.L
2017-03-28fix `is_number()` on `+=` (#1714)...fixes #1710Alex Lam S.L
2017-03-28drop anonymous function name when overshadowed by other declarations (#1712)...fixes #1709Alex Lam S.L
2017-03-28fix tail trimming of switch blocks (#1707)...now guarded under `dead_code` fixes #1705Alex Lam S.L
2017-03-27`has_side_effects()` should take `AST_Switch.expression` into account (#1699)...fixes #1698Alex Lam S.L
2017-03-27fix typeof side effects (#1696)...`statement_to_expression()` drops `typeof` even if it operates on undeclared variables. Since we now have `drop_side_effect_free()`, replace and remove this deprecated functionality.Alex Lam S.L
2017-03-27preserve side effects in switch expression (#1694)...fixes #1690Alex Lam S.L
2017-03-27fix `cascade` on anonymous function reference (#1693)...Unlike normal variables and even function definitions, these cannot be reassigned, even though assignment expressions would "leak" the assigned value as normal.Alex Lam S.L
2017-03-27handle overlapped variable definitions (#1691)...Process variable definitions with or without assigned values against: - `arguments` - named function arguments - multiple definitions within same scope Essentially demote variable declarations with no value assignments. Also fixed invalid use of `AST_VarDef` over `arguments` - should use a member of `AST_SymbolDeclaration` instead.Alex Lam S.L
2017-03-26fix `delete` related issues in `collapse_vars` and `reduce_vars` (#1689)Alex Lam S.L
2017-03-26fix `cascade` on `delete` operator (#1687)...Conditions including strict mode would make `delete` return `true` or `false`, and are too complex to be evaluated by the compressor. Suppress assignment folding into said operator. fixes #1685Alex Lam S.L
2017-03-26fallthrough should not execute case expression (#1683)...- de-duplicate trailing cases only, avoid all potential side-effects - enable switch statement fuzzing fixes #1680Alex Lam S.L
2017-03-26optimize conditional when condition symbol matches consequent (#1684)kzc
2017-03-26suppress switch branch de-duplication upon side effects (#1682)...fixes #1679Alex Lam S.L
2017-03-26fix side-effects detection on switch statements (#1678)...extension of #1675Alex Lam S.L
2017-03-26improve switch optimisations (#1677)...- correctly determine reachability of (default) branches - gracefully handle multiple default branches - optimise branches with duplicate bodies fixes #376 fixes #441 fixes #1674Alex Lam S.L
2017-03-25fix `has_side_effects()` (#1675)...`AST_Try` is an `AST_Block`, so besides try block we also need to inspect catch and finally blocks for possible side effects. Also extend this functionality to handle `AST_If` and `AST_LabeledStatement` while we are at it. fixes #1673Alex Lam S.L
2017-03-25fix `reduce_vars` on `AST_Switch` (#1671)...Take conditional nature of switch branches into account. fixes #1670Alex Lam S.L
2017-03-25fix typeof side-effects (#1669)...`has_side_effects()` does not take `typeof`'s magical power of not tripping over undeclared variable into account. fixes #1668Alex Lam S.L
2017-03-25fix `dead_code` on `AST_Switch` (#1667)...Need to call `extract_declarations_from_unreachable_code()`. fixes #1663Alex Lam S.L
2017-03-25fix invalid `AST_For.init` (#1657)...Turns out the only place in `Compressor` which can generate invalid `AST_For.init` is within `drop_unused()`, so focus the fix-up efforts. supercedes #1652 fixes #1656Alex Lam S.L
2017-03-24fix cascade of `evaluate` optimisation (#1654)...Operator has changed, so break out from rest of the rules. fixes #1649Alex Lam S.L
2017-03-24fix corner case in `AST_For.init` (#1652)...Enforce `null` as value for empty initialisation blocks. fixes #1648Alex Lam S.L
2017-03-24fix assignment extraction from conditional (#1651)...fixes #1645 fixes #1646Alex Lam S.L
2017-03-24fix assignment substitution in sequences (#1643)...take side effects of binary boolean operations into account fixes #1639Alex Lam S.L
2017-03-24improve collapsible value detection (#1638)...- #1634 bars variables with cross-scope references in between to collapse - but if assigned value is side-effect-free, no states can be modified, so it is safe to moveAlex Lam S.L
2017-03-23account for cross-scope modifications in `collapse_vars` (#1634)...mostly done by @kzc fixes #1631Alex Lam S.L