Age | Commit message (Expand) | Author |
2017-11-04 | reduce `this` within functions (#2421)...- only replace same-scope usages
- augment `test/ufuzz.js` to test for `this`
fixes #2420 | Alex Lam S.L |
2017-10-29 | enhance `properties` (#2412)...- trim array items only if `side_effects`
- extend to non-identifier properties | Alex Lam S.L |
2017-10-24 | fix `unsafe` `reduce_vars` on arrays & objects (#2397) | Alex Lam S.L |
2017-10-24 | enhance `unsafe` `evaluate` of arrays & objects (#2394) | Alex Lam S.L |
2017-10-22 | safer `properties` transform (#2391)...`{ a: x, b: y }.a` => `[ x, y ][0]`
- `x` cannot be function containing `this`
`[ x, y, z ][1]` => `(x, z, y)`
- only if `z` is side-effect-free | Alex Lam S.L |
2017-10-22 | fix `unsafe` escape analysis in `reduce_vars` (#2387) | Alex Lam S.L |
2017-10-21 | `unsafe` fix-ups for #2351 (#2379) | Alex Lam S.L |
2017-10-12 | more tests for #2351 (#2357) | Alex Lam S.L |
2017-10-09 | perform `reduce_vars` on safe literals (#2351)...- constant expression
- single reference
- same scope
- not across loop body | Alex Lam S.L |
2017-10-01 | enhance `reduce_vars` for `AST_Accessor` (#2339)...fixes #2336 | Alex Lam S.L |
2017-07-05 | improve `compress` granularity through `typeofs` (#2201)...fixes #2198 | Alex Lam S.L |
2017-06-23 | fix `reduce_vars` on `this` (#2145)...fixes #2140 | Alex Lam S.L |
2017-06-06 | implement function inlining (#2053)...- empty body
- single `AST_Return`
- single `AST_SimpleStatement`
- avoid `/*#__PURE__*/`
Miscellaneous
- enhance single-use function substitution
fixes #281 | Alex Lam S.L |
2017-06-04 | fix `AST_Function` scope invariance (#2052)...improve function name hack in `run_code()` | Alex Lam S.L |
2017-05-14 | fix bugs with getter/setter (#1926)...- `reduce_vars`
- `side_effects`
- property access for object
- `AST_SymbolAccessor` as key names
enhance `test/ufuzz.js`
- add object getter & setter
- property assignment to setter
- avoid infinite recursion in setter
- fix & adjust assignment operators
- 50% `=`
- 25% `+=`
- 2.5% each for the rest
- avoid "Invalid array length"
- fix `console.log()`
- bypass getter
- curb recursive reference
- deprecate `-E`, always report runtime errors | Alex Lam S.L |
2017-05-12 | remove support for `const` (#1910)...As this is not part of ES5. | Alex Lam S.L |
2017-05-12 | avoid `arguments` and `eval` in `reduce_vars` (#1924)...fixes #1922 | Alex Lam S.L |
2017-05-07 | fix test for #1865 (#1873) | Alex Lam S.L |
2017-05-06 | fix `unsafe` on `evaluate` of `reduce_vars` (#1870)...Determine if variables with non-constant values can escape and be modified.
fixes #1865 | Alex Lam S.L |
2017-04-30 | enforce `toplevel` on other compress options (#1855)...Respect "funcs" and "vars" properly.
fixes #1850 | Alex Lam S.L |
2017-04-20 | improve `unused` (#1832)...- extract leading value with side-effects out of `var` statement
- reduce scanning of `AST_Definitions` from 3 passes to just once | Alex Lam S.L |
2017-04-18 | support safe reassignments in `reduce_vars` (#1823)...`var a=1;a=2;x(a)` => `x(2)`
fix pre-existing issues
- reference counting on assignment
- walking of anonymous functions
- chained assignment | Alex Lam S.L |
2017-04-18 | fix `reduce_vars` on conditionals (#1822) | Alex Lam S.L |
2017-04-17 | fix `reduce_vars` on boolean binary expressions (#1819)...Side effects of `&&` and `||` have not mattered until #1814, which takes assignment expressions into account. | Alex Lam S.L |
2017-04-17 | compress duplicated variable definitions (#1817)...These are surprisingly common, as people reuse the same variable name within loops or switch branches. | Alex Lam S.L |
2017-04-17 | fix `reduce_vars` within try-block (#1818)...Possible partial execution due to exceptions. | Alex Lam S.L |
2017-04-17 | enhance `reduce_vars` (#1814)...- allow immediate assignment after declaration of variable
- relax modification rule for immutable value
- fix order of visit for TreeWalker
- remove extraneous code | Alex Lam S.L |
2017-04-16 | fix variable substitution (#1816)...- let `collapse_vars` take care of value containing any symbols
- improve overhead accounting | 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-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-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-25 | fix `reduce_vars` on `AST_Switch` (#1671)...Take conditional nature of switch branches into account.
fixes #1670 | 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-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-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-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-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-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-05 | handle variable declaration within catch blocks (#1546)...accounts for IE8- scoping | Alex Lam S.L |
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-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-02-26 | consolidate `evaluate` & `reduce_vars` (#1505)...- improve marking efficiency
- apply smarter `const` replacement to `var`
fixes #1501 | Alex Lam S.L |
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-01-26 | optimise binary operands with evaluate() (#1427)...- remove call to evaluate() in is_constant() and let nested optimize() does its job instead
- reject RegExp in is_constant() and remove special case logic under collapse_vars
- operands to conditionals optimisation are now always evaluate()-ed
- throw error in constant_value() instead of returning undefined to catch possible bugs, similar to make_node_from_constant()
- optimise binary boolean operators under `evaluate` instead of `conditionals` | Alex Lam S.L |