Age | Commit message (Collapse) | Author |
|
fixes #3703
|
|
|
|
fixes #3490
|
|
fixes #3406
|
|
|
|
|
|
|
|
|
|
|
|
- `a = b, b` => `a = b`
- `a.b = c, c()` => `(a.b = c)()`
|
|
- introduce `unsafe_undefined`
- safer `.toString()` compression
Miscellaneous
- rename `unsafe_Function`
|
|
|
|
- nudge declarations without assignments
- within `AST_BlockStatement`
- across `AST_If`
|
|
|
|
|
|
fixes #2313
|
|
- eliminate `throw` usages
- suppress extraneous parenthesis
- `new function() {foo.bar()}.baz`
- `for (function() { "foo" in bar; };;);`
|
|
Partially reverts #2059 as this has better coverage and performance.
fixes #2062
|
|
As this is not part of ES5.
|
|
- preserve (re)assignment to `const` for runtime error
- suppress `cascade` on `const`, as runtime behaviour is ill-defined
|
|
fixes #27
|
|
- rename `AST_Seq` to `AST_Sequence`
- raise default sequences_limit from 200 to 800
|
|
- assignment
- boolean
- conditional
- sequence
|
|
- 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
|
|
Unlike normal variables and even function definitions, these cannot be reassigned, even though assignment expressions would "leak" the assigned value as normal.
|
|
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
|
|
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.
|
|
Commit eab99a1c fails to account for side effects from compound assignments.
|
|
`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.
|
|
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
|
|
- 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
|
|
N = 2:
a;
b;
c;
d;
was:
a, b;
c;
d;
now:
a, b;
c, d;
fixes #1455
closes #1457
|
|
Close #550
|
|
We can in fact lift sequences, but only if the operation is assignment and
the left-hand side has no side effects nor property access -- that should
guarantee that whatever we place before it cannot affect the sense of the
assignment.
Dropped contrived test case (too hard to support it now), added a more
meaningful one.
|
|
initializer
(opera can't parse it)
close #25
|
|
expressions so that we can avoid parens)
|
|
|
|
|
|
|