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; function f0(NaN_1, b_2) { { var Math_1 = function f1(foo_2, b_1) { }(); } { var expr4 = ++a; L21442: for (var key4 in expr4) { c = 1 + c; var b_2 = expr4[key4]; if (((-0 == "c") >>> (-4 != true)) + ([] <= -3 | (/[a2][^e]+$/ && -5))) { switch (a++ + typeof (--b + (b_2 && b_2[typeof f0 == "function" && --_calls_ >= 0 && f0(a++ + (typeof b_1 === "string"), --b + (typeof Math_1 == "function" && --_calls_ >= 0 && Math_1((c = 1 + c, (c = c + 1, -4 * false) + delete (-4 / -0)), (c = 1 + c, (true << -5 && {} >>> "bar") / (b_2 += ("function" || null) + (0 - false))))))]))) { case !b: break; default: try { { c = c + 1; { var b_1 = function b_2(foo_2, a_2) { }((c = 1 + c, ("c" ^ -0) >= (b_2 && (b_2.a = -3 % ([ , 0 ].length === 2))) < (1 === 4) >>> -"function"), (c = 1 + c, b_2 && (b_2.var = ([ , 0 ].length === 2 | NaN) / (23..toString() ^ []) << ((-2, Infinity) ^ (NaN, "undefined"))))); } try { L21443: for (var brake12 = 5; (c = 1 + c, ("" & [ , 0 ][1], c = c + 1, [ , 0 ].length === 2) || 24..toString() << -3 && (b_1 -= -0 && Infinity)) && brake12 > 0; --brake12) { c = 1 + c, this === 23..toString() !== /[a2][^e]+$/ >>> -1 != (c = c + 1, 2 ^ "foo"); } } catch (c_2) { c = 1 + c, (("b", true) | -2 ^ NaN) === (22 ^ "c") % (c = c + 1, this); c = 1 + c, c = c + 1, Math_1 && (Math_1.c += false === "b" ^ false != "number"); } finally { c = 1 + c, ("c" == {} == Infinity * /[a2][^e]+$/) << ([ , 0 ][1] === undefined) % ("object" || this); c = 1 + c, c = c + 1, c = c + 1, -5 != 23..toString(); } { var expr18 = --b + {}; for (var key18 in expr18) { c = 1 + c; var a = expr18[key18]; { throw c = 1 + c, -2 !== "b" & (this && -3) ^ (this > "c" ^ 3 != undefined); } } } } } catch (b_2) { { var brake20 = 5; while ({ null: (c = 1 + c, (b_2 && (b_2.NaN += (undefined == true) / (b_2 = 2 | 24..toString()))) >> ((c = c + 1, -0) ^ "object" < this)), b: (c = 1 + c, (23..toString() << 2) % (-4 === 22) | ([ , 0 ].length === 2) >> [ , 0 ][1] <= (c = c + 1, "bar")), Infinity: (c = 1 + c, (5 != -4) > (-1 & -5) | ("foo" % [ , 0 ][1] | -5 & 24..toString())), 3: (c = 1 + c, (-4 >> -4) / ([] >= 3) && 22 / false + (undefined - "b")) }[--b + (typeof b_2_1 == "symbol")] && --brake20 > 0) {} } c = c + 1; } finally { { var brake23 = 5; do { { var brake24 = 5; do { { var brake25 = 5; L21444: do { c = 1 + c, (undefined / 1 != (Math_1 && (Math_1[c = 1 + c, delete ([] <= 38..toString() >= ("foo" | {}))] <<= 38..toString() || 5))) * (23..toString() >= 1 != false >> 5); } while ((c = 1 + c, !(+ -0 != [] >>> {})) && --brake25 > 0); } } while (typeof foo_1 != "object" && --brake24 > 0); } } while ({ in: (c = 1 + c, -5 + "number" << Infinity * this !== (3 << this & "foo" << -0)), Infinity: (c = 1 + c, (NaN ^ "undefined") + ("number" - -1) ^ ("" & Infinity) == (null ^ -4)) }[(c = c + 1) + !((38..toString() >= "number" <= null >> "number") + (Math_1 && (Math_1[--b + a++] %= -4 + undefined > (-4 == 24..toString()))))] && --brake23 > 0); } for (var brake27 = 5; [] && brake27 > 0; --brake27) { var brake28 = 5; do { c = c + 1; } while (--b + ((c = 1 + c, (4 == "number") / (2 == true) > (25 != 24..toString()) >>> ("function" >>> ([ , 0 ].length === 2))) || a || 3).toString() && --brake28 > 0); } } case b_2 && b_2[(c = c + 1) + (typeof f3 == "function" && --_calls_ >= 0 && f3(a++ + ((c = c + 1) + ~b), -5, a++ + (0 === 1 ? a : b)))]: { var a_1 = function f2() { { var expr31 = -(-5 * "undefined" + "" % "bar" === ("b" & "undefined") - (-4 & 0)); for (var key31 in expr31) { { return; c = 1 + c, (b_1 = 24..toString() > true) - ("bar" > "foo") & [] * /[a2][^e]+$/ >> (null > Infinity); } } } if (a++) { c = c + 1; } }(NaN_1, []); } break; case (c = c + 1) + (typeof Math_1 == "function" && --_calls_ >= 0 && Math_1()): { var brake35 = 5; L21445: do { } while (a++ + Math_1 && --brake35 > 0); } return NaN_1; } } else { try { switch (typeof Math_1 == "function" && --_calls_ >= 0 && Math_1()) { case (c = c + 1) + (1 === 1 ? a : b): for (var brake40 = 5; --b + (a++ + !function() {}()) && brake40 > 0; --brake40) { L21446: for (var brake41 = 5; --b + (typeof Math_1 == "function" && --_calls_ >= 0 && Math_1((c = 1 + c, (b_2 && (b_2[b = a] = 5 >>> NaN ^ 24..toString() == NaN)) < (0 <= 23..toString(), "number" && 4)), 4)) && brake41 > 0; --brake41) {} } { var brake43 = 5; L21447: do { switch (a++ + a--) { case (c = c + 1) + (typeof f4 == "function" && --_calls_ >= 0 && f4((c = 1 + c, (c = c + 1, [ , 0 ][1] && "number") == (25 << 24..toString()) + ("object" >>> ([ , 0 ].length === 2))), (c = 1 + c, ({} !== [] ^ "object" != 1) >> ((23..toString() == ([ , 0 ].length === 2)) >>> 38..toString() % 5)))): c = c + 1; { var brake46 = 5; while ((c = 1 + c, ("bar" >> true) + (2 || 4) != (false % 5 ^ 2 !== -3)) && --brake46 > 0) { c = 1 + c, c = c + 1, "undefined" & 24..toString() || -0 * "function"; } } break; case b + 1 - .1 - .1 - .1: { var brake48 = 5; L21448: do { c = 1 + c, (5 >= -1) - (25 === "number") > (undefined - 25 === "" << 1); } while ((c = 1 + c, ("b" >> 38..toString() >= (-2 != -0)) >>> ((b_2 += 22 <= 0) === (3 !== 0))) && --brake48 > 0); } break; default: switch (c = 1 + c, 38..toString() / "c" % (true <= 5) & 2 % "undefined" / ([ , 0 ][1] * "foo")) { default: ; case c = 1 + c, b_1 = (Infinity || "foo") >>> (-3 === 25) === ((-1 & 1) !== (b_2 && (b_2.in = "c" || this))): ; break; case c = 1 + c, (-5 ^ []) + (c = c + 1, "number") >>> (24..toString() < null) - (Infinity > {}): ; case c = 1 + c, (c = c + 1, -4 ^ -3) == ((c = c + 1, -2) === (NaN_1 && (NaN_1[c = 1 + c, -(1 && 2) <= (false | -0) << "c" + -3] += /[a2][^e]+$/ && 5))): ; break; } if (c = 1 + c, -5 * 1 >= (2 | /[a2][^e]+$/) < ((b_2 && (b_2[c = 1 + c, (24..toString() >> undefined ^ ~-3) < ((null ^ -1) == "number" <= "b")] = "foo" ^ "bar")) !== 24..toString() * 22)) { c = 1 + c, ([ , 0 ].length === 2 & undefined) % (this == "c") && /[a2][^e]+$/ << false < (25 ^ null); } case 1 === 1 ? a : b: c = 1 + c, (a_1 && (a_1[a++ + 25] ^= (-4 != "a") + ("function", "undefined"))) <= (b_2 = 2 ^ -0) << "object" % {}; L21449: for (var brake54 = 5; (c = 1 + c, ((null && "bar") ^ null === 23..toString()) >= ("foo" != "b" == "undefined" >> 24..toString())) && brake54 > 0; --brake54) { c = 1 + c, (b_1 && (b_1[a++ + ((c = 1 + c, b_1 = "foo" >>> null & 23..toString() + NaN & (this >= undefined & "c" % "undefined")) || a || 3).toString()] = -1 || (c = c + 1, 25))) / (23..toString() - 24..toString() && 22 < 24..toString()); } } } while ((c = c + 1) + (a_1 && a_1.undefined) && --brake43 > 0); } break; default: c = c + 1; case (c = c + 1) + (typeof f1 == "function" && --_calls_ >= 0 && f1()): break; case !function Infinity() { switch ((c = c + 1) + (typeof f1 == "function" && --_calls_ >= 0 && f1())) { case a++ + delete a: { return c = 1 + c, (this || this || 22 - 22) ^ (b_1 && (b_1.a |= ("undefined" | []) <= ([ , 0 ].length === 2 == ""))); } case b--: var bar = (c = 1 + c, ("a" == 5 === (c = c + 1, [])) % (("b" | "b") <= (/[a2][^e]+$/ ^ Infinity))); { } break; default: if (c = 1 + c, ("number" != "object" ^ [] >> -0) & ((0 | 1) ^ -2 === -3)) { c = 1 + c, void ((b_1 %= ("b", 24..toString())) <= "c" + -2); } else { c = 1 + c, (1 == 1) / (5, "number") !== (-0 % -2 != true >= 3); } case (c = c + 1) + ~a: var bar_2; switch (c = 1 + c, -(([ , 0 ].length === 2 && -0) !== ~-2)) { case c = 1 + c, b_2 && (b_2[a++ + (typeof f4 == "function" && --_calls_ >= 0 && f4("function", "object", -5))] = (-25 && this & {}) !== (b_2 = (b_2 /= "bar" >>> 3) / ("undefined" * -5))): ; break; default: ; case c = 1 + c, (b_1 = (22 < "bar") - (5 != "undefined")) || 25 !== -0 !== ({} == "number"): ; break; case c = 1 + c, b_2 += -"function" - ([ , 0 ].length === 2) * "c" >>> (-3 > "" != ("bar" ^ -2)): ; break; } break; } }(): } } finally { var b_2_1 = a++ + typeof parseInt; if ((c = c + 1) + [ [ (c = 1 + c, (b_2 && (b_2[--b + (c = 1 + c, (b_2 && (b_2.in = (false <= Infinity) / (1 ^ null))) === (38..toString() !== 3) % (c = c + 1, "undefined"))] /= (NaN_1 && (NaN_1[c = 1 + c, ("foo" == ([ , 0 ].length === 2) && [ , 0 ].length === 2 != -4) | (this ^ 38..toString()) & (Infinity & [ , 0 ].length === 2)] = 23..toString() & [ , 0 ][1])) ^ ("c" && "number"))) << (3 != 24..toString() | -3 - /[a2][^e]+$/)), (c = 1 + c, void ((b_2 && (b_2.Infinity = ([ , 0 ].length === 2) >> 4)) + (-5 & -5))) ] ][--b + (typeof b_1 == "function" && --_calls_ >= 0 && b_1())]) { switch ([ a++ + ((-4 && -1 && "c" << [ , 0 ][1]) > ((0 && "object") < ([ , 0 ].length === 2) << "object")), , (c = c + 1) + (b_2_1 &= (c = 1 + c, (NaN_1 && (NaN_1.c = (22 | "foo") << (-1 ^ 23..toString()))) - (-2 != this) * (3, 4))), ((c = 1 + c, (Math_1 <<= (24..toString() & "foo") >= ([ , 0 ][1] <= "function")) ^ 4 - -5 != (1 ^ "")) || a || 3).toString() ]) { default: case !a: break; case b_2_1 && b_2_1.foo: if (-(("number" && "foo" || 22 ^ "a") / (a_1 && (a_1.c = "b" || false) || [] != 1))) { L21450: for (var brake70 = 5; (c = 1 + c, (this >= -3 || (Infinity, [ , 0 ].length === 2)) < (this <= this <= [] - "undefined")) && brake70 > 0; --brake70) { c = 1 + c, ((b_1 && (b_1.NaN += /[a2][^e]+$/ != ([ , 0 ].length === 2))) > (b_2 = "undefined" * -2)) >>> ((null || NaN) > "bar" - -0); } } break; case undefined: break; } } else { var NaN_1_1 = function f3(b_2, b_2) { { } { var brake74 = 5; while ((c = 1 + c, (b_1 && (b_1.c *= 25 | [ , 0 ][1])) !== - -5 & (-3 <= -0) + (c = c + 1, "number")) && --brake74 > 0) { c = 1 + c, (38..toString() <= "b", ([ , 0 ].length === 2) - NaN) ^ ((c = c + 1, Infinity) | 2 / "function"); } } }(); } } } } } } var arguments = f0("", a = (0 & this) / (1 + -5) + ("" / "bar" ^ (/[a2][^e]+$/ | Infinity))); console.log(null, a, b, c, Infinity, NaN, undefined);
// uglified code // (beautified) var _calls_ = 10, a = 100, b = 10, c = 0; function f0(NaN_1, b_2) { var Math_1 = void 0, expr4 = ++a; for (var key4 in expr4) { c = 1 + c; b_2 = expr4[key4]; if ([] <= -3 | -5) { switch (a++ + typeof (--b + (b_2 && b_2["function" == typeof f0 && 0 <= --_calls_ && f0(a++ + ("string" == typeof b_1), --b + ("function" == typeof Math_1 && 0 <= --_calls_ && Math_1((c = 1 + c, c += 1, 1), (c = 1 + c, ({} >>> "bar") / (b_2 += "function0")))))]))) { case !b: break; default: try { var b_1 = (c = 1 + (c += 1), b_2 && (b_2.a = -3 % (2 === [ , 0 ].length)), c = 1 + c, void (b_2 && (b_2.var = (2 === [ , 0 ].length | NaN) / (23..toString() ^ []) << 0))); try { for (var brake12 = 5; c = 1 + c, c += 1, (2 === [ , 0 ].length || 24..toString() << -3 && (b_1 -= -0)) && 0 < brake12; --brake12) { c = 1 + c, 23..toString(), c += 1; } } catch (c_2) { c = 1 + c, c = 1 + (c += 1), c += 1, Math_1 && (Math_1.c += 1); } finally { c = 1 + (c = 1 + c), c += 1, c += 1, 23..toString(); } var expr18 = --b + {}; for (var key18 in expr18) { var a = expr18[key18]; throw c = 1 + (c = 1 + c), !0 & (this && -3) ^ "c" < this ^ !0; } } catch (b_2) { for (var brake20 = 5; { null: (c = 1 + c, (b_2 && (b_2.NaN += !1 / (b_2 = 2 | 24..toString()))) >> (-0 ^ "object" < this)), b: (c = 1 + (c += 1), (23..toString() << 2) % !1 | (2 === [ , 0 ].length) >> 0 <= "bar"), Infinity: (c = 1 + (c += 1), NaN | -5 & 24..toString() | !0), 3: (c = 1 + c, -1 / (3 <= []) && NaN) }[--b + ("symbol" == typeof b_2_1)] && 0 < --brake20; ) {} c += 1; } finally { var brake23 = 5; do { var brake24 = 5; do { for (var brake25 = 5; c = 1 + c, Math_1 && (Math_1[c = 1 + c, 38..toString(), !0] <<= 38..toString() || 5), 23..toString(), c = 1 + c, -0 == [] >>> {} && 0 < --brake25; ) {} } while ("object" != typeof foo_1 && 0 < --brake24); } while ({ in: "-5number" << 1 / 0 * this != (3 << this & 0), Infinity: (c = 1 + (c = 1 + c), 0) }[(c += 1) + !(("number" <= 38..toString() <= 0) + (Math_1 && (Math_1[--b + a++] %= (-4 == 24..toString()) < NaN)))] && 0 < --brake23); for (var brake27 = 5; 0 < brake27; --brake27) { for (var brake28 = 5; --b + (c = 1 + (c += 1), (25 != 24..toString()) >>> ("function" >>> (2 === [ , 0 ].length)) < NaN || a || 3).toString() && 0 < --brake28; ) {} } } case b_2 && b_2[(c += 1) + ("function" == typeof f3 && 0 <= --_calls_ && f3(a++ + ((c += 1) + ~b), -5, a++ + b))]: var a_1 = function() { for (var key31 in -0) { return; } a++ && (c += 1); }(); break; case (c += 1) + ("function" == typeof Math_1 && 0 <= --_calls_ && Math_1()): var brake35 = 5; do {} while (a++ + Math_1 && 0 < --brake35); return NaN_1; } } else { try { switch ("function" == typeof Math_1 && 0 <= --_calls_ && Math_1()) { case (c += 1) + a: for (var brake40 = 5; --b + (a++ + !0) && 0 < brake40; --brake40) { for (var brake41 = 5; --b + ("function" == typeof Math_1 && 0 <= --_calls_ && Math_1((c = 1 + c, (b_2 && (b_2[b = a] = 5 ^ NaN == 24..toString())) < (23..toString(), 4)), 4)) && 0 < brake41; --brake41) {} } var brake43 = 5; do { switch (a++ + a--) { case (c += 1) + ("function" == typeof f4 && 0 <= --_calls_ && f4((c = 1 + c, c += 1, 0 == (25 << 24..toString()) + ("object" >>> (2 === [ , 0 ].length))), (c = 1 + c, ({} !== [] ^ !0) >> ((23..toString() == (2 === [ , 0 ].length)) >>> 38..toString() % 5)))): c += 1; for (var brake46 = 5; c = 1 + c, 0 < --brake46; ) { c = 1 + c, c += 1, 24..toString(); } break; case b + 1 - .1 - .1 - .1: for (var brake48 = 5; c = 1 + (c = 1 + c), (!0 <= "b" >> 38..toString()) >>> (!0 === (b_2 += !1)) && 0 < --brake48; ) {} break; default: switch (c = 1 + c, 38..toString() / "c" % !0 & NaN) { default: case c = 1 + c, b_1 = 0 === (1 !== (b_2 && (b_2.in = "c"))): break; case c = 1 + c, (-5 ^ []) + (c += 1, "number") >>> (24..toString() < null) - ({} < 1 / 0): case c = 1 + c, c += 1, 1 == (c += 1, -2 === (NaN_1 && (NaN_1[c = 1 + c, !0] += 5))): } c = 1 + c, !1 < ((b_2 && (b_2[c = 1 + c, (24..toString() >> void 0 ^ 2) < !1] = 0)) !== 22 * 24..toString()) && (c = 1 + c); case a: c = 1 + c, a_1 && (a_1[25 + a++] ^= !0 + "undefined"), b_2 = 2; for (var brake54 = 5; c = 1 + c, (null ^ null === 23..toString()) >= (1 == "undefined" >> 24..toString()) && 0 < brake54; --brake54) { c = 1 + c, b_1 && (b_1[a++ + (c = 1 + c, (b_1 = 0 & 23..toString() + NaN & void 0 <= this & NaN) || a || 3).toString()] = -1), 23..toString() - 24..toString() && 24..toString(); } } } while ((c += 1) + (a_1 && a_1.undefined) && 0 < --brake43); break; default: c += 1; case (c += 1) + ("function" == typeof f1 && 0 <= --_calls_ && f1()): break; case !function() { switch ((c += 1) + ("function" == typeof f1 && 0 <= --_calls_ && f1())) { case a++ + delete a: return c = 1 + c, (this || this || 0) ^ (b_1 && (b_1.a |= ("undefined" | []) <= (2 === [ , 0 ].length == ""))); case b--: c = 1 + c, c += 1; break; default: c = 1 + c, 1 & (!0 ^ [] >> -0) ? (c = 1 + c, b_1 %= 24..toString()) : c = 1 + c; case (c += 1) + ~a: switch (-(1 !== (2 === [ , 0 ].length && -0))) { case c = 1 + (c = 1 + c), b_2 && (b_2[a++ + ("function" == typeof f4 && 0 <= --_calls_ && f4("function", "object", -5))] = (this & {}) != (b_2 = (b_2 /= 0) / NaN)): break; default: case c = 1 + c, (b_1 = -1) || !0 != ("number" == {}): case c = 1 + c, b_2 += NaN - "c" * (2 === [ , 0 ].length) >>> !0: } } }(): } } finally { var b_2_1 = a++ + typeof parseInt; if ((c += 1) + [ [ (c = 1 + c, (b_2 && (b_2[--b + (c = 1 + c, (b_2 && (b_2.in = 1)) === (3 !== 38..toString()) % (c += 1, "undefined"))] /= "number" ^ (NaN_1 && (NaN_1[c = 1 + c, ("foo" == (2 === [ , 0 ].length) && 2 === [ , 0 ].length != -4) | (this ^ 38..toString()) & 1 / 0 & 2 === [ , 0 ].length] = 0 & 23..toString())))) << (3 != 24..toString() | NaN)), (c = 1 + c, void (b_2 && (b_2.Infinity = (2 === [ , 0 ].length) >> 4))) ] ][--b + ("function" == typeof b_1 && 0 <= --_calls_ && b_1())]) { switch ([ a++ + (0 < (2 === [ , 0 ].length) << "object" < 0), , (c += 1) + (b_2_1 &= (c = 1 + c, (NaN_1 && (NaN_1.c = 22 << (-1 ^ 23..toString()))) - 4 * (-2 != this))), (c = 1 + c, !0 ^ (Math_1 <<= !1 <= ("foo" & 24..toString())) || a || 3).toString() ]) { default: case !a: break; case b_2_1 && b_2_1.foo: if (NaN / (a_1 && (a_1.c = "b") || 1 != [])) { for (var brake70 = 5; c = 1 + c, (-3 <= this || 2 === [ , 0 ].length) < (this <= this <= [] - "undefined") && 0 < brake70; --brake70) { c = 1 + c, b_1 && (b_1.NaN += /[a2][^e]+$/ != (2 === [ , 0 ].length)), b_2 = NaN; } } break; case void 0: } } else { (function() { for (var brake74 = 5; c = 1 + c, 5 !== (b_1 && (b_1.c *= 25)) & !0 + (c += 1, "number") && 0 < --brake74; ) { c = 1 + c, 38..toString(), c += 1; } })(); } } } } } var arguments = f0("", a = (0 & this) / -4); console.log(null, a, b, c, 1 / 0, NaN, void 0);
original result: null 0 10 0 Infinity NaN undefined uglified result: null -0 10 0 Infinity NaN undefined minify(options): { "mangle": false }
The text was updated successfully, but these errors were encountered:
fix corner case in evaluate
evaluate
2737431
fixes mishoo#3684
fix corner case in evaluate (#3685)
41a6eb8
fixes #3684
$ uglifyjs test.js -c --reduce-test // reduce test pass 1, iteration 0: 17241 bytes // reduce test pass 1, iteration 25: 7314 bytes // reduce test pass 1, iteration 50: 165 bytes // reduce test pass 1, iteration 75: 161 bytes // reduce test pass 1: 132 bytes // reduce test pass 2: 113 bytes // reduce test pass 3: 89 bytes var b = 0, c = 0; var arguments = a = (0 & this) / -1 + 0; console.log(null, a, b, c, Infinity, NaN, undefined); // output: null 0 0 0 Infinity NaN undefined // minify: null -0 0 0 Infinity NaN undefined // options: {"compress":true,"mangle":false}
Sorry, something went wrong.
Successfully merging a pull request may close this issue.
The text was updated successfully, but these errors were encountered: