Alex Lam S.L [Fri, 7 Apr 2017 10:47:30 +0000 (18:47 +0800)]
extend ufuzz generator (#1783)
- property access
- property assignment
- allow bare expression within try-block
- normalise `Error` in `console.log()`
- generate more unary expressions
- add parenthesis to enforce precedence
- adjust variable reuse/creation
- add parameters to function declaration & expression
- add return expression
- add trivial arguments to function call
Alex Lam S.L [Fri, 7 Apr 2017 09:06:01 +0000 (17:06 +0800)]
fix `pure_getters` for chained property access (#1798)
Alex Lam S.L [Fri, 7 Apr 2017 07:39:59 +0000 (15:39 +0800)]
fix corner cases with `delete` (#1796)
`delete Infinity` returns `false` where as `delete (1/0)` returns `true`
Alex Lam S.L [Fri, 7 Apr 2017 05:31:58 +0000 (13:31 +0800)]
introduce "strict" to `pure_getters` (#1795)
Alex Lam S.L [Fri, 7 Apr 2017 04:32:56 +0000 (12:32 +0800)]
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 [Thu, 6 Apr 2017 19:42:17 +0000 (03:42 +0800)]
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 [Thu, 6 Apr 2017 16:45:51 +0000 (00:45 +0800)]
enable `inline_script` by default (#1793)
Alex Lam S.L [Thu, 6 Apr 2017 03:18:59 +0000 (11:18 +0800)]
improve `pure_getters` (#1786)
- property access to `null` & `undefined` always has side effects
- utilise `reduce_vars` to determine safe property access
- may-be cases treated as side effects unless `unsafe`
Alex Lam S.L [Wed, 5 Apr 2017 13:06:42 +0000 (21:06 +0800)]
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
Alex Lam S.L [Tue, 4 Apr 2017 15:48:22 +0000 (23:48 +0800)]
optimise `do{...}while(false)` (#1785)
- better heuristics to avoid issues like #1532
- fix `TreeWalker.loopcontrol_target()`
- `continue` cannot refer to `switch` blocks
Alex Lam S.L [Tue, 4 Apr 2017 08:24:16 +0000 (16:24 +0800)]
remove `--mangle-props` from fuzzing (#1777)
The inherently unsafe nature makes this feature unsuitable to be tested this way.
fixes #1774
Alex Lam S.L [Mon, 3 Apr 2017 19:50:19 +0000 (03:50 +0800)]
exclude mangling of special property names (#1779)
- `null`
- `true`
- `false`
- numeric literals
Alex Lam S.L [Mon, 3 Apr 2017 15:17:47 +0000 (23:17 +0800)]
fix `mangleProperties` on identifiers (#1776)
- fix handling of "-Infinity"
- add test case for "-0"
reverts #1481
Alex Lam S.L [Mon, 3 Apr 2017 10:56:11 +0000 (18:56 +0800)]
workaround Node.js bugs (#1775)
Wrap test code in IIFE before passing to `vm`
fixes #1768
fixes #1771
Alex Lam S.L [Mon, 3 Apr 2017 04:31:05 +0000 (12:31 +0800)]
fix mangleProperties of `undefined` & `Infinity` (#1772)
`NaN` already works by the happy accident of `Number.NaN`
fixes #1770
Alex Lam S.L [Sun, 2 Apr 2017 20:00:33 +0000 (04:00 +0800)]
extend `test/ufuzz.js` (#1769)
New expressions:
- property access
- array literal
- object literal
Miscellaneous:
- reduce execution timeout
- test `toplevel` and `mangleProperties`
Alex Lam S.L [Sun, 2 Apr 2017 09:07:55 +0000 (17:07 +0800)]
v2.8.21
Alex Lam S.L [Sun, 2 Apr 2017 09:07:20 +0000 (17:07 +0800)]
fix corner case in `switch` (#1765)
Alex Lam S.L [Sun, 2 Apr 2017 08:14:09 +0000 (16:14 +0800)]
avoid confusion of `NaN` & `Infinity` with `catch` symbol of the same name (#1763)
fixes #1760
fixes #1761
Alex Lam S.L [Sun, 2 Apr 2017 06:52:25 +0000 (14:52 +0800)]
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 [Sat, 1 Apr 2017 21:11:29 +0000 (05:11 +0800)]
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
Alex Lam S.L [Sat, 1 Apr 2017 19:17:01 +0000 (03:17 +0800)]
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
Alex Lam S.L [Sat, 1 Apr 2017 18:10:50 +0000 (02:10 +0800)]
upgrade fuzzer (#1754)
- configurable set of `minify()` options
- test and report suspects upon failure
- continue after failure if infinite iterations is specified
kzc [Sat, 1 Apr 2017 18:08:46 +0000 (14:08 -0400)]
fuzz regexp literals, more constant numbers, typeof expression (#1755)
Alex Lam S.L [Sat, 1 Apr 2017 09:19:57 +0000 (17:19 +0800)]
fix switch branch elimination (#1752)
Merge unreachable case body with previous fallthrough case
fixes #1750
Alex Lam S.L [Sat, 1 Apr 2017 09:09:52 +0000 (17:09 +0800)]
minor tweaks to fuzzer (#1751)
- remove `let` as variable name
- employ `crypto.randomBytes()`
Alex Lam S.L [Fri, 31 Mar 2017 21:47:11 +0000 (05:47 +0800)]
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
Alex Lam S.L [Fri, 31 Mar 2017 19:02:14 +0000 (03:02 +0800)]
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
Alex Lam S.L [Fri, 31 Mar 2017 10:47:44 +0000 (18:47 +0800)]
combine rules for binary boolean operations (#1744)
Peter van der Zee [Fri, 31 Mar 2017 09:23:50 +0000 (11:23 +0200)]
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
Alex Lam S.L [Fri, 31 Mar 2017 08:41:04 +0000 (16:41 +0800)]
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.
Alex Lam S.L [Fri, 31 Mar 2017 07:27:40 +0000 (15:27 +0800)]
v2.8.20
Alex Lam S.L [Fri, 31 Mar 2017 07:26:57 +0000 (15:26 +0800)]
fix missing preamble when shebang is absent (#1742)
Alex Lam S.L [Fri, 31 Mar 2017 04:26:10 +0000 (12:26 +0800)]
v2.8.19
Alex Lam S.L [Thu, 30 Mar 2017 18:57:47 +0000 (02:57 +0800)]
fix catch symbol mangling (#1734)
Only need to look up the immediate non-block/catch scope for the same-name special case.
fixes #1733
Alex Lam S.L [Thu, 30 Mar 2017 08:09:00 +0000 (16:09 +0800)]
remove paranthesis for `-(x*y)` (#1732)
Alex Lam S.L [Thu, 30 Mar 2017 04:16:58 +0000 (12:16 +0800)]
optimize try-catch-finally (#1731)
- eliminate empty blocks
- flatten out if try-block does not throw
Alex Lam S.L [Wed, 29 Mar 2017 16:13:46 +0000 (00:13 +0800)]
improve tests from #1726 (#1729)
Alex Lam S.L [Wed, 29 Mar 2017 15:27:35 +0000 (23:27 +0800)]
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
Alex Lam S.L [Wed, 29 Mar 2017 14:08:26 +0000 (22:08 +0800)]
speed up `equivalent_to()` and `AST_Switch` (#1727)
Alex Lam S.L [Wed, 29 Mar 2017 12:53:03 +0000 (20:53 +0800)]
fix missing parentheses around NaN/Infinity shorthands (#1726)
fixes #1724
fixes #1725
Alex Lam S.L [Wed, 29 Mar 2017 10:31:55 +0000 (18:31 +0800)]
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
Alex Lam S.L [Tue, 28 Mar 2017 20:40:05 +0000 (04:40 +0800)]
improve beautified output of switch blocks (#1721)
Alex Lam S.L [Tue, 28 Mar 2017 19:13:30 +0000 (03:13 +0800)]
v2.8.18
Alex Lam S.L [Tue, 28 Mar 2017 17:27:24 +0000 (01:27 +0800)]
remove UGLIFY_DEBUG (#1720)
fixes #1719
Alex Lam S.L [Tue, 28 Mar 2017 17:00:21 +0000 (01:00 +0800)]
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.
Alex Lam S.L [Tue, 28 Mar 2017 13:49:04 +0000 (21:49 +0800)]
v2.8.17
Alex Lam S.L [Tue, 28 Mar 2017 13:25:49 +0000 (21:25 +0800)]
fix `unused` on var of the same name within catch (#1716)
fixes #1715
Alex Lam S.L [Tue, 28 Mar 2017 09:08:16 +0000 (17:08 +0800)]
fix `is_number()` on `+=` (#1714)
fixes #1710
Alex Lam S.L [Tue, 28 Mar 2017 09:02:20 +0000 (17:02 +0800)]
drop anonymous function name when overshadowed by other declarations (#1712)
fixes #1709
Alex Lam S.L [Tue, 28 Mar 2017 08:42:39 +0000 (16:42 +0800)]
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
Alex Lam S.L [Mon, 27 Mar 2017 19:59:13 +0000 (03:59 +0800)]
fix tail trimming of switch blocks (#1707)
now guarded under `dead_code`
fixes #1705
Alex Lam S.L [Mon, 27 Mar 2017 19:26:35 +0000 (03:26 +0800)]
fix mangle for variable declared within catch block (#1706)
fixes #1704
Alex Lam S.L [Mon, 27 Mar 2017 13:49:08 +0000 (21:49 +0800)]
ufuzz: workaround for Function.toString() v2 (#1700)
Alex Lam S.L [Mon, 27 Mar 2017 10:09:35 +0000 (18:09 +0800)]
`has_side_effects()` should take `AST_Switch.expression` into account (#1699)
fixes #1698
Alex Lam S.L [Sun, 26 Mar 2017 20:37:42 +0000 (04:37 +0800)]
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.
Alex Lam S.L [Sun, 26 Mar 2017 18:32:46 +0000 (02:32 +0800)]
preserve side effects in switch expression (#1694)
fixes #1690
Alex Lam S.L [Sun, 26 Mar 2017 17:58:21 +0000 (01:58 +0800)]
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.
Alex Lam S.L [Sun, 26 Mar 2017 17:30:21 +0000 (01:30 +0800)]
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 [Sun, 26 Mar 2017 11:14:30 +0000 (19:14 +0800)]
fix `delete` related issues in `collapse_vars` and `reduce_vars` (#1689)
Alex Lam S.L [Sun, 26 Mar 2017 10:18:44 +0000 (18:18 +0800)]
ufuzz: workaround function name and toString() (#1688)
fixes #1686
Alex Lam S.L [Sun, 26 Mar 2017 10:08:44 +0000 (18:08 +0800)]
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
Alex Lam S.L [Sun, 26 Mar 2017 08:52:38 +0000 (16:52 +0800)]
fallthrough should not execute case expression (#1683)
- de-duplicate trailing cases only, avoid all potential side-effects
- enable switch statement fuzzing
fixes #1680
kzc [Sun, 26 Mar 2017 08:36:33 +0000 (04:36 -0400)]
optimize conditional when condition symbol matches consequent (#1684)
Alex Lam S.L [Sun, 26 Mar 2017 05:32:43 +0000 (13:32 +0800)]
suppress switch branch de-duplication upon side effects (#1682)
fixes #1679
Alex Lam S.L [Sun, 26 Mar 2017 04:05:44 +0000 (12:05 +0800)]
fix side-effects detection on switch statements (#1678)
extension of #1675
Peter van der Zee [Sun, 26 Mar 2017 04:04:50 +0000 (06:04 +0200)]
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
Alex Lam S.L [Sat, 25 Mar 2017 21:15:46 +0000 (05:15 +0800)]
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
Alex Lam S.L [Sat, 25 Mar 2017 15:03:26 +0000 (23:03 +0800)]
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
Alex Lam S.L [Sat, 25 Mar 2017 13:17:30 +0000 (21:17 +0800)]
fix `reduce_vars` on `AST_Switch` (#1671)
Take conditional nature of switch branches into account.
fixes #1670
Alex Lam S.L [Sat, 25 Mar 2017 09:40:18 +0000 (17:40 +0800)]
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 [Sat, 25 Mar 2017 08:21:42 +0000 (16:21 +0800)]
fix `dead_code` on `AST_Switch` (#1667)
Need to call `extract_declarations_from_unreachable_code()`.
fixes #1663
Alex Lam S.L [Fri, 24 Mar 2017 19:21:16 +0000 (03:21 +0800)]
v2.8.16
Alex Lam S.L [Fri, 24 Mar 2017 19:18:36 +0000 (03:18 +0800)]
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 [Fri, 24 Mar 2017 17:46:12 +0000 (01:46 +0800)]
introduce ufuzz.js (#1655)
closes #1647
Alex Lam S.L [Fri, 24 Mar 2017 15:12:58 +0000 (23:12 +0800)]
Update ISSUE_TEMPLATE.md
Alex Lam S.L [Fri, 24 Mar 2017 14:09:19 +0000 (22:09 +0800)]
fix cascade of `evaluate` optimisation (#1654)
Operator has changed, so break out from rest of the rules.
fixes #1649
Alex Lam S.L [Fri, 24 Mar 2017 11:31:17 +0000 (19:31 +0800)]
fix corner case in `AST_For.init` (#1652)
Enforce `null` as value for empty initialisation blocks.
fixes #1648
Alex Lam S.L [Fri, 24 Mar 2017 10:52:48 +0000 (18:52 +0800)]
fix assignment extraction from conditional (#1651)
fixes #1645
fixes #1646
Alex Lam S.L [Fri, 24 Mar 2017 06:30:31 +0000 (14:30 +0800)]
fix assignment substitution in sequences (#1643)
take side effects of binary boolean operations into account
fixes #1639
Alex Lam S.L [Fri, 24 Mar 2017 06:28:40 +0000 (14:28 +0800)]
improve error marker placement (#1644)
For AST_UnaryPrefix, points to the operator rather than end of expression.
Alex Lam S.L [Fri, 24 Mar 2017 05:19:50 +0000 (13:19 +0800)]
fix expect_stdout (#1642)
`compress()` may modify input ASTs
add tests for #1627 & #1640
kzc [Fri, 24 Mar 2017 03:55:03 +0000 (23:55 -0400)]
fix regression: CLI options with hyphens like -b ascii-only (#1640)
fixes #1637
Alex Lam S.L [Thu, 23 Mar 2017 18:55:32 +0000 (02:55 +0800)]
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 [Thu, 23 Mar 2017 05:36:47 +0000 (13:36 +0800)]
v2.8.15
Alex Lam S.L [Wed, 22 Mar 2017 23:17:34 +0000 (07:17 +0800)]
account for cross-scope modifications in `collapse_vars` (#1634)
mostly done by @kzc
fixes #1631
Alex Lam S.L [Wed, 22 Mar 2017 22:49:49 +0000 (06:49 +0800)]
introduce compressor.info() (#1633)
report the following only when `options.warnings = "verbose"`
- unused elements due to inlining
- collpased variables
Alex Lam S.L [Wed, 22 Mar 2017 22:11:16 +0000 (06:11 +0800)]
fix a bug in simple_glob (#1632)
- "?" should not match "/"
- other minor clean-ups
Alex Lam S.L [Wed, 22 Mar 2017 17:31:46 +0000 (01:31 +0800)]
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 [Tue, 21 Mar 2017 06:11:32 +0000 (14:11 +0800)]
throw parse error on invalid assignments (#1627)
fixes #1626
Alex Lam S.L [Sun, 19 Mar 2017 07:24:57 +0000 (15:24 +0800)]
v2.8.14
Alex Lam S.L [Sun, 19 Mar 2017 04:00:32 +0000 (12:00 +0800)]
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 [Sun, 19 Mar 2017 03:59:42 +0000 (11:59 +0800)]
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 [Sat, 18 Mar 2017 19:04:22 +0000 (03:04 +0800)]
fix AST_Binary.lift_sequences() (#1621)
Commit
eab99a1c fails to account for side effects from compound assignments.
Alex Lam S.L [Sat, 18 Mar 2017 18:17:15 +0000 (02:17 +0800)]
transform String.charAt() to index access (#1620)
Guarded by `unsafe` as `charAt()` can be overridden.
Alex Lam S.L [Fri, 17 Mar 2017 18:33:51 +0000 (02:33 +0800)]
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 [Fri, 17 Mar 2017 17:56:15 +0000 (01:56 +0800)]
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`.
Christian Maughan Tegnér [Thu, 16 Mar 2017 19:08:38 +0000 (20:08 +0100)]
Add `--in-source-map inline` documentation (#1611)
Alex Lam S.L [Thu, 16 Mar 2017 18:01:33 +0000 (02:01 +0800)]
v2.8.13
Alex Lam S.L [Thu, 16 Mar 2017 16:26:48 +0000 (00:26 +0800)]
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