UglifyJS.git
7 years agov2.8.19
Alex Lam S.L [Fri, 31 Mar 2017 04:26:10 +0000 (12:26 +0800)]
v2.8.19

7 years agofix catch symbol mangling (#1734)
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

7 years agoremove paranthesis for `-(x*y)` (#1732)
Alex Lam S.L [Thu, 30 Mar 2017 08:09:00 +0000 (16:09 +0800)]
remove paranthesis for `-(x*y)` (#1732)

7 years agooptimize try-catch-finally (#1731)
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

7 years agoimprove tests from #1726 (#1729)
Alex Lam S.L [Wed, 29 Mar 2017 16:13:46 +0000 (00:13 +0800)]
improve tests from #1726 (#1729)

7 years agospeed up IIFE elimination (#1728)
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

7 years agospeed up `equivalent_to()` and `AST_Switch` (#1727)
Alex Lam S.L [Wed, 29 Mar 2017 14:08:26 +0000 (22:08 +0800)]
speed up `equivalent_to()` and `AST_Switch` (#1727)

7 years agofix missing parentheses around NaN/Infinity shorthands (#1726)
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

7 years agooutput optimal representations of NaN & Infinity (#1723)
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

7 years agoimprove beautified output of switch blocks (#1721)
Alex Lam S.L [Tue, 28 Mar 2017 20:40:05 +0000 (04:40 +0800)]
improve beautified output of switch blocks (#1721)

7 years agov2.8.18
Alex Lam S.L [Tue, 28 Mar 2017 19:13:30 +0000 (03:13 +0800)]
v2.8.18

7 years agoremove UGLIFY_DEBUG (#1720)
Alex Lam S.L [Tue, 28 Mar 2017 17:27:24 +0000 (01:27 +0800)]
remove UGLIFY_DEBUG (#1720)

fixes #1719

7 years agofix corner case in `unused` (#1718)
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.

7 years agov2.8.17
Alex Lam S.L [Tue, 28 Mar 2017 13:49:04 +0000 (21:49 +0800)]
v2.8.17

7 years agofix `unused` on var of the same name within catch (#1716)
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

7 years agofix `is_number()` on `+=` (#1714)
Alex Lam S.L [Tue, 28 Mar 2017 09:08:16 +0000 (17:08 +0800)]
fix `is_number()` on `+=` (#1714)

fixes #1710

7 years agodrop anonymous function name when overshadowed by other declarations (#1712)
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

7 years agohandle var within catch of the same name (#1711)
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

7 years agofix tail trimming of switch blocks (#1707)
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

7 years agofix mangle for variable declared within catch block (#1706)
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

7 years agoufuzz: workaround for Function.toString() v2 (#1700)
Alex Lam S.L [Mon, 27 Mar 2017 13:49:08 +0000 (21:49 +0800)]
ufuzz: workaround for Function.toString() v2 (#1700)

7 years ago`has_side_effects()` should take `AST_Switch.expression` into account (#1699)
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

7 years agofix typeof side effects (#1696)
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.

7 years agopreserve side effects in switch expression (#1694)
Alex Lam S.L [Sun, 26 Mar 2017 18:32:46 +0000 (02:32 +0800)]
preserve side effects in switch expression (#1694)

fixes #1690

7 years agofix `cascade` on anonymous function reference (#1693)
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.

7 years agohandle overlapped variable definitions (#1691)
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.

7 years agofix `delete` related issues in `collapse_vars` and `reduce_vars` (#1689)
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)

7 years agoufuzz: workaround function name and toString() (#1688)
Alex Lam S.L [Sun, 26 Mar 2017 10:18:44 +0000 (18:18 +0800)]
ufuzz: workaround function name and toString() (#1688)

fixes #1686

7 years agofix `cascade` on `delete` operator (#1687)
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

7 years agofallthrough should not execute case expression (#1683)
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

7 years agooptimize conditional when condition symbol matches consequent (#1684)
kzc [Sun, 26 Mar 2017 08:36:33 +0000 (04:36 -0400)]
optimize conditional when condition symbol matches consequent (#1684)

7 years agosuppress switch branch de-duplication upon side effects (#1682)
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

7 years agofix side-effects detection on switch statements (#1678)
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

7 years agoImprove fuzzer. :) (#1665)
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

7 years agoimprove switch optimisations (#1677)
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

7 years agofix `has_side_effects()` (#1675)
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

7 years agofix `reduce_vars` on `AST_Switch` (#1671)
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

7 years agofix typeof side-effects (#1669)
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

7 years agofix `dead_code` on `AST_Switch` (#1667)
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

7 years agov2.8.16
Alex Lam S.L [Fri, 24 Mar 2017 19:21:16 +0000 (03:21 +0800)]
v2.8.16

7 years agofix invalid `AST_For.init` (#1657)
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

7 years agointroduce ufuzz.js (#1655)
Alex Lam S.L [Fri, 24 Mar 2017 17:46:12 +0000 (01:46 +0800)]
introduce ufuzz.js (#1655)

closes #1647

7 years agoUpdate ISSUE_TEMPLATE.md
Alex Lam S.L [Fri, 24 Mar 2017 15:12:58 +0000 (23:12 +0800)]
Update ISSUE_TEMPLATE.md

7 years agofix cascade of `evaluate` optimisation (#1654)
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

7 years agofix corner case in `AST_For.init` (#1652)
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

7 years agofix assignment extraction from conditional (#1651)
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

7 years agofix assignment substitution in sequences (#1643)
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

7 years agoimprove error marker placement (#1644)
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.

7 years agofix expect_stdout (#1642)
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

7 years agofix regression: CLI options with hyphens like -b ascii-only (#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

7 years agoimprove collapsible value detection (#1638)
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

7 years agov2.8.15
Alex Lam S.L [Thu, 23 Mar 2017 05:36:47 +0000 (13:36 +0800)]
v2.8.15

7 years agoaccount for cross-scope modifications in `collapse_vars` (#1634)
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

7 years agointroduce compressor.info() (#1633)
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

7 years agofix a bug in simple_glob (#1632)
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

7 years agometadata cleanup (#1630)
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

7 years agothrow parse error on invalid assignments (#1627)
Alex Lam S.L [Tue, 21 Mar 2017 06:11:32 +0000 (14:11 +0800)]
throw parse error on invalid assignments (#1627)

fixes #1626

7 years agov2.8.14
Alex Lam S.L [Sun, 19 Mar 2017 07:24:57 +0000 (15:24 +0800)]
v2.8.14

7 years agomake `expect_stdout` work on Node.js 0.12 (#1623)
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.

7 years agofix commit 88fb83a (#1622)
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`

7 years agofix AST_Binary.lift_sequences() (#1621)
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.

7 years agotransform String.charAt() to index access (#1620)
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.

7 years agohandle runtime errors in `expect_stdout` (#1618)
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

7 years agofix top-level directives in compress tests (#1615)
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`.

7 years agoAdd `--in-source-map inline` documentation (#1611)
Christian Maughan Tegnér [Thu, 16 Mar 2017 19:08:38 +0000 (20:08 +0100)]
Add `--in-source-map inline` documentation (#1611)

7 years agov2.8.13
Alex Lam S.L [Thu, 16 Mar 2017 18:01:33 +0000 (02:01 +0800)]
v2.8.13

7 years agofix chained evaluation (#1610)
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

7 years agoextend `test/run-tests.js` to optionally execute uglified output (#1604)
Alex Lam S.L [Thu, 16 Mar 2017 15:20:06 +0000 (23:20 +0800)]
extend `test/run-tests.js` to optionally execute uglified output (#1604)

fixes #1588

7 years agomake `collapse_vars` consistent with `toplevel` (#1608)
Alex Lam S.L [Thu, 16 Mar 2017 05:22:26 +0000 (13:22 +0800)]
make `collapse_vars` consistent with `toplevel` (#1608)

fixes #1605

7 years agofix `hoist_vars` on `reduce_vars` (#1607)
Alex Lam S.L [Thu, 16 Mar 2017 04:03:30 +0000 (12:03 +0800)]
fix `hoist_vars` on `reduce_vars` (#1607)

`hoist_vars` converts variable declarations into plain assignments, which then confuses `reduce_vars`

fixes #1606

7 years agofix stack issues with `AST_Node.evaluate()` (#1603)
Alex Lam S.L [Wed, 15 Mar 2017 17:02:59 +0000 (01:02 +0800)]
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`.

7 years agofix `AST_Node.optimize()` (#1602)
Alex Lam S.L [Wed, 15 Mar 2017 10:44:13 +0000 (18:44 +0800)]
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.

7 years agominor clean-ups (#1600)
Alex Lam S.L [Tue, 14 Mar 2017 05:19:05 +0000 (13:19 +0800)]
minor clean-ups (#1600)

- remove obsolete optimisation in `AST_Binary` after #1477
- improve `TreeWalker.has_directive()` readability and resilience against multiple visits

7 years agov2.8.12
Alex Lam S.L [Fri, 10 Mar 2017 21:00:55 +0000 (05:00 +0800)]
v2.8.12

7 years agotemporary fix for boolean bug (#1597)
Alex Lam S.L [Fri, 10 Mar 2017 20:59:55 +0000 (04:59 +0800)]
temporary fix for boolean bug (#1597)

fixes #1592

7 years agodisallow parameter substitution for named IIFEs (#1596)
Alex Lam S.L [Fri, 10 Mar 2017 19:34:55 +0000 (03:34 +0800)]
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

7 years agosupport multi-line string in tests (#1590)
Alex Lam S.L [Fri, 10 Mar 2017 03:27:30 +0000 (11:27 +0800)]
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.

7 years agofixup for #1585 (#1589)
Alex Lam S.L [Fri, 10 Mar 2017 02:49:41 +0000 (10:49 +0800)]
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.

7 years agov2.8.11
Alex Lam S.L [Thu, 9 Mar 2017 20:17:21 +0000 (04:17 +0800)]
v2.8.11

7 years agofix catch variable reference in IE8 (#1587)
Alex Lam S.L [Thu, 9 Mar 2017 19:15:21 +0000 (03:15 +0800)]
fix catch variable reference in IE8 (#1587)

`AST_Scope.def_variable()` will overwrite `AST_Symbol.thedef`, so save a copy before calling.

fixes #1586

7 years agoCorrectly raise a parse exception with a missing loop body (#1585)
Michael Mior [Thu, 9 Mar 2017 19:08:43 +0000 (14:08 -0500)]
Correctly raise a parse exception with a missing loop body (#1585)

7 years agofix & improve function argument compression (#1584)
Alex Lam S.L [Thu, 9 Mar 2017 11:11:05 +0000 (19:11 +0800)]
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

7 years agov2.8.10
Alex Lam S.L [Wed, 8 Mar 2017 21:48:06 +0000 (05:48 +0800)]
v2.8.10

7 years agoscan RHS of dropped assignments (#1581)
Alex Lam S.L [Wed, 8 Mar 2017 21:22:27 +0000 (05:22 +0800)]
scan RHS of dropped assignments (#1581)

- similar case as #1578 but against #1450 instead
- fix `this` binding in #1450 as well

closes #1580

7 years agoremove checkboxes from Issues template
Alex Lam S.L [Wed, 8 Mar 2017 11:19:54 +0000 (19:19 +0800)]
remove checkboxes from Issues template

7 years agoexplain how to make a proper bug report (#1579)
Alex Lam S.L [Wed, 8 Mar 2017 10:56:01 +0000 (18:56 +0800)]
explain how to make a proper bug report (#1579)

fixes #1574

7 years agoscan assignment value in drop_unused() (#1578)
Alex Lam S.L [Wed, 8 Mar 2017 10:37:32 +0000 (18:37 +0800)]
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

7 years agov2.8.9
Alex Lam S.L [Wed, 8 Mar 2017 04:41:22 +0000 (12:41 +0800)]
v2.8.9

7 years agofix function name eliminiation (#1576)
Alex Lam S.L [Wed, 8 Mar 2017 04:39:57 +0000 (12:39 +0800)]
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

7 years agoonly run benchmark & jetstream on CI (#1571)
Alex Lam S.L [Tue, 7 Mar 2017 22:00:51 +0000 (06:00 +0800)]
only run benchmark & jetstream on CI (#1571)

7 years agoplan B for IE8 do-while semi-colon fix (#1572)
Alex Lam S.L [Tue, 7 Mar 2017 21:07:05 +0000 (05:07 +0800)]
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

7 years agofix return from recursive IIFE (#1570)
Alex Lam S.L [Tue, 7 Mar 2017 19:31:51 +0000 (03:31 +0800)]
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

7 years agov2.8.8
Alex Lam S.L [Tue, 7 Mar 2017 11:58:41 +0000 (19:58 +0800)]
v2.8.8

7 years agoinclude benchmark.js in test suite (#1564)
Alex Lam S.L [Tue, 7 Mar 2017 11:25:12 +0000 (19:25 +0800)]
include benchmark.js in test suite (#1564)

- report file sizes and overall run time
- exit with non-zero code upon error

7 years agofix deep cloning of labels (#1565)
Alex Lam S.L [Tue, 7 Mar 2017 10:38:27 +0000 (18:38 +0800)]
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.

7 years agotransform function calls to IIFEs (#1560)
Alex Lam S.L [Tue, 7 Mar 2017 07:37:52 +0000 (15:37 +0800)]
transform function calls to IIFEs (#1560)

- expose function body to call sites for potential optimisations
- suppress substitution of variable used within `AST_Defun`

7 years agoavoid substitution of global variables (#1557)
Alex Lam S.L [Mon, 6 Mar 2017 19:11:03 +0000 (03:11 +0800)]
avoid substitution of global variables (#1557)

- unless `toplevel` is enabled
- global `const` works as before

7 years agocollapse_vars: do not replace a constant in loop condition or init (#1562)
kzc [Mon, 6 Mar 2017 17:42:33 +0000 (12:42 -0500)]
collapse_vars: do not replace a constant in loop condition or init (#1562)

7 years agosuppress semicolons after do/while (#1556)
Alex Lam S.L [Mon, 6 Mar 2017 09:31:35 +0000 (17:31 +0800)]
suppress semicolons after do/while (#1556)

- unless both `beautify` & `screw-ie8` are enabled
- deprecate workaround for if-do-while-else

fixes #186

7 years agov2.8.7
Alex Lam S.L [Sun, 5 Mar 2017 09:17:08 +0000 (17:17 +0800)]
v2.8.7