Age | Commit message (Expand) | Author |
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 | 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 |
2017-03-05 | fix a corner case in #1530 (#1552) | Alex Lam S.L |
2017-03-03 | process code with implicit return statement (#1522)...Bookmarklet for instance implicitedly assumes a "completion value" without using `return`.
The `expression` option now supports such use cases.
Optimisations on IIFEs also enhanced.
fixes #354
fixes #543
fixes #625
fixes #628
fixes #640
closes #1293 | Alex Lam S.L |
2017-03-03 | compress numerical expressions (#1513)...safe operations
- `a === b` => `a == b`
- `a + -b` => `a - b`
- `-a + b` => `b - a`
- `a+ +b` => `+b+a`
associative operations
(bit-wise operations are safe, otherwise `unsafe_math`)
- `a + (b + c)` => `(a + b) + c`
- `(n + 2) + 3` => `5 + n`
- `(2 * n) * 3` => `6 * n`
- `(a | 1) | (2 | d)` => `(3 | a) | b`
fixes #412 | Alex Lam S.L |
2017-03-03 | fix chained assignment with `unused` (#1540)...When #1450 optimises `a=b=42`, it stops after the first variable even if both are unused.
fixes #1539 | Alex Lam S.L |
2017-03-03 | collapse_vars should not replace constant in for-in init section (#1538)...fixes #1537 | kzc |
2017-03-03 | properly cover all cases of for-in loop variables (#1536) | Alex Lam S.L |
2017-03-03 | fix reference marking in for-in loops (#1535)...fixes #1533 | Alex Lam S.L |
2017-03-03 | disable do{...}while(false) optimisation (#1534)...- fails to handle `break` in body
fixes #1532 | Alex Lam S.L |
2017-03-02 | optimize trivial IIFEs returning constants (#1530) | kzc |
2017-03-02 | trim unused invocation parameters (#1526) | Alex Lam S.L |
2017-03-02 | minor improvement to string optimisation (#1514)...- "" + "a" => "a"
- "" + a + "b" => a + "b"
- "a" + "" => "a" (improving on #45) | Alex Lam S.L |
2017-03-02 | fix corner cases in `reduce_vars` (#1524)...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 | Alex Lam S.L |
2017-03-01 | fix `evaluate` on object getter & setter (#1515) | Alex Lam S.L |
2017-02-28 | warn & drop `#__PURE__` iff IIFE is dropped (#1511)...- consolidate `side-effects` optimisations
- improve string `+` optimisation
- enhance literal & `conditionals` optimisations | Alex Lam S.L |
2017-02-26 | consolidate `evaluate` & `reduce_vars` (#1505)...- improve marking efficiency
- apply smarter `const` replacement to `var`
fixes #1501 | Alex Lam S.L |
2017-02-24 | enable `collapse_vars` & `reduce_vars` by default...- fix corner cases in `const` optimisation
- deprecate `/*@const*/`
fixes #1497
closes #1498
| alexlamsl |
2017-02-21 | Support marking a call as pure...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
| kzc |
2017-02-21 | fix `pure_funcs` & improve `side_effects`...- only drops side-effect-free arguments
- drop side-effect-free parts with discarded value from `AST_Seq` & `AST_SimpleStatement`
closes #1494
| alexlamsl |
2017-02-21 | clean up `max_line_len`...- never exceed specified limit
- otherwise warning is shown
- enabled only for final output
closes #1496
| alexlamsl |
2017-02-21 | introduce `unsafe_proto`...- `Array.prototype.slice` => `[].slice`
closes #1491
| alexlamsl |
2017-02-21 | Add .gitattributes to checkout lf eol style...closes #1487
| Anthony Van de Gejuchte |
2017-02-21 | enhance `global_defs`...- 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
| alexlamsl |
2017-02-21 | evaluate AST_SymbolRef as parameter...fix invalid boolean conversion now exposed in `make_node_from_constant()`
closes #1477
| alexlamsl |
2017-02-21 | improve reduce_vars and fix a bug...- update modified flag between compress() passes
- support IIFE arguments
- fix corner case with multiple definitions
closes #1473
| alexlamsl |
2017-02-21 | improve keep_fargs & keep_fnames...- utilise in_use_ids instead of unreferenced()
- drop_unused now up-to-date for subsequent passes
closes #1476
| alexlamsl |
2017-02-21 | fix duplicated test names...previously test cases with the same name would be skipped except for the last one
`test/run-test.js` will now report duplicated names as errors
closes #1461
| alexlamsl |
2017-02-21 | smarter const replacement taking name length into account...closes #1459
| kzc |
2017-02-21 | clean up `negate_iife`...- 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
| alexlamsl |
2017-02-21 | improve string concatenation...shuffle associative operations to minimise parentheses and aid other uglification efforts
closes #1454
| alexlamsl |
2017-02-21 | `-c sequences=N` suboptimal at N expression cutoff...N = 2:
a;
b;
c;
d;
was:
a, b;
c;
d;
now:
a, b;
c, d;
fixes #1455
closes #1457
| alexlamsl |
2017-02-21 | tweak do-while loops...- `do{...}while(false)` => `{...}`
- clean up `AST_While` logic
closes #1452
| alexlamsl |
2017-02-21 | fixes & improvements to [].join()...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
| alexlamsl |
2017-02-21 | drop unused: toplevel, assign-only...- 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
| alexlamsl |
2017-02-21 | fix stray else in compress with conditionals=false...closes #1449
| kzc |
2017-02-18 | enable typeof "undefined" for general use...move out of unsafe, guard corner case with screw_id8 instead
closes #1446
| alexlamsl |
2017-02-18 | fix corner case in keep_fnames...happens when inner function:
- just below top level
- not referenced
- `unused` is disabled
closes #1445
| alexlamsl |
2017-02-18 | fix crash in unsafe replacement of undefined...remove extraneous call to AST_SymbolRef.reference()
closes #1443
| alexlamsl |
2017-02-18 | Improve optimizing `function() { if(c){return foo} bar();}`...closes #1437
| Anthony Van de Gejuchte |
2017-01-26 | update test (#1441)...improved reduce_vars & binary operands produce more optimal results | Alex Lam S.L |