aboutsummaryrefslogtreecommitdiff
path: root/lib
AgeCommit message (Collapse)Author
2017-03-27`has_side_effects()` should take `AST_Switch.expression` into account (#1699)Alex Lam S.L
fixes #1698
2017-03-27fix typeof side effects (#1696)Alex Lam S.L
`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.
2017-03-27preserve side effects in switch expression (#1694)Alex Lam S.L
fixes #1690
2017-03-27fix `cascade` on anonymous function reference (#1693)Alex Lam S.L
Unlike normal variables and even function definitions, these cannot be reassigned, even though assignment expressions would "leak" the assigned value as normal.
2017-03-27handle overlapped variable definitions (#1691)Alex Lam S.L
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.
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)Alex Lam S.L
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
2017-03-26fallthrough should not execute case expression (#1683)Alex Lam S.L
- de-duplicate trailing cases only, avoid all potential side-effects - enable switch statement fuzzing fixes #1680
2017-03-26optimize conditional when condition symbol matches consequent (#1684)kzc
2017-03-26suppress switch branch de-duplication upon side effects (#1682)Alex Lam S.L
fixes #1679
2017-03-26fix side-effects detection on switch statements (#1678)Alex Lam S.L
extension of #1675
2017-03-26improve switch optimisations (#1677)Alex Lam S.L
- correctly determine reachability of (default) branches - gracefully handle multiple default branches - optimise branches with duplicate bodies fixes #376 fixes #441 fixes #1674
2017-03-25fix `has_side_effects()` (#1675)Alex Lam S.L
`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
2017-03-25fix `reduce_vars` on `AST_Switch` (#1671)Alex Lam S.L
Take conditional nature of switch branches into account. fixes #1670
2017-03-25fix typeof side-effects (#1669)Alex Lam S.L
`has_side_effects()` does not take `typeof`'s magical power of not tripping over undeclared variable into account. fixes #1668
2017-03-25fix `dead_code` on `AST_Switch` (#1667)Alex Lam S.L
Need to call `extract_declarations_from_unreachable_code()`. fixes #1663
2017-03-25fix invalid `AST_For.init` (#1657)Alex Lam S.L
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
2017-03-24fix cascade of `evaluate` optimisation (#1654)Alex Lam S.L
Operator has changed, so break out from rest of the rules. fixes #1649
2017-03-24fix corner case in `AST_For.init` (#1652)Alex Lam S.L
Enforce `null` as value for empty initialisation blocks. fixes #1648
2017-03-24fix assignment extraction from conditional (#1651)Alex Lam S.L
fixes #1645 fixes #1646
2017-03-24fix assignment substitution in sequences (#1643)Alex Lam S.L
take side effects of binary boolean operations into account fixes #1639
2017-03-24improve error marker placement (#1644)Alex Lam S.L
For AST_UnaryPrefix, points to the operator rather than end of expression.
2017-03-24fix regression: CLI options with hyphens like -b ascii-only (#1640)kzc
fixes #1637
2017-03-24improve collapsible value detection (#1638)Alex Lam S.L
- #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 move
2017-03-23account for cross-scope modifications in `collapse_vars` (#1634)Alex Lam S.L
mostly done by @kzc fixes #1631
2017-03-23introduce compressor.info() (#1633)Alex Lam S.L
report the following only when `options.warnings = "verbose"` - unused elements due to inlining - collpased variables
2017-03-21throw parse error on invalid assignments (#1627)Alex Lam S.L
fixes #1626
2017-03-19fix commit 88fb83a (#1622)Alex Lam S.L
The following is wrong: `a == (b ? a : c)` => `b` Because: - `b` may not be boolean - `a` might have side effects - `a == a` is not always `true` (think `NaN`) - `a == c` is not always `false`
2017-03-19fix AST_Binary.lift_sequences() (#1621)Alex Lam S.L
Commit eab99a1c fails to account for side effects from compound assignments.
2017-03-19transform String.charAt() to index access (#1620)Alex Lam S.L
Guarded by `unsafe` as `charAt()` can be overridden.
2017-03-17fix chained evaluation (#1610)Alex Lam S.L
`reduce_vars` enables substitution of variables but did not clone the value's `AST_Node`. This confuses `collapse_vars` and result in invalid AST and subsequent crash. fixes #1609
2017-03-16make `collapse_vars` consistent with `toplevel` (#1608)Alex Lam S.L
fixes #1605
2017-03-16fix `hoist_vars` on `reduce_vars` (#1607)Alex Lam S.L
`hoist_vars` converts variable declarations into plain assignments, which then confuses `reduce_vars` fixes #1606
2017-03-16fix stack issues with `AST_Node.evaluate()` (#1603)Alex Lam S.L
As patched in #1597, `make_node_from_constant()` makes inconsistent and sometimes incorrect calls to `optimize()` and `transform()`. Fix those issues properly by changing the semantics of `evaluate()` and `make_node_from_constant()`, with the side effect that `evaluate()` no longer eagerly converts constant to `AST_Node`.
2017-03-15fix `AST_Node.optimize()` (#1602)Alex Lam S.L
Liberal use of `Compressor.transform()` and `AST_Node.optimize()` presents an issue for look-up operations like `TreeWalker.in_boolean_context()` and `TreeWalker.parent()`. This is an incremental fix such that `AST_Node.optimize()` would now contain the correct stack information when called correctly.
2017-03-14minor clean-ups (#1600)Alex Lam S.L
- remove obsolete optimisation in `AST_Binary` after #1477 - improve `TreeWalker.has_directive()` readability and resilience against multiple visits
2017-03-11temporary fix for boolean bug (#1597)Alex Lam S.L
fixes #1592
2017-03-11disallow parameter substitution for named IIFEs (#1596)Alex Lam S.L
Self-referenced function has non-fixed values assigned to its parameters. Let `unused` & `!keep_fnames` do the scanning, then apply `reduce_vars` only to unnamed functions. fixes #1595
2017-03-10fixup for #1585 (#1589)Alex Lam S.L
As patched on `harmony`, `statement()` is the only user of `embed_tokens()` with a missing error branch. Updated test case and match up with `harmony` to facilitate future merging.
2017-03-10fix catch variable reference in IE8 (#1587)Alex Lam S.L
`AST_Scope.def_variable()` will overwrite `AST_Symbol.thedef`, so save a copy before calling. fixes #1586
2017-03-10Correctly raise a parse exception with a missing loop body (#1585)Michael Mior
2017-03-09fix & improve function argument compression (#1584)Alex Lam S.L
- one-use function call => IIFE should take `eval()` & `arguments` into account - if unused parameter cannot be eliminated, replace it with `0` fixes #1583
2017-03-09scan RHS of dropped assignments (#1581)Alex Lam S.L
- similar case as #1578 but against #1450 instead - fix `this` binding in #1450 as well closes #1580
2017-03-08scan assignment value in drop_unused() (#1578)Alex Lam S.L
those were not optimised for `unused` before, which made it necessary for `reduce_vars` to have separate steps for `keep_fnames` docs update by @kzc closes #1577
2017-03-08fix function name eliminiation (#1576)Alex Lam S.L
Function expression can be assigned to a variable and be given a name. Ensure function name is the reduced variable before clearing it out. fixes #1573 fixes #1575
2017-03-08plan B for IE8 do-while semi-colon fix (#1572)Alex Lam S.L
- omitting trailing semi-colon in do-while breaks non-browser parser, e.g. uglify-js 1.x - trailing semi-colon only breaks IE8 if followed by `else` or `while` - always use braces in do-while body to workaround 2nd case with no size loss in compression fixes #1568
2017-03-08fix return from recursive IIFE (#1570)Alex Lam S.L
`side-effects` did not account for IIFEs being able to reference itself thus making its return value potentially significant
2017-03-07fix deep cloning of labels (#1565)Alex Lam S.L
`AST_Label.references` get `.initialize()` to `[]` every time after `.clone()` So walk down the tree to pick up the cloned `AST_LoopControl` pieces and put it back together.
2017-03-07transform function calls to IIFEs (#1560)Alex Lam S.L
- expose function body to call sites for potential optimisations - suppress substitution of variable used within `AST_Defun`
2017-03-07avoid substitution of global variables (#1557)Alex Lam S.L
- unless `toplevel` is enabled - global `const` works as before