Age | Commit message (Collapse) | Author |
|
|
|
- convert `[].forEach()` to for-loops
|
|
- improve marking efficiency
- apply smarter `const` replacement to `var`
fixes #1501
|
|
closes #1362
closes #1399
|
|
- limited to one input file (or `stdin`)
- only works with built-in parser
fixes #520
|
|
Makes direct usage within web browser easier, even if officially unsupported.
|
|
2.8.0 staging
|
|
- fix corner cases in `const` optimisation
- deprecate `/*@const*/`
fixes #1497
closes #1498
|
|
A function call or IIFE with an immediately preceding comment
containing `@__PURE__` or `#__PURE__` is deemed to be a
side-effect-free pure function call and can potentially be
dropped.
Depends on `side_effects` option.
`[#@]__PURE__` hint will be removed from comment when pure
call is dropped.
fixes #1261
closes #1448
|
|
fixes #1492
closes #1493
|
|
- only drops side-effect-free arguments
- drop side-effect-free parts with discarded value from `AST_Seq` & `AST_SimpleStatement`
closes #1494
|
|
- never exceed specified limit
- otherwise warning is shown
- enabled only for final output
closes #1496
|
|
- `Array.prototype.slice` => `[].slice`
closes #1491
|
|
fixes #1377
closes #1488
|
|
closes #1487
|
|
reduce whitespaces from if-else statements
fixes #1482
closes #1483
|
|
- `test/benchmark.js` measures performance
- `test/jetstream.js` verifies correctness
- configurable mangle/compress/output options
closes #1479
|
|
- support arrays, objects & AST_Node
- support `"a.b":1` on both cli & API
- emit warning if variable is modified
- override top-level variables
fixes #1416
closes #1198
closes #1469
|
|
fix invalid boolean conversion now exposed in `make_node_from_constant()`
closes #1477
|
|
- update modified flag between compress() passes
- support IIFE arguments
- fix corner case with multiple definitions
closes #1473
|
|
- utilise in_use_ids instead of unreferenced()
- drop_unused now up-to-date for subsequent passes
closes #1476
|
|
previously test cases with the same name would be skipped except for the last one
`test/run-test.js` will now report duplicated names as errors
closes #1461
|
|
closes #1459
|
|
- 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
|
|
shuffle associative operations to minimise parentheses and aid other uglification efforts
closes #1454
|
|
N = 2:
a;
b;
c;
d;
was:
a, b;
c;
d;
now:
a, b;
c, d;
fixes #1455
closes #1457
|
|
- `do{...}while(false)` => `{...}`
- clean up `AST_While` logic
closes #1452
|
|
fixes
- [a].join() => "" + a
- ["a", , "b"].join() => "a,,b"
- ["a", null, "b"].join() => "a,,b"
- ["a", undefined, "b"].join() => "a,,b"
improvements
- ["a", "b"].join(null) => "anullb"
- ["a", "b"].join(undefined) => "a,b"
- [a + "b", c].join("") => a + "b" + c
closes #1453
|
|
- assign statement does not count towards variable usage by default
- only works with assignments on the same scope level as declaration
- can be disabled with `unused` set to "keep_assign"
- `toplevel` to drop unused top-level variables and/or functions
- `top_retain` to whitelist top-level exceptions
closes #1450
|
|
closes #1449
|
|
move out of unsafe, guard corner case with screw_id8 instead
closes #1446
|
|
happens when inner function:
- just below top level
- not referenced
- `unused` is disabled
closes #1445
|
|
they are computed but never used
closes #1444
|
|
remove extraneous call to AST_SymbolRef.reference()
closes #1443
|
|
closes #1437
|
|
verify that property names after mangle are legal
|
|
is not a reserved word. This should apply to propsmangle as well.
|
|
improved reduce_vars & binary operands produce more optimal results
|
|
* fix mangling collision with keep_fnames
fixes #1423
* pass mangle options to figure_out_scope()
bring command-line in line with minify()
|
|
- 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`
|
|
- gated by `unsafe`
- replaces previous optimisation specific to String.length
- "123"[0] => 1
- [1, 2, 3][0] => 1
- [1, 2, 3].length => 3
- does not apply to objects with overridden prototype functions
|
|
|
|
Clarify docs, help and tests for --support-ie8 and screw_ie8=false
|
|
|
|
|
|
|
|
|
|
If using `inSourceMap` this fix will ensure the copying of `sourcesContent` is based on potentially normalized `sources` values (https://github.com/mozilla/source-map/blob/master/lib/source-map-consumer.js#L304-L309).
For example `normalize` (https://github.com/mozilla/source-map/blob/master/lib/util.js#L80-L123) will rewrite `./dist/mySource.js` to `dist/mySource.js` in the target `_sources` of the `SourceMapConsumer`. As a result `orig_map.sourceContentFor(source, true);` would return `null` since the orginal `source` was no longer available in the consumer. By using the keys generating from the `SourceMapConsumer.constructor` consistency is ensured.
|
|
|
|
will deduced
|