Age | Commit message (Expand) | Author |
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-25 | introduce ufuzz.js (#1655)...closes #1647 | 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 |
2017-03-24 | fix assignment substitution in sequences (#1643)...take side effects of binary boolean operations into account
fixes #1639 | Alex Lam S.L |
2017-03-24 | improve error marker placement (#1644)...For AST_UnaryPrefix, points to the operator rather than end of expression. | Alex Lam S.L |
2017-03-24 | fix expect_stdout (#1642)...`compress()` may modify input ASTs
add tests for #1627 & #1640 | Alex Lam S.L |
2017-03-24 | improve 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 move | Alex Lam S.L |
2017-03-23 | account for cross-scope modifications in `collapse_vars` (#1634)...mostly done by @kzc
fixes #1631 | Alex Lam S.L |
2017-03-23 | introduce compressor.info() (#1633)...report the following only when `options.warnings = "verbose"`
- unused elements due to inlining
- collpased variables | Alex Lam S.L |
2017-03-23 | fix a bug in simple_glob (#1632)...- "?" should not match "/"
- other minor clean-ups | Alex Lam S.L |
2017-03-23 | metadata cleanup (#1630)...- mention performance anomaly in Node 7 and drop from CI
- remove unused npm "scripts"
- mark browserify dependency as optional
- stop `test/mozilla-ast.js` from spamming console output in later versions of Node.js | Alex Lam S.L |
2017-03-21 | throw parse error on invalid assignments (#1627)...fixes #1626 | Alex Lam S.L |
2017-03-19 | make `expect_stdout` work on Node.js 0.12 (#1623)...That particular version of Node.js has messed up error messages, so provide a version-specific workaround.
Also fixed an formatting issue which would cause `expect_stdout` to fail if error message contains excerpts of input.
Apply `expect_stdout` to more applicable tests. | Alex Lam S.L |
2017-03-19 | fix commit 88fb83a (#1622)...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` | Alex Lam S.L |
2017-03-19 | fix AST_Binary.lift_sequences() (#1621)...Commit eab99a1c fails to account for side effects from compound assignments. | Alex Lam S.L |
2017-03-19 | transform String.charAt() to index access (#1620)...Guarded by `unsafe` as `charAt()` can be overridden. | Alex Lam S.L |
2017-03-18 | handle runtime errors in `expect_stdout` (#1618)...allow test to pass if both `input` and `expect` throws the same kind of error | Alex Lam S.L |
2017-03-18 | fix top-level directives in compress tests (#1615)...`input` and `expect` are parsed as `AST_BlockStatement` which does not support `AST_Directive` by default.
Emulate that by transforming preceding `AST_SimpleStatement`s of `AST_String` into `AST_Directive`. | Alex Lam S.L |
2017-03-17 | fix chained evaluation (#1610)...`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 | Alex Lam S.L |
2017-03-16 | extend `test/run-tests.js` to optionally execute uglified output (#1604)...fixes #1588 | Alex Lam S.L |
2017-03-16 | make `collapse_vars` consistent with `toplevel` (#1608)...fixes #1605 | Alex Lam S.L |
2017-03-16 | fix `hoist_vars` on `reduce_vars` (#1607)...`hoist_vars` converts variable declarations into plain assignments, which then confuses `reduce_vars`
fixes #1606 | Alex Lam S.L |
2017-03-15 | fix `AST_Node.optimize()` (#1602)...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. | Alex Lam S.L |
2017-03-11 | disallow parameter substitution for named IIFEs (#1596)...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 | Alex Lam S.L |
2017-03-10 | support multi-line string in tests (#1590)...`expect_exact` sometimes have multiple lines and `\n` are hard to read.
Use array of strings to emulate line breaks and improve readability. | Alex Lam S.L |
2017-03-10 | fixup for #1585 (#1589)...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. | Alex Lam S.L |
2017-03-10 | fix catch variable reference in IE8 (#1587)...`AST_Scope.def_variable()` will overwrite `AST_Symbol.thedef`, so save a copy before calling.
fixes #1586 | Alex Lam S.L |
2017-03-10 | Correctly raise a parse exception with a missing loop body (#1585) | Michael Mior |
2017-03-09 | fix & improve function argument compression (#1584)...- one-use function call => IIFE should take `eval()` & `arguments` into account
- if unused parameter cannot be eliminated, replace it with `0`
fixes #1583 | Alex Lam S.L |
2017-03-09 | scan RHS of dropped assignments (#1581)...- similar case as #1578 but against #1450 instead
- fix `this` binding in #1450 as well
closes #1580 | Alex Lam S.L |
2017-03-08 | scan assignment value in drop_unused() (#1578)...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 | Alex Lam S.L |
2017-03-08 | fix function name eliminiation (#1576)...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 | Alex Lam S.L |
2017-03-08 | only run benchmark & jetstream on CI (#1571) | Alex Lam S.L |
2017-03-08 | plan B for IE8 do-while semi-colon fix (#1572)...- 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 | Alex Lam S.L |
2017-03-08 | fix return from recursive IIFE (#1570)...`side-effects` did not account for IIFEs being able to reference itself thus making its return value potentially significant | Alex Lam S.L |
2017-03-07 | include benchmark.js in test suite (#1564)...- report file sizes and overall run time
- exit with non-zero code upon error | Alex Lam S.L |
2017-03-07 | fix deep cloning of labels (#1565)...`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. | Alex Lam S.L |
2017-03-07 | transform function calls to IIFEs (#1560)...- expose function body to call sites for potential optimisations
- suppress substitution of variable used within `AST_Defun` | Alex Lam S.L |
2017-03-07 | avoid substitution of global variables (#1557)...- unless `toplevel` is enabled
- global `const` works as before | Alex Lam S.L |
2017-03-07 | collapse_vars: do not replace a constant in loop condition or init (#1562) | kzc |
2017-03-06 | suppress semicolons after do/while (#1556)...- unless both `beautify` & `screw-ie8` are enabled
- deprecate workaround for if-do-while-else
fixes #186 | Alex Lam S.L |
2017-03-05 | fixup for #1553 (#1555)...- `++a` is the one that is foldable
- transform `a++` into `++a` for better optimisation | Alex Lam S.L |
2017-03-05 | collapse assignment with adjacent subsequent usage (#1553)...- consolidate `cascade` optimisations
- support ++/-- postfixes
- remove redundant optimisation identified in #1460
fixes #368 | Alex Lam S.L |
2017-03-05 | handle variable declaration within catch blocks (#1546)...accounts for IE8- scoping | Alex Lam S.L |
2017-03-05 | improve `unsafe` on undefined (#1548)...`unsafe` turns undefined keyword into a variable of the same name if found, but that interferes with other related optimisations.
Keep track of such transformations to ensure zero information loss in the process. | Alex Lam S.L |
2017-03-05 | stay safe with constants in IE8- (#1547)...- `undefined` etc. can be redefined at top-level for IE8-, so disable related optimisations
- fixed `--support-ie8` catch mangle bug | Alex Lam S.L |