diff --git a/crates/swc/tests/fixture/issues-8xxx/8880/input/.swcrc b/crates/swc/tests/fixture/issues-8xxx/8880/input/.swcrc new file mode 100644 index 000000000000..955056496e52 --- /dev/null +++ b/crates/swc/tests/fixture/issues-8xxx/8880/input/.swcrc @@ -0,0 +1,70 @@ +{ + "jsc": { + "externalHelpers": true, + "parser": { + "syntax": "typescript", + "tsx": false + }, + "transform": { + "legacyDecorator": true, + }, + "target": "es2017", + "loose": false, + "minify": { + "compress": { + "arguments": false, + "arrows": true, + "booleans": false, + "booleans_as_integers": false, + "collapse_vars": true, + "comparisons": true, + "computed_props": true, + "conditionals": true, + "dead_code": true, + "directives": true, + "drop_console": false, + "drop_debugger": true, + "evaluate": true, + "expression": false, + "hoist_funs": false, + "hoist_props": true, + "hoist_vars": false, + "if_return": true, + "join_vars": false, + "keep_classnames": false, + "keep_fargs": true, + "keep_fnames": false, + "keep_infinity": false, + "loops": false, + "negate_iife": false, + "properties": false, + "reduce_funcs": false, + "reduce_vars": false, + "side_effects": true, + "switches": false, + "typeofs": false, + "unsafe": false, + "unsafe_arrows": false, + "unsafe_comps": false, + "unsafe_Function": false, + "unsafe_math": false, + "unsafe_symbols": false, + "unsafe_methods": false, + "unsafe_proto": false, + "unsafe_regexp": false, + "unsafe_undefined": false, + "unused": false, + "const_to_let": false, + "pristine_globals": true, + "sequences": false, + "passes": 2, + }, + "mangle": false + } + }, + "module": { + "type": "es6" + }, + "minify": false, + "isModule": true +} \ No newline at end of file diff --git a/crates/swc/tests/fixture/issues-8xxx/8880/input/1.js b/crates/swc/tests/fixture/issues-8xxx/8880/input/1.js new file mode 100644 index 000000000000..6334b140674b --- /dev/null +++ b/crates/swc/tests/fixture/issues-8xxx/8880/input/1.js @@ -0,0 +1,70 @@ +function a(module, exports, farmRequire, farmDynamicRequire) { + "use strict"; + Object.defineProperty(exports, "__esModule", { + value: true + }); + const _interop_require_default = farmRequire("@swc/helpers/_/_interop_require_default"); + const _typeof = _interop_require_default._(farmRequire("8178b9bd")); + const _dep734fea04 = farmRequire("92648bed"); + const _dayjs = _interop_require_default._(farmRequire("d0dc4dad")); + farmRequire("15d5169f"); + var zhCn = (0, _dep734fea04.c)(function (module, exports) { + !function (e__1, _) { + "object" == 'object' && "undefined" != 'object' ? module.exports = _(_dayjs.default) : "function" == typeof undefined && undefined.amd ? undefined([ + "dayjs" + ], _) : (e__1 = "undefined" != typeof globalThis ? globalThis : e__1 || self).dayjs_locale_zh_cn = _(e__1.dayjs); + }(_dep734fea04.a, function (e__2) { + "use strict"; + function _(e__3) { + return e__3 && "object" == (0, _typeof.default)(e__3) && "default" in e__3 ? e__3 : { + "default": e__3 + }; + } + var t = _(e__2), d = { + name: "zh-cn", + weekdays: "星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"), + weekdaysShort: "周日_周一_周二_周三_周四_周五_周六".split("_"), + weekdaysMin: "日_一_二_三_四_五_六".split("_"), + months: "一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"), + monthsShort: "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"), + ordinal: function ordinal(e, _) { + return "W" === _ ? e + "周" : e + "日"; + }, + weekStart: 1, + yearStart: 4, + formats: { + LT: "HH:mm", + LTS: "HH:mm:ss", + L: "YYYY/MM/DD", + LL: "YYYY年M月D日", + LLL: "YYYY年M月D日Ah点mm分", + LLLL: "YYYY年M月D日ddddAh点mm分", + l: "YYYY/M/D", + ll: "YYYY年M月D日", + lll: "YYYY年M月D日 HH:mm", + llll: "YYYY年M月D日dddd HH:mm" + }, + relativeTime: { + future: "%s内", + past: "%s前", + s: "几秒", + m: "1 分钟", + mm: "%d 分钟", + h: "1 小时", + hh: "%d 小时", + d: "1 天", + dd: "%d 天", + M: "1 个月", + MM: "%d 个月", + y: "1 年", + yy: "%d 年" + }, + meridiem: function meridiem(e, _) { + var t = 100 * e + _; + return t < 600 ? "凌晨" : t < 900 ? "早上" : t < 1100 ? "上午" : t < 1300 ? "中午" : t < 1800 ? "下午" : "晚上"; + } + }; + return t["default"].locale(d, null, !0), d; + }); + }); +} \ No newline at end of file diff --git a/crates/swc/tests/fixture/issues-8xxx/8880/output/1.js b/crates/swc/tests/fixture/issues-8xxx/8880/output/1.js new file mode 100644 index 000000000000..ef8dd67b91ca --- /dev/null +++ b/crates/swc/tests/fixture/issues-8xxx/8880/output/1.js @@ -0,0 +1,63 @@ +function a(module, exports, farmRequire, farmDynamicRequire) { + Object.defineProperty(exports, "__esModule", { + value: true + }); + const _interop_require_default = farmRequire("@swc/helpers/_/_interop_require_default"); + const _typeof = _interop_require_default._(farmRequire("8178b9bd")); + const _dep734fea04 = farmRequire("92648bed"); + const _dayjs = _interop_require_default._(farmRequire("d0dc4dad")); + farmRequire("15d5169f"); + (0, _dep734fea04.c)(function(module, exports) { + var e__1, _; + e__1 = _dep734fea04.a, _ = function(e__2) { + var e__3; + var t = e__2 && "object" == (0, _typeof.default)(e__2) && "default" in e__2 ? e__2 : { + default: e__2 + }, d = { + name: "zh-cn", + weekdays: "星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"), + weekdaysShort: "周日_周一_周二_周三_周四_周五_周六".split("_"), + weekdaysMin: "日_一_二_三_四_五_六".split("_"), + months: "一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"), + monthsShort: "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"), + ordinal: function ordinal(e, _) { + return "W" === _ ? e + "周" : e + "日"; + }, + weekStart: 1, + yearStart: 4, + formats: { + LT: "HH:mm", + LTS: "HH:mm:ss", + L: "YYYY/MM/DD", + LL: "YYYY年M月D日", + LLL: "YYYY年M月D日Ah点mm分", + LLLL: "YYYY年M月D日ddddAh点mm分", + l: "YYYY/M/D", + ll: "YYYY年M月D日", + lll: "YYYY年M月D日 HH:mm", + llll: "YYYY年M月D日dddd HH:mm" + }, + relativeTime: { + future: "%s内", + past: "%s前", + s: "几秒", + m: "1 分钟", + mm: "%d 分钟", + h: "1 小时", + hh: "%d 小时", + d: "1 天", + dd: "%d 天", + M: "1 个月", + MM: "%d 个月", + y: "1 年", + yy: "%d 年" + }, + meridiem: function meridiem(e, _) { + var t = 100 * e + _; + return t < 600 ? "凌晨" : t < 900 ? "早上" : t < 1100 ? "上午" : t < 1300 ? "中午" : t < 1800 ? "下午" : "晚上"; + } + }; + return t["default"].locale(d, null, !0), d; + }, module.exports = _(_dayjs.default); + }); +} diff --git a/crates/swc_ecma_minifier/src/compress/optimize/iife.rs b/crates/swc_ecma_minifier/src/compress/optimize/iife.rs index dbd232304031..fdc82e11237e 100644 --- a/crates/swc_ecma_minifier/src/compress/optimize/iife.rs +++ b/crates/swc_ecma_minifier/src/compress/optimize/iife.rs @@ -655,7 +655,7 @@ impl Optimizer<'_> { let new = self.inline_fn_like(¶m_ids, body, &mut call.args); if let Some(new) = new { self.changed = true; - report_change!("inline: Inlining a function call"); + report_change!("inline: Inlining a function call (params = {param_ids:?})"); dump_change_detail!("{}", dump(&new, false)); @@ -849,7 +849,7 @@ impl Optimizer<'_> { let no_arg = arg.is_none(); if let Some(arg) = arg { - if let Some(usage) = self.data.vars.get(¶ms[idx].to_id()) { + if let Some(usage) = self.data.vars.get_mut(¶ms[idx].to_id()) { if usage.ref_count == 1 && !usage.reassigned && usage.property_mutation_count == 0 @@ -864,6 +864,8 @@ impl Optimizer<'_> { self.vars.vars_for_inlining.insert(param.to_id(), arg); continue; } + + usage.ref_count += 1; } exprs.push( diff --git a/crates/swc_ecma_minifier/tests/fixture/issues/8880/1/input.js b/crates/swc_ecma_minifier/tests/fixture/issues/8880/1/input.js new file mode 100644 index 000000000000..96d8ac0659fd --- /dev/null +++ b/crates/swc_ecma_minifier/tests/fixture/issues/8880/1/input.js @@ -0,0 +1,70 @@ +export function a(module, exports, farmRequire, farmDynamicRequire) { + "use strict"; + Object.defineProperty(exports, "__esModule", { + value: true + }); + const _interop_require_default = farmRequire("@swc/helpers/_/_interop_require_default"); + const _typeof = _interop_require_default._(farmRequire("8178b9bd")); + const _dep734fea04 = farmRequire("92648bed"); + const _dayjs = _interop_require_default._(farmRequire("d0dc4dad")); + farmRequire("15d5169f"); + var zhCn = (0, _dep734fea04.c)(function (module, exports) { + !function (e, _) { + module.exports = _(_dayjs.default); + }(_dep734fea04.a, function (e) { + "use strict"; + function _(e) { + return e && "object" == (0, _typeof.default)(e) && "default" in e ? e : { + default: e + }; + } + var t = _(e), d = { + name: "zh-cn", + weekdays: "星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"), + weekdaysShort: "周日_周一_周二_周三_周四_周五_周六".split("_"), + weekdaysMin: "日_一_二_三_四_五_六".split("_"), + months: "一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"), + monthsShort: "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"), + ordinal: function ordinal(e, _) { + return "W" === _ ? e + "周" : e + "日"; + }, + weekStart: 1, + yearStart: 4, + formats: { + LT: "HH:mm", + LTS: "HH:mm:ss", + L: "YYYY/MM/DD", + LL: "YYYY年M月D日", + LLL: "YYYY年M月D日Ah点mm分", + LLLL: "YYYY年M月D日ddddAh点mm分", + l: "YYYY/M/D", + ll: "YYYY年M月D日", + lll: "YYYY年M月D日 HH:mm", + llll: "YYYY年M月D日dddd HH:mm" + }, + relativeTime: { + future: "%s内", + past: "%s前", + s: "几秒", + m: "1 分钟", + mm: "%d 分钟", + h: "1 小时", + hh: "%d 小时", + d: "1 天", + dd: "%d 天", + M: "1 个月", + MM: "%d 个月", + y: "1 年", + yy: "%d 年" + }, + meridiem: function meridiem(e, _) { + var t = 100 * e + _; + return t < 600 ? "凌晨" : t < 900 ? "早上" : t < 1100 ? "上午" : t < 1300 ? "中午" : t < 1800 ? "下午" : "晚上"; + } + }; + return t.default.locale(d, null, !0), d; + }); + }); + + return zhCn +} diff --git a/crates/swc_ecma_minifier/tests/fixture/issues/8880/1/output.js b/crates/swc_ecma_minifier/tests/fixture/issues/8880/1/output.js new file mode 100644 index 000000000000..9865ce0a556c --- /dev/null +++ b/crates/swc_ecma_minifier/tests/fixture/issues/8880/1/output.js @@ -0,0 +1,59 @@ +export function a(module, exports, farmRequire, farmDynamicRequire) { + "use strict"; + Object.defineProperty(exports, "__esModule", { + value: !0 + }); + const _interop_require_default = farmRequire("@swc/helpers/_/_interop_require_default"), _typeof = _interop_require_default._(farmRequire("8178b9bd")), _dep734fea04 = farmRequire("92648bed"), _dayjs = _interop_require_default._(farmRequire("d0dc4dad")); + return farmRequire("15d5169f"), (0, _dep734fea04.c)(function(module, exports) { + var _; + _dep734fea04.a, _ = function(e) { + var t = e && "object" == (0, _typeof.default)(e) && "default" in e ? e : { + default: e + }, d = { + name: "zh-cn", + weekdays: "星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"), + weekdaysShort: "周日_周一_周二_周三_周四_周五_周六".split("_"), + weekdaysMin: "日_一_二_三_四_五_六".split("_"), + months: "一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"), + monthsShort: "1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"), + ordinal: function(e, _) { + return "W" === _ ? e + "周" : e + "日"; + }, + weekStart: 1, + yearStart: 4, + formats: { + LT: "HH:mm", + LTS: "HH:mm:ss", + L: "YYYY/MM/DD", + LL: "YYYY年M月D日", + LLL: "YYYY年M月D日Ah点mm分", + LLLL: "YYYY年M月D日ddddAh点mm分", + l: "YYYY/M/D", + ll: "YYYY年M月D日", + lll: "YYYY年M月D日 HH:mm", + llll: "YYYY年M月D日dddd HH:mm" + }, + relativeTime: { + future: "%s内", + past: "%s前", + s: "几秒", + m: "1 分钟", + mm: "%d 分钟", + h: "1 小时", + hh: "%d 小时", + d: "1 天", + dd: "%d 天", + M: "1 个月", + MM: "%d 个月", + y: "1 年", + yy: "%d 年" + }, + meridiem: function(e, _) { + var t = 100 * e + _; + return t < 600 ? "凌晨" : t < 900 ? "早上" : t < 1100 ? "上午" : t < 1300 ? "中午" : t < 1800 ? "下午" : "晚上"; + } + }; + return t.default.locale(d, null, !0), d; + }, module.exports = _(_dayjs.default); + }); +}