Age | Commit message (Expand) | Author |
2017-04-07 | fix corner cases with `delete` (#1796)...`delete Infinity` returns `false` where as `delete (1/0)` returns `true` | Alex Lam S.L |
2017-04-07 | introduce "strict" to `pure_getters` (#1795) | Alex Lam S.L |
2017-04-07 | fix `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-07 | fix 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-06 | improve `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-05 | implement 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 #1787 | Alex Lam S.L |
2017-04-04 | optimise `do{...}while(false)` (#1785)...- better heuristics to avoid issues like #1532
- fix `TreeWalker.loopcontrol_target()`
- `continue` cannot refer to `switch` blocks | Alex Lam S.L |
2017-04-04 | exclude mangling of special property names (#1779)...- `null`
- `true`
- `false`
- numeric literals | Alex Lam S.L |
2017-04-03 | fix `mangleProperties` on identifiers (#1776)...- fix handling of "-Infinity"
- add test case for "-0"
reverts #1481 | Alex Lam S.L |
2017-04-03 | fix mangleProperties of `undefined` & `Infinity` (#1772)...`NaN` already works by the happy accident of `Number.NaN`
fixes #1770 | Alex Lam S.L |
2017-04-02 | fix corner case in `switch` (#1765) | Alex Lam S.L |
2017-04-02 | avoid confusion of `NaN` & `Infinity` with `catch` symbol of the same name (#......fixes #1760
fixes #1761 | Alex Lam S.L |
2017-04-02 | fix 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 #1759 | Alex Lam S.L |
2017-04-01 | fix switch branch elimination (#1752)...Merge unreachable case body with previous fallthrough case
fixes #1750 | Alex Lam S.L |
2017-04-01 | improve 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 #1730 | Alex Lam S.L |
2017-03-31 | combine rules for binary boolean operations (#1744) | Alex Lam S.L |
2017-03-31 | fix catch symbol mangling (#1734)...Only need to look up the immediate non-block/catch scope for the same-name special case.
fixes #1733 | Alex Lam S.L |
2017-03-30 | remove paranthesis for `-(x*y)` (#1732) | Alex Lam S.L |
2017-03-30 | optimize try-catch-finally (#1731)...- eliminate empty blocks
- flatten out if try-block does not throw | Alex Lam S.L |
2017-03-30 | improve tests from #1726 (#1729) | Alex Lam S.L |
2017-03-29 | fix missing parentheses around NaN/Infinity shorthands (#1726)...fixes #1724
fixes #1725 | Alex Lam S.L |
2017-03-29 | output 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 redefinition | Alex Lam S.L |
2017-03-29 | improve beautified output of switch blocks (#1721) | Alex Lam S.L |
2017-03-29 | fix 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-28 | fix `unused` on var of the same name within catch (#1716)...fixes #1715 | Alex Lam S.L |
2017-03-28 | fix `is_number()` on `+=` (#1714)...fixes #1710 | Alex Lam S.L |
2017-03-28 | drop anonymous function name when overshadowed by other declarations (#1712)...fixes #1709 | Alex Lam S.L |
2017-03-28 | handle var within catch of the same name (#1711)...The following code prints `1`:
var a = 1;
!function(){
a = 4;
try{
throw 2;
} catch (a) {
var a = 3;
}
}();
console.log(a);
fixes #1708 | Alex Lam S.L |
2017-03-28 | fix tail trimming of switch blocks (#1707)...now guarded under `dead_code`
fixes #1705 | Alex Lam S.L |
2017-03-28 | fix mangle for variable declared within catch block (#1706)...fixes #1704 | Alex Lam S.L |
2017-03-27 | `has_side_effects()` should take `AST_Switch.expression` into account (#1699)...fixes #1698 | Alex Lam S.L |
2017-03-27 | fix 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-27 | preserve side effects in switch expression (#1694)...fixes #1690 | Alex Lam S.L |
2017-03-27 | fix `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-27 | handle 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-26 | fix `delete` related issues in `collapse_vars` and `reduce_vars` (#1689) | Alex Lam S.L |
2017-03-26 | fix `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 #1685 | Alex Lam S.L |
2017-03-26 | fallthrough should not execute case expression (#1683)...- de-duplicate trailing cases only, avoid all potential side-effects
- enable switch statement fuzzing
fixes #1680 | Alex Lam S.L |
2017-03-26 | optimize conditional when condition symbol matches consequent (#1684) | kzc |
2017-03-26 | suppress switch branch de-duplication upon side effects (#1682)...fixes #1679 | Alex Lam S.L |
2017-03-26 | fix side-effects detection on switch statements (#1678)...extension of #1675 | Alex Lam S.L |
2017-03-26 | improve switch optimisations (#1677)...- correctly determine reachability of (default) branches
- gracefully handle multiple default branches
- optimise branches with duplicate bodies
fixes #376
fixes #441
fixes #1674 | Alex Lam S.L |
2017-03-25 | fix `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 #1673 | Alex Lam S.L |
2017-03-25 | fix `reduce_vars` on `AST_Switch` (#1671)...Take conditional nature of switch branches into account.
fixes #1670 | Alex Lam S.L |
2017-03-25 | fix typeof side-effects (#1669)...`has_side_effects()` does not take `typeof`'s magical power of not tripping over undeclared variable into account.
fixes #1668 | Alex Lam S.L |
2017-03-25 | fix `dead_code` on `AST_Switch` (#1667)...Need to call `extract_declarations_from_unreachable_code()`.
fixes #1663 | Alex Lam S.L |
2017-03-25 | fix 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 #1656 | Alex Lam S.L |
2017-03-24 | fix cascade of `evaluate` optimisation (#1654)...Operator has changed, so break out from rest of the rules.
fixes #1649 | Alex Lam S.L |
2017-03-24 | fix corner case in `AST_For.init` (#1652)...Enforce `null` as value for empty initialisation blocks.
fixes #1648 | Alex Lam S.L |
2017-03-24 | fix assignment extraction from conditional (#1651)...fixes #1645
fixes #1646 | Alex Lam S.L |