We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
// original code // (beautified) var _calls_ = 10, a = 100, b = 10, c = 0; { var expr1 = b++; for (var key1 in expr1) { c = 1 + c; var b = expr1[key1]; try { if (--b + a++) { if (void function() { { var expr5 = (c = c + 1) + (typeof f0 == "function" && --_calls_ >= 0 && f0()); for (var [ key5 ] in expr5) { c = 1 + c; var parseInt_1 = expr5[key5]; c = c + 1; } } { var brake7 = 5; while (b && b.NaN && --brake7 > 0) { } } }()) {} else { 0 === 1 ? a : b; } } } catch (Infinity) { { var brake12 = 5; while (a++ + ((c = c + 1) + (typeof Infinity == "function" && --_calls_ >= 0 && Infinity("object", -5)) || a || 3).toString() && --brake12 > 0) { var expr13 = --b + { b: "a", null: typeof Infinity == "function" && --_calls_ >= 0 && Infinity(), a: 25 }; L19501: for (var key13 in expr13) { c = 1 + c; var bar_1 = expr13[key13]; if (typeof f0 == "function" && --_calls_ >= 0 && f0()) { if (/[abc4]/.test(((this && 25) >= [] + "undefined" && (24..toString() == "foo" && this >> -5) || b || 5).toString())) { L19502: for (var brake16 = 5; new function arguments(b_1, arguments, b_2) { this[this] = ("function" << NaN && -5 === "a", (-0 >= /[a2][^e]+$/) / (b_2 && (b_2.a = "bar" > "function"))); this[typeof "object"] += (this !== 24..toString() && "c" === -1) !== "object" >= 1 > (c = c + 1, false); c = 1 + c, -(1 <= "c" | delete 3); }() && brake16 > 0; --brake16) { c = c + 1; } } } } } } c = c + 1; } finally { b++; a++ + (b = (c = c + 1) + (b = --b + (typeof f0 == "function" && --_calls_ >= 0 && f0(a++ + (b + 1 - .1 - .1 - .1), /[a2][^e]+$/, [ (c = c + 1) + (b && typeof b.b == "function" && --_calls_ >= 0 && b.b("foo", "object", {})), b && b[c = 1 + c, (-3 > this) * ("a" / 2) | (b = /[a2][^e]+$/ || -4) + (22 - -4)] ])))); } } } switch (a++ + (b = (c = c + 1) + (function(bar_2, NaN_2, a) { { return b += a; } { var Math; var b_2 = b && b[0 === 1 ? a : b], bar_2_2 = !a; } }() ? a++ + (b && typeof b.in == "function" && --_calls_ >= 0 && b.in(--b + (b && typeof b.b == "function" && --_calls_ >= 0 && b.b()), (c = c + 1) + typeof a, a++ + [ a++, (c = c + 1) + {}.length, b && typeof b.NaN == "function" && --_calls_ >= 0 && b.NaN(), a++ + b-- ])) : [ { "\t": 0 === 1 ? a : b, NaN: typeof b == "function" && --_calls_ >= 0 && b(), "-2": (c = c + 1) + { a: (c = c + 1) + --b, 3: a++, "": --b + a++, 0: --b, a: --b + (1 === 1 ? a : b) }[--b + { c: (c = c + 1) + (typeof b == "unknown"), 0: { NaN: (c = 1 + c, "object" >= 25 != ~-1 | (b && (b.undefined = ("number" ^ "undefined") != (NaN === {})))), foo: (c = 1 + c, (24..toString() || "function") * ("undefined" | "function") * (~true === ("c" !== -5))), b: function() { }, b: b, "": (c = 1 + c, (b && (b[1 === 1 ? a : b] = {} === Infinity != (b && (b[c = 1 + c, (this && true) + (1 > -0) === (b && (b[c = 1 + c, ("number" && 2 || ~23..toString()) <= (undefined * "bar" | + -4)] += 4 / 22)) <= (25 < 1)] += "undefined" << "b")))) / (b = 23..toString() / 5 <= ("a" == 3))) }[c = 1 + c, this % "" * (5 && 4) || (-1 != "foo") * ("undefined" ^ "function")] }[((c = c + 1) + ("bar" in {}) || 1).toString()[/[abc4]/g.exec(((c = 1 + c, ((c = c + 1, NaN) & NaN < [ , 0 ][1]) !== (b && (b.in += ({} ^ "") & Infinity >>> "b"))) || b || 5).toString())]]], b: b, 1.5: NaN }[a++ + (b = a)], b && b.undefined, typeof f1 == "function" && --_calls_ >= 0 && f1() ][typeof f1 == "function" && --_calls_ >= 0 && f1()]))) { case --b + /[abc4]/.test((a++ + ((b && b.length ? (c = c + 1) + delete delete (2 >>> 3 === -2 * 23..toString()) : typeof f0 == "function" && --_calls_ >= 0 && f0(38..toString(), -4, "function")) || a || 3).toString() || b || 5).toString()): { var a_2 = function f0(await_1) { if (--b + { undefined: function(undefined) { { var brake29 = 5; while (a++ + (typeof f1 == "function" && --_calls_ >= 0 && f1(...[ (c = 1 + c, await_1 = (({} | "bar") == (3 || 5)) < (-5 << "undefined" | "undefined" << ([ , 0 ].length === 2))), (c = 1 + c, +((-1 & "a") >> (-4 | 5))) ], (c = 1 + c, (1 != 5) << (2 > ([ , 0 ].length === 2)) != (b && (b[(c = c + 1) + /[abc4]/g.exec(((c = 1 + c, ([] ^ Infinity || (undefined -= -5 == "b")) >>> ("foo" <= NaN >= (-3 <= "undefined"))) || b || 5).toString())] = ("object" || -3) >>> ("foo" >> 1)))), -5)) && --brake29 > 0) { var foo_2 = (c = 1 + c, (c = c + 1, -4) % ("" & 3) >> (24..toString() >>> 4) + "foo" % 24..toString()), arguments_1 = (c = 1 + c, ("function" < 25) << (2 !== 0) >>> (("b" | undefined) << (undefined += -0 != 25))), Math_1 = (c = 1 + c, !(~"b" ^ ([ , 0 ].length === 2) / "number")); } } { return { b: b, foo: (c = 1 + c, "undefined" > -2 | true < 4 || -4 / "bar" && "foo" ^ "c"), ...(c = 1 + c, (("number", -0) && -4 < "undefined") ^ "undefined" >> false <= ("" !== 2)), 0: (c = 1 + c, (-0 > undefined == (1 ^ "object")) >>> 23..toString() / 3 % (-1 % -0)) }; } }, 0: 3 in { [1 === 1 ? a : b]: a++ + await_1 }, a: --b }[b && b[!function() {}()]]) { return b && b[(c = c + 1) + (typeof f0 == "function" && --_calls_ >= 0 && f0("number", typeof f1 == "function" && --_calls_ >= 0 && f1(...[ (c = 1 + c, (NaN, 1) != (23..toString() ^ 2) ^ this != {} === true >= "foo"), (c = 1 + c, (5 === "undefined" !== (true && -4)) << ("object" << 5 && ([ , 0 ].length === 2) >> "a")), (c = 1 + c, (c = c + 1, true >> /[a2][^e]+$/) + (false >>> 23..toString() >= (b = 24..toString() + {}))) ], (c = 1 + c, (0 || "b" || ([ , 0 ].length === 2) >= 3) < (await_1 |= "undefined" >= 5 ^ {} - 1)))))]; } { var brake33 = 5; while (a++ + -b && --brake33 > 0) { (c = c + 1) + (b && b.NaN); } } }((c = c + 1) + ({} in [ (c = c + 1) + (b + 1 - .1 - .1 - .1), [ b && (b[a++ + (b && typeof b.in == "function" && --_calls_ >= 0 && b.in([], (c = 1 + c, (38..toString() < Infinity != (23..toString() & -2)) / ("b" + -3 != (a_2 && (a_2.a += -1 === 3)))), (c = 1 + c, a_2 += (a_2 = (-0 == 22) / (b += {} || -0)) * ("function" * "bar" << ("foo" === true)))))] += (22 < 38..toString() ^ 1 !== []) + (22 / 5 >= "foo" * NaN)) ] ])); } break; default: case (c = c + 1) + (typeof f1 == "function" && --_calls_ >= 0 && f1()): a++ + (b && b.length); try { {} } catch (b_2) { c = c + 1; var a_2; } finally { c = c + 1; { var brake41 = 5; L19503: do { var await_2 = (c = c + 1) + (false in { get "\t"() { c = 1 + c, (c = c + 1, 2) - (NaN == -2) || 5 - 4 ^ "a" - 4; { return c = 1 + c, (a_2 += ~-2 | "foo" != -5) <= ("c" != "bar") * (false ^ {}); } }, b: { undefined: (c = 1 + c, (c = c + 1, /[a2][^e]+$/ == -3) && (-3 && [ , 0 ][1]) >= (a_2 && (a_2.foo >>= 38..toString() + 25))), a: (c = 1 + c, a_2 = (25 > "undefined") - (/[a2][^e]+$/ - -3) & ("b" << null && (undefined || 5))), [(c = 1 + c, (b && (b[[ (c = 1 + c, ("undefined" === NaN ^ (null || 5)) >> (Infinity > 4 ^ 1 >> {})) ]] += 25 * Infinity >> (a_2 && (a_2[c = 1 + c, ("number" !== "number") / ("object" - this) >> (23..toString() != 2) + (3 ^ null)] += undefined ^ "")))) + 1 % 23..toString() / (-3 / ([ , 0 ].length === 2)))]: (c = 1 + c, (0 - "" ^ (Infinity || 38..toString())) <= ((24..toString() && 3) ^ -4 <= undefined)), undefined: (c = 1 + c, ("b" !== 23..toString()) * (Infinity || 3) <= (- -3 != (a_2 && (a_2.null /= 1 && 23..toString())))), var: (c = 1 + c, (a_2 && (a_2[c = 1 + c, a_2 && (a_2.NaN |= ("undefined" <= "number") + (b && (b[c = 1 + c, {} >> "function" ^ (c = c + 1, Infinity), 0 + /[a2][^e]+$/, /[a2][^e]+$/ >= -3] = [] % {})) | ("bar" || -3) ^ (null ^ [ , 0 ][1]))] = 4 && 23..toString())) === [] >= -1 ^ (1 < -1) << /[a2][^e]+$/ / []) }[c = 1 + c, ((3 && -5) ^ -5 + 3) >> (("object" ^ [ , 0 ].length === 2) !== 3 >>> -1)], "-2": b += a } || a || 3).toString(), a_1 = a++ + (b |= a); } while (--b + (a_1 && a_1[delete -(b && (b.var += ([ , 0 ][1] !== -2, -0 >>> -2)))]) && --brake41 > 0); } } break; case function arguments(Math_2, b_1) { { var brake45 = 5; do { { var a_2 = function f1(b) { var Infinity_2 = a++ + (b && typeof b.b == "function" && --_calls_ >= 0 && b.b("undefined", ...[], 2)), a_1 = [ a++ + { undefined: (c = 1 + c, (a_2 && (a_2[a++ + ((c = 1 + c, void (b && (b.foo = -1 * -3)) >>> ("number" << [ , 0 ][1] != (b_1 && (b_1[c = 1 + c, (2 - "bar" || [ , 0 ][1] <= {}) != ((b = ([ , 0 ][1], null)) == "foo" << 25)] = "foo" && -4)))) || 0).toString()[c = 1 + c, ((c = c + 1, 4) || true ^ -2) !== (arguments && (arguments.foo *= -4 % false), -0 << 22)]] = ([ , 0 ].length === 2) * 38..toString() == ({} ^ 1))) % (38..toString() >= undefined, "function" << "object")), "-2": (c = 1 + c, ((b_1 && ([ b_1[c = 1 + c, (false * -1 != "a" <= 25) >>> ((2, 38..toString()) << (b_1 && (b_1[c = 1 + c, ("object" ^ -4) >> (b && (b[c = 1 + c, (a_2 && ([ a_2.c ] = [ (5 & 3, true < -3) ])) + (b_1 && (b_1.NaN ^= (true >= "b") - (c = c + 1, -0)))] = "number" <= 5)) | 23..toString() !== "bar" & Infinity / "bar"] /= "undefined" == -0)))] ] = [ "object" * 38..toString() ])) < (3 | NaN)) % (-4 === -1 ^ (Infinity ^ -4))), [(c = 1 + c, (b += [ , 0 ][1] - undefined !== 1 >= "function") == ([ , 0 ][1] & undefined ^ "undefined" % 5))]: (c = 1 + c, (c = c + 1, 25 > false) < (c = c + 1, "bar" >>> -5)), 0: (c = 1 + c, (c = c + 1, "number", "function" != "undefined") >>> ("bar" > 23..toString() | ("undefined", 25))), var: (c = 1 + c, ([ , 0 ][1] | 2) % (b_1 && (b_1[c = 1 + c, b && (b.NaN += (5 / "foo" + (arguments && (arguments[c = 1 + c, (false <= 25 && (b = 22 < null)) ^ 24..toString() * false & 23..toString() !== -4] = [ , 0 ].length === 2 != /[a2][^e]+$/))) / (a_1 += "object" == -1 !== (-3 ^ -2)))] = Infinity && [ , 0 ].length === 2)) === (-0 - [ , 0 ][1] || NaN / Infinity)) }, (c = c + 1) + !a, 25 ]; { return a++; } }(..."" + a_2, a++ + (b && typeof b.in == "function" && --_calls_ >= 0 && b.in())); } } while ({ 3: typeof foo_2, length: --b + ((("c" && /[a2][^e]+$/) ^ "foo" > "b") & (c = c + 1, NaN) * (true <= 23..toString())) } && --brake45 > 0); } { var expr49 = b + 1 - .1 - .1 - .1; L19504: for (var key49 in expr49) { c = 1 + c; var Math = expr49[key49]; { var brake50 = 5; while (a++ + ~((b && (b.c += /[a2][^e]+$/ < 38..toString())) & (b = (null, "number")) & (arguments *= void /[a2][^e]+$/ + ([ , 0 ].length === 2) / "")) && --brake50 > 0) { var b_2; } } } } }: { var expr52 = b + 1 - .1 - .1 - .1; for (var key52 in expr52) { c = c + 1; } } break; } console.log(null, a, b, c, Infinity, NaN, undefined);
// uglified code // (beautified) var key1, _calls_ = 10, a = 100, b = 10, c = 0, expr1 = b++; for (key1 in expr1) { c = 1 + c, b = expr1[key1]; try { --b + a++ && function() { var a; for ([ a ] in (c += 1) + ("function" == typeof f0 && 0 <= --_calls_ && f0())) { c = 1 + c, c += 1; } for (var n = 5; b && b.NaN && 0 < --n; ) {} }(); } catch (n) { for (var brake12 = 5; a++ + ("" + ((c += 1) + ("function" == typeof n && 0 <= --_calls_ && n("object", -5)) || a || 3)) && 0 < --brake12; ) { var key13, expr13 = --b + { b: "a", null: "function" == typeof n && 0 <= --_calls_ && n(), a: 25 }; for (key13 in expr13) { c = 1 + c; var bar_1 = expr13[key13]; if ("function" == typeof f0 && 0 <= --_calls_ && f0() && /[abc4]/.test("" + (b || 5))) { for (var brake16 = 5; new function(a, arguments, b) { this[this] = NaN, this.string += ("24" !== this && !1) != (c += 1, !1), c = 1 + c; }() && 0 < brake16; --brake16) { c += 1; } } } } c += 1; } finally { b++, a++, b = (c += 1) + (b = --b + ("function" == typeof f0 && 0 <= --_calls_ && f0(a++ + (b + 1 - .3), /[a2][^e]+$/, [ (c += 1) + (b && "function" == typeof b.b && 0 <= --_calls_ && b.b("foo", "object", {})), b && b[c = 1 + c, NaN * (this < -3) | (b = /[a2][^e]+$/) + 26] ]))); } } switch (a++ + (b = (c += 1) + (b + void 0 ? a++ + (b && "function" == typeof b.in && 0 <= --_calls_ && b.in(--b + (b && "function" == typeof b.b && 0 <= --_calls_ && b.b()), (c += 1) + typeof a, a++ + [ a++, (c += 1) + {}.length, b && "function" == typeof b.NaN && 0 <= --_calls_ && b.NaN(), a++ + b-- ])) : [ { "\t": b, NaN: "function" == typeof b && 0 <= --_calls_ && b(), "-2": (c += 1) + { a: (c += 1) + --b, 3: a++, "": --b + a++, 0: --b, a: --b + a }[--b + { c: (c += 1) + ("unknown" == typeof b), 0: { NaN: (c = 1 + c, !1 | (b && (b.undefined = !1))), foo: 0, b: b, "": (c = 1 + (1 + c), (b && (b[a] = 0 != (b && (b[c = 1 + c, (this && !0) + !0 === (b && (b[c = 1 + c, !1] += 4 / 22)) <= !1] += 0)))) / (b = !1)) }[c = 1 + c, this % "" * 4 || 0] }[("" + ((c += 1) + ("bar" in {}) || 1))[/[abc4]/g.exec((c = 1 + c, "" + ((!1 & (c += 1, NaN)) !== (b && (b.in += 0)) || b || 5)))]]], b: b, 1.5: NaN }[a++ + (b = a)], b && b.undefined, "function" == typeof f1 && 0 <= --_calls_ && f1() ]["function" == typeof f1 && 0 <= --_calls_ && f1()]))) { case --b + /[abc4]/.test("" + (a++ + ("" + ((b && b.length ? (c += 1) + !0 : "function" == typeof f0 && 0 <= --_calls_ && f0("38", -4, "function")) || a || 3)) || b || 5)): var a_2 = function n(f) { if (--b + { undefined: function(n) { for (var e = 5; a++ + ("function" == typeof f1 && 0 <= --_calls_ && f1(f = !1 < (-5 | "undefined" << (2 === [ , 0 ].length)), 0, (c = 1 + (1 + (1 + c)), !0 << ((2 === [ , 0 ].length) < 2) != (b && (b[(c += 1) + /[abc4]/g.exec((c = 1 + c, "" + ((n -= !1) >>> !0 || b || 5)))] = 0))), -5)) && 0 < --e; ) { n += !0, c = 1 + (1 + ((c = 1 + c) + 1)); } return { b: b, foo: 1, ...(c = 1 + (1 + c), 1), 0: (c = 1 + c, (n < -0 == 1) >>> NaN) }; }, 0: 3 in { [a]: a++ + f }, a: --b }[b && b[!0]]) { return b && b[(c += 1) + (0 <= --_calls_ && n("number", "function" == typeof f1 && 0 <= --_calls_ && f1(!0 ^ this != {} == 0, 1, 1 + ((b = "24" + {}) <= 0), (c = 1 + ((c = 1 + (1 + (1 + c))) + 1), "b" < (f |= 0)))))]; } for (var e = 5; a++ - b && 0 < --e; ) { c += 1, b && b.NaN; } }((c += 1) + ({} in [ (c += 1) + (b + 1 - .3), [ b && (b[a++ + (b && "function" == typeof b.in && 0 <= --_calls_ && b.in([], (c = 1 + c, !0 / ("b-3" != (a_2 && (a_2.a += !1)))), (c = 1 + c, a_2 += !1 / (b += {}) * 0)))] += 0) ] ])); break; default: case (c += 1) + ("function" == typeof f1 && 0 <= --_calls_ && f1()): a++, b && b.length, c += 1; var brake41 = 5; do { var await_2 = (c += 1) + ("" + (!1 in { get "\t"() { return c = 1 + ((c = 1 + c) + 1), (a_2 += 1) <= 0; }, b: { undefined: !1, a: a_2 = 0, [(c = 1 + (1 + ((c = 1 + c) + 1)), (b && (b[[ (c = 1 + c, 5) ]] += 1 / 0 >> (a_2 && (a_2[c = 1 + c, !1 / ("object" - this) >> 4] += 0)))) + 1 / -3 * (2 === [ , 0 ].length))]: !0, undefined: (c = 1 + (1 + c), 1 / 0 <= (3 != (a_2 && (a_2.null /= "23")))), var: (c = 1 + c, !0 === (a_2 && (a_2[c = 1 + c, a_2 && (a_2.NaN |= !1 + (b && (b[c = 1 + c, c += 1, !1] = NaN)) | 0)] = "23")) ^ 0) }[c = 1 + c, 5 >> (0 != ("object" ^ 2 === [ , 0 ].length))], "-2": b += a } || a || 3)), a_1 = a++ + (b |= a); } while (--b + (a_1 && a_1[b && (b.var += 0), !0]) && 0 < --brake41); break; case function(n, e) { var f, t = 5; do { var o = function(b) { a++, b && "function" == typeof b.b && 0 <= --_calls_ && b.b("undefined", 2); var n = [ a++ + { undefined: (c = 1 + c, (o && (o[a++ + (c = 1 + c, ("" + (void (b && (b.foo = 3)) >>> (0 != (e && (e[c = 1 + c, 0 != (0 == (b = null))] = -4))) || 0))[c = 1 + c, c += 1, 4 != (arguments && (arguments.foo *= NaN), 0)])] = "38" * (2 === [ , 0 ].length) == 1)) % 0), "-2": (c = 1 + c, ((e && ([ e[c = 1 + c, !1 >>> ("38" << (e && (e[c = 1 + c, -4 >> (b && (b[c = 1 + c, (o && ([ o.c ] = [ !1 ])) + (e && (e.NaN ^= !1 - (c += 1, -0)))] = !1)) | 0] /= !1)))] ] = [ NaN ])) < 3) % -4), [0 == (b += !0)]: (c = 1 + (1 + c), !1), 0: 0, var: (c = 1 + ((c = 1 + ((c += 1) + 1)) + 1), 2 % (e && (e[c = 1 + c, b && (b.NaN += (NaN + (arguments && (arguments[c = 1 + c, 0 ^ (b = !1)] = 2 === [ , 0 ].length != /[a2][^e]+$/))) / (n += !0))] = 2 === [ , 0 ].length)) === NaN) }, (c += 1) + !a, 25 ]; return a++; }(..."" + o, a++ + (b && "function" == typeof b.in && 0 <= --_calls_ && b.in())); } while (--b, c += 1, 0 < --t); for (f in b + 1 - .3) { c = 1 + c; for (var i = 5; a++ + ~((b && (b.c += !0)) & (b = "number") & (arguments *= void 0 + (2 === [ , 0 ].length) / "")) && 0 < --i; ) {} } }: var key52, expr52 = b + 1 - .3; for (key52 in expr52) { c += 1; } } console.log(null, a, b, c, 1 / 0, NaN, void 0);
original result: null 107 106 22 Infinity NaN undefined uglified result: null 107 106 24 Infinity NaN undefined
// reduced test case (output will differ) // (beautified) var b = 0; b = function(a) { return b += a; }() ? 0 : b; console.log(b); // output: NaN // // minify: 0 // // options: { // "compress": { // "passes": 1000000, // "sequences": 1000000, // "unsafe": true, // "unsafe_Function": true, // "unsafe_math": true, // "unsafe_proto": true, // "unsafe_regexp": true // }, // "mangle": { // "v8": true // }, // "output": { // "v8": true // }, // "validate": true // }
minify(options): { "compress": { "passes": 1000000, "sequences": 1000000, "unsafe": true, "unsafe_Function": true, "unsafe_math": true, "unsafe_proto": true, "unsafe_regexp": true }, "mangle": { "v8": true }, "output": { "v8": true } } Suspicious compress options: dead_code inline passes unused
The text was updated successfully, but these errors were encountered:
fix corner case in dead_code
dead_code
0bc311c
fixes mishoo#4570
fix corner case in dead_code (#4571)
90ec468
fixes #4570
Successfully merging a pull request may close this issue.
The text was updated successfully, but these errors were encountered: