ff289b9 | Alex Lam S.L | 05 April 2017, 13:06:42 UTC | 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 | 05 April 2017, 13:06:42 UTC |
9b6bc67 | Alex Lam S.L | 04 April 2017, 15:48:22 UTC | optimise `do{...}while(false)` (#1785) - better heuristics to avoid issues like #1532 - fix `TreeWalker.loopcontrol_target()` - `continue` cannot refer to `switch` blocks | 04 April 2017, 15:48:22 UTC |
4b90dc1 | Alex Lam S.L | 04 April 2017, 08:24:16 UTC | remove `--mangle-props` from fuzzing (#1777) The inherently unsafe nature makes this feature unsuitable to be tested this way. fixes #1774 | 04 April 2017, 08:24:16 UTC |
951770f | Alex Lam S.L | 03 April 2017, 19:50:19 UTC | exclude mangling of special property names (#1779) - `null` - `true` - `false` - numeric literals | 03 April 2017, 19:50:19 UTC |
48b3fe9 | Alex Lam S.L | 03 April 2017, 15:17:47 UTC | fix `mangleProperties` on identifiers (#1776) - fix handling of "-Infinity" - add test case for "-0" reverts #1481 | 03 April 2017, 15:17:47 UTC |
a400741 | Alex Lam S.L | 03 April 2017, 10:56:11 UTC | workaround Node.js bugs (#1775) Wrap test code in IIFE before passing to `vm` fixes #1768 fixes #1771 | 03 April 2017, 10:56:11 UTC |
59a4e56 | Alex Lam S.L | 03 April 2017, 04:31:05 UTC | fix mangleProperties of `undefined` & `Infinity` (#1772) `NaN` already works by the happy accident of `Number.NaN` fixes #1770 | 03 April 2017, 04:31:05 UTC |
1f1fccc | Alex Lam S.L | 02 April 2017, 20:00:33 UTC | extend `test/ufuzz.js` (#1769) New expressions: - property access - array literal - object literal Miscellaneous: - reduce execution timeout - test `toplevel` and `mangleProperties` | 02 April 2017, 20:00:33 UTC |
b7f6b73 | Alex Lam S.L | 02 April 2017, 09:07:55 UTC | v2.8.21 | 02 April 2017, 09:07:55 UTC |
9469c03 | Alex Lam S.L | 02 April 2017, 09:07:20 UTC | fix corner case in `switch` (#1765) | 02 April 2017, 09:07:20 UTC |
d575276 | Alex Lam S.L | 02 April 2017, 08:14:09 UTC | avoid confusion of `NaN` & `Infinity` with `catch` symbol of the same name (#1763) fixes #1760 fixes #1761 | 02 April 2017, 08:14:09 UTC |
f7ca4f2 | Alex Lam S.L | 02 April 2017, 06:52:25 UTC | 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 | 02 April 2017, 06:52:25 UTC |
c076e7b | Alex Lam S.L | 01 April 2017, 21:11:29 UTC | speed up fuzzer code generation (#1757) - only output one top-level function or statement block - reduce `rng()` granularity from 2^32 to 65536 - fix overflow in `rng()` - track `canThrow` during `typeof` creation | 01 April 2017, 21:11:29 UTC |
4a55bb0 | Alex Lam S.L | 01 April 2017, 19:17:01 UTC | minor tweaks to `test/ufuzz.js` (#1756) - count iterations from `1` instead of `0` - remove `unsafe` from default set of `minify()` tests - improve usability of help | 01 April 2017, 19:17:01 UTC |
28ecea5 | Alex Lam S.L | 01 April 2017, 18:10:50 UTC | upgrade fuzzer (#1754) - configurable set of `minify()` options - test and report suspects upon failure - continue after failure if infinite iterations is specified | 01 April 2017, 18:10:50 UTC |
9a31170 | kzc | 01 April 2017, 18:08:46 UTC | fuzz regexp literals, more constant numbers, typeof expression (#1755) | 01 April 2017, 18:08:46 UTC |
ee3fe0f | Alex Lam S.L | 01 April 2017, 09:19:57 UTC | fix switch branch elimination (#1752) Merge unreachable case body with previous fallthrough case fixes #1750 | 01 April 2017, 09:19:57 UTC |
87f6e1b | Alex Lam S.L | 01 April 2017, 09:09:52 UTC | minor tweaks to fuzzer (#1751) - remove `let` as variable name - employ `crypto.randomBytes()` | 01 April 2017, 09:09:52 UTC |
c934fc8 | Alex Lam S.L | 31 March 2017, 21:47:11 UTC | implement `test/sandbox.js` (#1749) - `test/run-tests.js` and `test/ufuzz.js` now shares the same `run_code()` and `same_stdout()` - re-enable fuzzer to generate top-level `NaN`, `Infinity` & `undefined` - attempt to show beautified output only when `run_code()` output is preserved | 31 March 2017, 21:47:11 UTC |
257ddc3 | Alex Lam S.L | 31 March 2017, 19:02:14 UTC | 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 | 31 March 2017, 19:02:14 UTC |
1ddc057 | Alex Lam S.L | 31 March 2017, 10:47:44 UTC | combine rules for binary boolean operations (#1744) | 31 March 2017, 10:47:44 UTC |
e6b76a4 | Peter van der Zee | 31 March 2017, 09:23:50 UTC | Massive extension of the fuzzer (#1697) Fix bug where a `throw` was generated without expression Reenable try/catch/finally and fix them up Skip serialization errors Allow function decl in other funcs but not in blocks etc Rename function to be more appropriate Fix global functions not getting certain names Make the canaries more likely to appear as expressions Add a silly rounding edge case Add a new canary, `c`, which should only ever be incremented Refactoring Fix (another) iife not actually being invoked When a statement hits recursion max return an expression instead of `;` When a expression hits recursion max also inc `c` Generate global code as well as function code Also fixes some argument juggling related bugs. No longer reduces the recursion max when generating sub functions. Generates a function arg. Add used names to var name pool while in that scope This is a little wonky, possibly a hack, but since it's synchronous code I think it's alright to do this. The alternative is to slice the varnames array and juggle them through almost all the generator functions and there are various reasons why this patch is a better alternative. Minify generated code, not beautified code. Prevents beautifier bias. Prevent unnecessary duplication Remove serialization protection because I think it got handled elsewhere Abstract toplevel code generation Add example line of running test case Add poor man options parser, and some options Reindent to 4 spaces Lower chance of `default` generation Comment example of testing a case and output improvement Enable `default` clause appearing at any clause index Removing some training wheels; dont add parens where we dont absolutely need them Support `-s1` and `-s2` to force specific statements being generated at that recursion level Add round number to output when failing. For stats and fun and profit. Solidify statement depth counting. The argument juggling is real. Renamed option to something long. -scf was ugly and probably confusing. Fix missing arguments causing `canThrow` to be truthy, generating crashing code Generate more binary nested expressions Add black and white list cli options for statement generation Allows you to explicitly require or forbid certain statements from/to being made. ``` node test/ufuzz.js --without-stmt switch,try -t 5 -r 5 -V ``` ``` node test/ufuzz.js --only-stmt ifelse,expr -t 5 -r 5 -V ``` Similar granularity for expression may be added later. There can be no comma between names; it just does a split on that arg. Trim down the binary expression generator Prevent scoping issues in nodejs by preventing certain names in global space Oh this list was incomplete? Allow bin-expr to generate assignments too. More vigilant with storing and reusing vars. Add more global builtin names Update wrapper code Also patch Function valueOf | 31 March 2017, 09:23:50 UTC |
a0c3836 | Alex Lam S.L | 31 March 2017, 08:41:04 UTC | sort options in alphabetical order (#1743) They started off as functional groups I guess, but given the sheer number of options this is becoming too difficult to read. | 31 March 2017, 08:41:04 UTC |
f8a71b5 | Alex Lam S.L | 31 March 2017, 07:27:40 UTC | v2.8.20 | 31 March 2017, 07:27:40 UTC |
11e9bdc | Alex Lam S.L | 31 March 2017, 07:26:57 UTC | fix missing preamble when shebang is absent (#1742) | 31 March 2017, 07:26:57 UTC |
a84564d | Alex Lam S.L | 31 March 2017, 04:26:10 UTC | v2.8.19 | 31 March 2017, 04:26:10 UTC |
c595b84 | Alex Lam S.L | 30 March 2017, 18:57:47 UTC | fix catch symbol mangling (#1734) Only need to look up the immediate non-block/catch scope for the same-name special case. fixes #1733 | 30 March 2017, 18:57:47 UTC |
7cb1adf | Alex Lam S.L | 30 March 2017, 08:09:00 UTC | remove paranthesis for `-(x*y)` (#1732) | 30 March 2017, 08:09:00 UTC |
7bea38a | Alex Lam S.L | 30 March 2017, 04:16:58 UTC | optimize try-catch-finally (#1731) - eliminate empty blocks - flatten out if try-block does not throw | 30 March 2017, 04:16:58 UTC |
0f910ee | Alex Lam S.L | 29 March 2017, 16:13:46 UTC | improve tests from #1726 (#1729) | 29 March 2017, 16:13:46 UTC |
beb9659 | Alex Lam S.L | 29 March 2017, 15:27:35 UTC | speed up IIFE elimination (#1728) - `side_effects` will clean up inner statements, so checking for an empty function body should suffice - drop side effects when dropping `return` from statement | 29 March 2017, 15:27:35 UTC |
f1a833a | Alex Lam S.L | 29 March 2017, 14:08:26 UTC | speed up `equivalent_to()` and `AST_Switch` (#1727) | 29 March 2017, 14:08:26 UTC |
2e41cd6 | Alex Lam S.L | 29 March 2017, 12:53:03 UTC | fix missing parentheses around NaN/Infinity shorthands (#1726) fixes #1724 fixes #1725 | 29 March 2017, 12:53:03 UTC |
09f77c7 | Alex Lam S.L | 29 March 2017, 10:31:55 UTC | 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 | 29 March 2017, 10:31:55 UTC |
fef0bf9 | Alex Lam S.L | 28 March 2017, 20:40:05 UTC | improve beautified output of switch blocks (#1721) | 28 March 2017, 20:40:05 UTC |
ae740b9 | Alex Lam S.L | 28 March 2017, 19:13:30 UTC | v2.8.18 | 28 March 2017, 19:13:30 UTC |
ec7f37f | Alex Lam S.L | 28 March 2017, 17:27:24 UTC | remove UGLIFY_DEBUG (#1720) fixes #1719 | 28 March 2017, 17:27:24 UTC |
eb48a03 | Alex Lam S.L | 28 March 2017, 17:00:21 UTC | 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. | 28 March 2017, 17:00:21 UTC |
6ab3224 | Alex Lam S.L | 28 March 2017, 13:49:04 UTC | v2.8.17 | 28 March 2017, 13:49:04 UTC |
c909ffb | Alex Lam S.L | 28 March 2017, 13:25:49 UTC | fix `unused` on var of the same name within catch (#1716) fixes #1715 | 28 March 2017, 13:25:49 UTC |
f71f490 | Alex Lam S.L | 28 March 2017, 09:08:16 UTC | fix `is_number()` on `+=` (#1714) fixes #1710 | 28 March 2017, 09:08:16 UTC |
fb177a6 | Alex Lam S.L | 28 March 2017, 09:02:20 UTC | drop anonymous function name when overshadowed by other declarations (#1712) fixes #1709 | 28 March 2017, 09:02:20 UTC |
65da9ac | Alex Lam S.L | 28 March 2017, 08:42:39 UTC | 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 | 28 March 2017, 08:42:39 UTC |
67d0237 | Alex Lam S.L | 27 March 2017, 19:59:13 UTC | fix tail trimming of switch blocks (#1707) now guarded under `dead_code` fixes #1705 | 27 March 2017, 19:59:13 UTC |
984a217 | Alex Lam S.L | 27 March 2017, 19:26:35 UTC | fix mangle for variable declared within catch block (#1706) fixes #1704 | 27 March 2017, 19:26:35 UTC |
aa3f647 | Alex Lam S.L | 27 March 2017, 13:49:08 UTC | ufuzz: workaround for Function.toString() v2 (#1700) | 27 March 2017, 13:49:08 UTC |
c526da5 | Alex Lam S.L | 27 March 2017, 10:09:35 UTC | `has_side_effects()` should take `AST_Switch.expression` into account (#1699) fixes #1698 | 27 March 2017, 10:09:35 UTC |
581630e | Alex Lam S.L | 26 March 2017, 20:37:42 UTC | 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. | 26 March 2017, 20:37:42 UTC |
f595293 | Alex Lam S.L | 26 March 2017, 18:32:46 UTC | preserve side effects in switch expression (#1694) fixes #1690 | 26 March 2017, 18:32:46 UTC |
f001e4c | Alex Lam S.L | 26 March 2017, 17:58:21 UTC | 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. | 26 March 2017, 17:58:21 UTC |
57ce5bd | Alex Lam S.L | 26 March 2017, 17:30:21 UTC | 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. | 26 March 2017, 17:30:21 UTC |
861a79a | Alex Lam S.L | 26 March 2017, 11:14:30 UTC | fix `delete` related issues in `collapse_vars` and `reduce_vars` (#1689) | 26 March 2017, 11:14:30 UTC |
00996af | Alex Lam S.L | 26 March 2017, 10:18:44 UTC | ufuzz: workaround function name and toString() (#1688) fixes #1686 | 26 March 2017, 10:18:44 UTC |
e76fb35 | Alex Lam S.L | 26 March 2017, 10:08:44 UTC | 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 | 26 March 2017, 10:08:44 UTC |
3276740 | Alex Lam S.L | 26 March 2017, 08:52:38 UTC | fallthrough should not execute case expression (#1683) - de-duplicate trailing cases only, avoid all potential side-effects - enable switch statement fuzzing fixes #1680 | 26 March 2017, 08:52:38 UTC |
5509e51 | kzc | 26 March 2017, 08:36:33 UTC | optimize conditional when condition symbol matches consequent (#1684) | 26 March 2017, 08:36:33 UTC |
94f8472 | Alex Lam S.L | 26 March 2017, 05:32:43 UTC | suppress switch branch de-duplication upon side effects (#1682) fixes #1679 | 26 March 2017, 05:32:43 UTC |
8a4f865 | Alex Lam S.L | 26 March 2017, 04:05:44 UTC | fix side-effects detection on switch statements (#1678) extension of #1675 | 26 March 2017, 04:05:44 UTC |
adb0e88 | Peter van der Zee | 26 March 2017, 04:04:50 UTC | Improve fuzzer. :) (#1665) @qfox Put value constants in a global constant 74c0fb9 @qfox And the other string based values as well a5033c5 @qfox Be more strict about parameters, allow max to be optional 9c7ce70 @qfox Support a `V` (capital) flag to only log out at intervals 2d822c7 @qfox Fewer magic variables a6a9a7c @qfox Fix decrement such that a function is created when n=1 7e4b017 @qfox Add more values 64e596e @qfox Make `b` appear more often d33191a @qfox Add functions that contain (only..) functions 29a86e3 @qfox Allow the block statement to contain multiple statements 7570484 @qfox Make the interval count a constant d587ad8 @qfox Enable mangling, disable post-processing … 4dc8d35 @qfox Add more simple value that may trigger syntactic errors 8496d58 @qfox Add `else` to some `if` statements a4aed65 @qfox Move iife to expr generator, fix missing recursion arg e453159 @qfox Improve output on error where it wasnt printing the last code properly 4565a1a @qfox Add switch statement to generator ceafa76 @qfox Add var statement, support optional comma for expr generator b83921b @qfox Expression generator should use a simple value instead of `0` as recu… … 9d1a5c7 @qfox const -> var to keep things es5... 0143099 @qfox Add more simple values that may trigger edge cases 5e124f1 @qfox Add central name generator, take special care for global functions aeb7682 @qfox Add some `return` and function declaration cases to statement generator 6c9c3cc @qfox Exclude switches from generator for now 91124b2 Put value constants in a global constant And the other string based values as well Be more strict about parameters, allow max to be optional Support a `V` (capital) flag to only log out at intervals Fewer magic variables Fix decrement such that a function is created when n=1 Add more values Make `b` appear more often Add functions that contain (only..) functions Allow the block statement to contain multiple statements Make the interval count a constant Enable mangling, disable post-processing Mangling is kind of the whole point... Similarly, to beautify the minified code afterwards may supress bugs so it's probably best not to beautify the code prematurely. And there's no point anyways since you won't see it most of the time and only care about the main input anyways. Add more simple value that may trigger syntactic errors Add `else` to some `if` statements Move iife to expr generator, fix missing recursion arg Improve output on error where it wasnt printing the last code properly Add switch statement to generator Add var statement, support optional comma for expr generator Expression generator should use a simple value instead of `0` as recursion default const -> var to keep things es5... Add more simple values that may trigger edge cases Add central name generator, take special care for global functions Add some `return` and function declaration cases to statement generator Exclude switches from generator for now Enable switch generation because #1667 was merged Add typeof generator Add some elision tests Add a new edge case that returns an object explicitly Add all binary ops to try and cover more paths Forgot four binops and added `Math` to var name pool Harden the incremental pre/postfix tests Improve switch generator, allow `default` to appear at any clause index Add try/catch/finally generation Prevent function statements being generated Add edge case with decremental op and a group Disable switch generation until #1679 and #1680 are solved Only allow `default` clause as last clause for now Tentatively enable `throw`, `break` and `continue` statements when in valid contexts | 26 March 2017, 04:04:50 UTC |
f83d370 | Alex Lam S.L | 25 March 2017, 21:15:46 UTC | 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 | 25 March 2017, 21:15:46 UTC |
b19aa58 | Alex Lam S.L | 25 March 2017, 15:03:26 UTC | 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 | 25 March 2017, 15:03:26 UTC |
0a65de8 | Alex Lam S.L | 25 March 2017, 13:17:30 UTC | fix `reduce_vars` on `AST_Switch` (#1671) Take conditional nature of switch branches into account. fixes #1670 | 25 March 2017, 13:17:30 UTC |
6e86ee9 | Alex Lam S.L | 25 March 2017, 09:40:18 UTC | 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 | 25 March 2017, 09:40:18 UTC |
8ca2401 | Alex Lam S.L | 25 March 2017, 08:21:42 UTC | fix `dead_code` on `AST_Switch` (#1667) Need to call `extract_declarations_from_unreachable_code()`. fixes #1663 | 25 March 2017, 08:21:42 UTC |
491f16c | Alex Lam S.L | 24 March 2017, 19:21:16 UTC | v2.8.16 | 24 March 2017, 19:21:16 UTC |
a30092e | Alex Lam S.L | 24 March 2017, 19:18:36 UTC | 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 | 24 March 2017, 19:18:36 UTC |
b1abe92 | Alex Lam S.L | 24 March 2017, 17:46:12 UTC | introduce ufuzz.js (#1655) closes #1647 | 24 March 2017, 17:46:12 UTC |
b454ce6 | Alex Lam S.L | 24 March 2017, 15:12:58 UTC | Update ISSUE_TEMPLATE.md | 24 March 2017, 15:12:58 UTC |
32283a0 | Alex Lam S.L | 24 March 2017, 14:09:19 UTC | fix cascade of `evaluate` optimisation (#1654) Operator has changed, so break out from rest of the rules. fixes #1649 | 24 March 2017, 14:09:19 UTC |
ac51d4c | Alex Lam S.L | 24 March 2017, 11:31:17 UTC | fix corner case in `AST_For.init` (#1652) Enforce `null` as value for empty initialisation blocks. fixes #1648 | 24 March 2017, 11:31:17 UTC |
0432a7a | Alex Lam S.L | 24 March 2017, 10:52:48 UTC | fix assignment extraction from conditional (#1651) fixes #1645 fixes #1646 | 24 March 2017, 10:52:48 UTC |
f3a1694 | Alex Lam S.L | 24 March 2017, 06:30:31 UTC | fix assignment substitution in sequences (#1643) take side effects of binary boolean operations into account fixes #1639 | 24 March 2017, 06:30:31 UTC |
2e0dc97 | Alex Lam S.L | 24 March 2017, 06:28:40 UTC | improve error marker placement (#1644) For AST_UnaryPrefix, points to the operator rather than end of expression. | 24 March 2017, 06:28:40 UTC |
7010356 | Alex Lam S.L | 24 March 2017, 05:19:50 UTC | fix expect_stdout (#1642) `compress()` may modify input ASTs add tests for #1627 & #1640 | 24 March 2017, 05:19:50 UTC |
79334dd | kzc | 24 March 2017, 03:55:03 UTC | fix regression: CLI options with hyphens like -b ascii-only (#1640) fixes #1637 | 24 March 2017, 03:55:03 UTC |
e918748 | Alex Lam S.L | 23 March 2017, 18:55:32 UTC | 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 | 23 March 2017, 18:55:32 UTC |
6b2f347 | Alex Lam S.L | 23 March 2017, 05:36:47 UTC | v2.8.15 | 23 March 2017, 05:36:47 UTC |
48ffbef | Alex Lam S.L | 22 March 2017, 23:17:34 UTC | account for cross-scope modifications in `collapse_vars` (#1634) mostly done by @kzc fixes #1631 | 22 March 2017, 23:17:34 UTC |
c0f3fea | Alex Lam S.L | 22 March 2017, 22:49:49 UTC | introduce compressor.info() (#1633) report the following only when `options.warnings = "verbose"` - unused elements due to inlining - collpased variables | 22 March 2017, 22:49:49 UTC |
a00040d | Alex Lam S.L | 22 March 2017, 22:11:16 UTC | fix a bug in simple_glob (#1632) - "?" should not match "/" - other minor clean-ups | 22 March 2017, 22:11:16 UTC |
ee95c1b | Alex Lam S.L | 22 March 2017, 17:31:46 UTC | 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 | 22 March 2017, 17:31:46 UTC |
4bceb85 | Alex Lam S.L | 21 March 2017, 06:11:32 UTC | throw parse error on invalid assignments (#1627) fixes #1626 | 21 March 2017, 06:11:32 UTC |
30a7504 | Alex Lam S.L | 19 March 2017, 07:24:57 UTC | v2.8.14 | 19 March 2017, 07:24:57 UTC |
a3cc3a9 | Alex Lam S.L | 19 March 2017, 04:00:32 UTC | 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. | 19 March 2017, 04:00:32 UTC |
96f8bef | Alex Lam S.L | 19 March 2017, 03:59:42 UTC | 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` | 19 March 2017, 03:59:42 UTC |
cd58635 | Alex Lam S.L | 18 March 2017, 19:04:22 UTC | fix AST_Binary.lift_sequences() (#1621) Commit eab99a1c fails to account for side effects from compound assignments. | 18 March 2017, 19:04:22 UTC |
274331d | Alex Lam S.L | 18 March 2017, 18:17:15 UTC | transform String.charAt() to index access (#1620) Guarded by `unsafe` as `charAt()` can be overridden. | 18 March 2017, 18:17:15 UTC |
0489d6d | Alex Lam S.L | 17 March 2017, 18:33:51 UTC | handle runtime errors in `expect_stdout` (#1618) allow test to pass if both `input` and `expect` throws the same kind of error | 17 March 2017, 18:33:51 UTC |
fb09283 | Alex Lam S.L | 17 March 2017, 17:56:15 UTC | 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`. | 17 March 2017, 17:56:15 UTC |
b7c112e | Christian Maughan Tegnér | 16 March 2017, 19:08:38 UTC | Add `--in-source-map inline` documentation (#1611) | 16 March 2017, 19:08:38 UTC |
b2b8a0d | Alex Lam S.L | 16 March 2017, 18:01:33 UTC | v2.8.13 | 16 March 2017, 18:01:33 UTC |
ac40301 | Alex Lam S.L | 16 March 2017, 16:26:48 UTC | 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 | 16 March 2017, 16:26:48 UTC |
3563d8c | Alex Lam S.L | 16 March 2017, 15:20:06 UTC | extend `test/run-tests.js` to optionally execute uglified output (#1604) fixes #1588 | 16 March 2017, 15:20:06 UTC |
5ae04b3 | Alex Lam S.L | 16 March 2017, 05:22:26 UTC | make `collapse_vars` consistent with `toplevel` (#1608) fixes #1605 | 16 March 2017, 05:22:26 UTC |
a80b228 | Alex Lam S.L | 16 March 2017, 04:03:30 UTC | fix `hoist_vars` on `reduce_vars` (#1607) `hoist_vars` converts variable declarations into plain assignments, which then confuses `reduce_vars` fixes #1606 | 16 March 2017, 04:03:30 UTC |
cf4bf4c | Alex Lam S.L | 15 March 2017, 17:02:59 UTC | fix stack issues with `AST_Node.evaluate()` (#1603) 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`. | 15 March 2017, 17:02:59 UTC |
8223b2e | Alex Lam S.L | 15 March 2017, 10:44:13 UTC | 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. | 15 March 2017, 10:44:13 UTC |
381bd38 | Alex Lam S.L | 14 March 2017, 05:19:05 UTC | minor clean-ups (#1600) - remove obsolete optimisation in `AST_Binary` after #1477 - improve `TreeWalker.has_directive()` readability and resilience against multiple visits | 14 March 2017, 05:19:05 UTC |
919d5e3 | Alex Lam S.L | 10 March 2017, 21:00:55 UTC | v2.8.12 | 10 March 2017, 21:00:55 UTC |
e3a3db7 | Alex Lam S.L | 10 March 2017, 20:59:55 UTC | temporary fix for boolean bug (#1597) fixes #1592 | 10 March 2017, 20:59:55 UTC |