Commit Graph

28 Commits

Author SHA1 Message Date
Austaras
63fb0c4ad3
feat(es/minifier): Move assign with seq init into seq (#5847) 2022-09-14 12:57:18 +00:00
Alexander Akait
ccd618ce54
perf(html/minifier): Improve performance (#5838) 2022-09-13 14:01:41 +09:00
Austaras
8567a38c4a
feat(es/minifier): Extend inlining of identifiers to multi-usage (#5832) 2022-09-13 03:52:47 +00:00
Austaras
ee26337a25
feat(es/minifier): Inline lazily initialized variables (#5737)
Safety:

For a function-local variable, an expression with side-effects would be a call, including an indirect one with a member expression.

 - If the call is function-local, it will be analyzed by the analyzer and inliner will not work.
 - If the call is not a function-local one, it cannot modify the local variable.
2022-09-08 08:07:43 +00:00
Donny/강동윤
60ce462215
feat(es/minifier): Align name mangler with terser (#5763) 2022-09-06 21:37:58 +09:00
Donny/강동윤
8827c38faf
feat(es/minifier): Make DCE single-pass (#5699) 2022-09-01 16:30:21 +00:00
Donny/강동윤
d81fe67e4b
feat(es/minifier): Improve gzipped size (#5631) 2022-08-26 05:23:01 +00:00
Austaras
d2f3e29bb0
feat(es/minifier): Ignore recursive usage for function calls and pure calls (#5526) 2022-08-17 23:24:10 +00:00
Donny/강동윤
3943eb24d1
feat(es/minifier): Consider char frequencies (#5375) 2022-08-03 10:20:17 +00:00
Donny/강동윤
36d960c7e9
perf(es/hygiene): Make hygiene faster (#4952) 2022-06-15 14:36:57 +00:00
magic-akari
594089488b
feat(es/minifier): Drop new token if possible (#4932) 2022-06-11 05:27:13 +00:00
Donny/강동윤
7f69b9c80f
test(es/minifier): Add snapshots for the mangler (#4823)
I found a way to make the name mangler parallel, but I want to ensure that we don't break anything.
2022-05-27 07:32:23 +00:00
Donny/강동윤
49b3c2715c
refactor(es/minifier): Make rust-analyzer fast, really (#4746) 2022-05-23 16:16:05 +09:00
Donny/강동윤
47e6cc5190
refactor(es/minifier): Make rust-analyzer faster (#4744)
- We now use a separate crate for testing the minifier. This makes IDE much faster.
2022-05-23 15:53:01 +09:00
Donny/강동윤
73dfa95e5a
fix(es/minifier): Fix analysis of assignment patterns (#4712) 2022-05-19 05:10:12 +00:00
Donny/강동윤
36ff4f735f
test(es/minifier): Add size tests using dbg-swc (#4664) 2022-05-16 03:01:53 +00:00
Donny/강동윤
6a97c7bef8
fix(es/utils): Fix wrong apis (#4604)
# API Changes

## `swc_ecma_utils`

### Renames

 - `find_ids` => `find_pat_ids`
 - `prepend` => `prepend_stmt`
 - `as_bool` => `cast_to_bool`
 - `as_number` => `as_pure_number`
 - `as_string` => `cast_to_string`
 - (`as_pure_bool`, `cast_to_number` is not renamed)
 - `UsageFinder` => `IdentUsageFinder`.
 - `IdentFinder` => `IdentRefFinder`.

## Changes

 - Re-export of `HANDLER` from `swc_common::errors` is removed. Use `swc_common::error::HANDLER` instead.
 - Re-export of `Id` from `swc_ecma_ast` is removed. Use `swc_ecma_ast::Id` instead.
 - `ExprCtx` is used for apis related to `Expr`.
 - `preserve_effects` is now a method of `ExprCtx`. It was a top-level function.
 - `extract_side_effects_to` is now a method of `ExprCtx`. It was a top-level function.
 - `IdentUsageFinder` (previously `UsageFinder`) now takes `Id` instead of `Ident`.
 - `IdentRefFinder` (previously `IdentFinder`) now takes `Id` instead of `Ident`.
 - `ExprExt::is_ident_ref_to` is removed.
 - `Expr::is_global_ref_to` is added.
 - `:🆔:id` is removed. Use `Ident::to_id()` instead.
2022-05-11 04:36:22 +00:00
Donny/강동윤
af368eead2
fix(es/minifier): Improve sequential inliner (#4570) 2022-05-08 06:12:42 +00:00
Donny/강동윤
53610fdafc
feat(es/resolver): Use different syntax context for unresolved refs (#4436)
- We don't need a list of bindings to check if an identifier is unresolved.
 - Checking if an identifier is unresolved is now one CPU instruction.
   - Previously it was one hashmap operation.
 - This PR also improves performance, by removing the hashmaps mentioned above.
2022-04-26 07:38:50 +00:00
Austaras
df0d572b4f
chore(es/minifier): Update terser test references (#4297) 2022-04-10 06:50:52 +00:00
Donny/강동윤
be09ea6991
feat(es/minifier): Drop noop calls (#4019) 2022-03-15 16:23:32 +09:00
Donny/강동윤
73cab638a1
fix(es/minifier): Preserve unresolved references (#3780)
swc_ecma_minifier:
 - `pure`: Add an optional list of bindings.
 - `pure`: Drop identifier only if we have the complete list of bindings.
 - `pure`: Allow using `GLOBALS`.
 - `pure`: Drop some pure member expressions.
 - Move identifier dropping logic from the stateful optimizer to the pure optimizer.
 - `pure`: Drop more references to global declarations.
2022-02-28 16:31:13 +00:00
Donny/강동윤
73e9185bba
test(es/minifier): Add snapshot testing for the analyzer (#3529) 2022-02-11 18:33:08 +09:00
Donny/강동윤
68e9017376
fix(es/minifier): Improve minifier (#3350)
swc_ecma_transforms_optimization:
 - `expr_simplifier`: Track more changes.

swc_ecma_minifier:
 - Analyze after applying the pure optimizer.
 - Preserve access to a variable not in scope.
 - `compress`: Remove string literal if it was not a directive.
 - `pure/collapse_vars`: Merge vars declared in the first statement into one with initializers if `collapse_vars` and `join_vars` are enabled.
 - `unused`: Use `usage_count` instead of `ref_count`.
 - `unused`: Fix dropping rule for member expressions.
 - `unused`: Fix dropping rule for declarations.
 - `hoist_props`: Preserve exported items.
2022-01-27 15:36:22 +09:00
Donny/강동윤
74fd353053
fix(es/minifier): Fix bugs (#3238)
swc_ecma_minifier:
 - `collapse_vars`: Respect `mutated`. (Closes #2679)
 - Add a test for https://github.com/vercel/next.js/issues/31084.
2022-01-12 16:57:54 +09:00
Donny/강동윤
4a7937d56e
fix(es/minifier): Don't create top level variables (#2985)
swc_ecma_minifier:
 - Add `module` to `TerserCompressorOptions`.
 - Don't create top level variables while inlining if `module` is false.
 - Drop more unused parameters.
2021-12-07 18:02:43 +09:00
David Sherret
beb2c73c2c
fix(swc/hygiene): Prefer not renaming top level variables (#2940)
swc_ecma_transforms_base:
 - `hygiene`: Use concept of depth to prevent renaming top level nodes.
2021-12-04 01:55:27 +09:00
Donny/강동윤
2b2f6955f2
refactor: Flatten ecmascript (#2708) 2021-11-10 19:00:54 +09:00