{"action":"opened","issue":{"url":"https://api.github.com/repos/mishoo/UglifyJS2/issues/2931","repository_url":"https://api.github.com/repos/mishoo/UglifyJS2","labels_url":"https://api.github.com/repos/mishoo/UglifyJS2/issues/2931/labels{/name}","comments_url":"https://api.github.com/repos/mishoo/UglifyJS2/issues/2931/comments","events_url":"https://api.github.com/repos/mishoo/UglifyJS2/issues/2931/events","html_url":"https://github.com/mishoo/UglifyJS2/issues/2931","id":298081316,"number":2931,"title":"bug in `may_throw()`","user":{"login":"alexlamsl","id":1898413,"avatar_url":"https://avatars3.githubusercontent.com/u/1898413?v=4","gravatar_id":"","url":"https://api.github.com/users/alexlamsl","html_url":"https://github.com/alexlamsl","followers_url":"https://api.github.com/users/alexlamsl/followers","following_url":"https://api.github.com/users/alexlamsl/following{/other_user}","gists_url":"https://api.github.com/users/alexlamsl/gists{/gist_id}","starred_url":"https://api.github.com/users/alexlamsl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alexlamsl/subscriptions","organizations_url":"https://api.github.com/users/alexlamsl/orgs","repos_url":"https://api.github.com/users/alexlamsl/repos","events_url":"https://api.github.com/users/alexlamsl/events{/privacy}","received_events_url":"https://api.github.com/users/alexlamsl/received_events","type":"User","site_admin":false},"labels":[{"id":12518135,"url":"https://api.github.com/repos/mishoo/UglifyJS2/labels/bug","name":"bug","color":"fc2929","default":true}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2018-02-18T12:32:30Z","updated_at":"2018-02-18T12:32:30Z","closed_at":null,"author_association":"COLLABORATOR","body":"```js\r\n// original code\r\n// (beautified)\r\nvar _calls_ = 10, a = 100, b = 10, c = 0;\r\n\r\nfunction f0() {\r\n    switch (a = a++ + function() {\r\n        -((([ , 0 ][1] > 22) + (a && (a.c = /[a2][^e]+$/ << 24..toString()))) / ((a && (a[(c = 1 + c,\r\n        (true % NaN <= ([] === [ , 0 ][1])) >>> (\"undefined\" - this ^ {} == 1))] += [] | -1)) <= (true === 2)));\r\n        return;\r\n        --b + !(!\"c\" * (\"a\" | 38..toString()) / ((c = c + 1, [ , 0 ][1]) + (-2 << \"function\")));\r\n        {\r\n            var a = function Math() {\r\n                {\r\n                    var expr6 = b -= a;\r\n                    L22204: for (var key6 in expr6) {\r\n                        switch (c = 1 + c, a && (a.c += -1 - undefined + + -5 > (\"a\" === false === (\"b\" ^ NaN)))) {\r\n                          case c = 1 + c, (~null >> (-0 >> false)) - (a += [ , 0 ][1] < -2) / (a && (a.b >>>= -4 !== Infinity)):\r\n                            ;\r\n\r\n                          case c = 1 + c, a && (a.a = (c = c + 1, -0) / (a && (a[(c = 1 + c, (\"function\" + [ , 0 ][1] | ~this) !== ([ , 0 ].length === 2 != \"number\" != \"a\" >= \"undefined\"))] = Infinity && 5)) ^ 24..toString() == 1 === (1 == -2)):\r\n                            ;\r\n                            break;\r\n\r\n                          case c = 1 + c, \"foo\" == \"undefined\" ^ 4 << this ^ (undefined | this) > (\"undefined\" & -0):\r\n                            ;\r\n                            break;\r\n\r\n                          case c = 1 + c, (\"bar\" >= NaN > (a && (a.Infinity = {} < 5))) << (undefined >> this) % (\"object\" === false):\r\n                            ;\r\n                        }\r\n                    }\r\n                }\r\n                {\r\n                    return (c = c + 1) + (a && a.in);\r\n                }\r\n            }();\r\n        }\r\n    }) {\r\n      case a:\r\n        return (/[a2][^e]+$/ || null) * (-2 ^ 22) << (-4 && -1 && (\"\" && 25));\r\n        {\r\n            return;\r\n            a;\r\n        }\r\n\r\n      case (c = c + 1) + ((\"bar\" === /[a2][^e]+$/) * (-0 <= -0) ^ (\"bar\" != 0) <= -\"foo\"):\r\n        (c = c + 1) + /[abc4]/.test((typeof a == \"function\" && --_calls_ >= 0 && a(-2, --b + (delete a || a || 3).toString(), --b + [ -b, (c = c + 1) + [ (c = 1 + c,\r\n        (a >>= (3 | 1) > (2 || undefined)) !== ((1 && \"\") ^ \"foo\" + Infinity)), (c = 1 + c,\r\n        ((-5 | [ , 0 ][1]) & Infinity << 38..toString()) === undefined % \"object\" >>> (\"a\" ^ \"\")), (c = 1 + c,\r\n        a = false >>> \"number\" >> (2 !== this) >= (a && (a.b += true || \"c\")) / (2 / 25)), (c = 1 + c,\r\n        (true >= 0) >> \"object\" - 1 >>> (23..toString() > NaN) * (24..toString() & -2)) ], {\r\n            Infinity: (c = 1 + c, (NaN, 4) + (a && (a.null += -5 / undefined)) ^ ((a = 2 >>> \"object\") ^ \"c\" <= \"c\")),\r\n            3: (c = 1 + c, (\"number\" * \"undefined\" + (false - \"function\")) % ([ , 0 ][1] << ([ , 0 ].length === 2) >> (-0 == -0))),\r\n            a: (c = 1 + c, (a = 5 % 24..toString()) >= 3 - \"foo\" && (c = c + 1, null) & [ , 0 ][1] == \"undefined\")\r\n        }.undefined, a++ + a++, typeof (c = 1 + c, (-5 & \"number\") >>> (4 & \"number\") <= (5 != \"b\" != -23..toString())) ].c) || b || 5).toString());\r\n        for (var brake12 = 5; [ a++ + delete ((-1 && \"number\") | (a && (a[(c = 1 + c, \"\" * 38..toString() - (2 !== \"object\") << ((25 && -5) == (\"function\" == /[a2][^e]+$/)))] = \"foo\" / 22)),\r\n        ~(\"number\" / 1)), {\r\n            Infinity: a++ + ((c = c + 1) + typeof (c = 1 + c, ~(a && (a.foo = 23..toString() ^ this)) == ((a && (a.foo = false >> 1)) ^ \"undefined\" - 5)) ? (c = c + 1) + undefined : [ (c = 1 + c,\r\n            (a && (a[--b + void b] += 25 !== 38..toString() | true << 25)) < (25 ^ -2) << (\"a\" <= -1)), (c = 1 + c,\r\n            (a && (a[b--] = undefined / 24..toString() / (-0, \"object\"))) * (-0 != \"bar\" ^ (-5 && -1))), (c = 1 + c,\r\n            delete \"\" / (\"foo\" % []) | [] * false / (4, [ , 0 ][1])), (c = 1 + c, \"b\" - ([ , 0 ].length === 2) + (true < \"bar\") < ((this && -3) != \"undefined\" + undefined)) ][(c = 1 + c,\r\n            a >>= (~(23..toString() - 22), (/[a2][^e]+$/ && -5) - (\"a\" >>> 38..toString())))]),\r\n            in: true,\r\n            null: --b,\r\n            3: (c = c + 1) + (typeof arguments_1 === \"undefined\")\r\n        }[--b + {\r\n            0: a && a[(c = 1 + c, (4 ^ 5) % (c = c + 1, 5) >>> (a += 38..toString() !== NaN) % (-3 > undefined))],\r\n            in: typeof (c = 1 + c, (null === NaN || \"foo\" >= 0) < (undefined | \"a\") >>> delete 1),\r\n            \"\\t\": -3,\r\n            c: /[abc4]/.test(((c = 1 + c, a && (a.null = ((a = \"a\" % -4) > (a += (5, \"foo\"))) >> -this * ({} & \"\"))) || b || 5).toString())\r\n        }[a]] ] && brake12 > 0; --brake12) {\r\n            return;\r\n            (c = c + 1) + [ 1 === 1 ? a : b ];\r\n        }\r\n        break;\r\n\r\n      case --b + a:\r\n        break;\r\n\r\n      case (c = c + 1) + [ ~((this !== \"function\" == +24..toString()) - (a && (a.Infinity += (-4 && NaN) > (a && (a.null = false !== 5))))), (c = c + 1) + (a && a[a++ + {\r\n            a: [ a++ + typeof (c = 1 + c, a && (a[(c = 1 + c, (({} && NaN) <= (-0 >= 22)) << ((a = -0 == \"undefined\") <= undefined % -2))] -= NaN && this),\r\n            a = 1 === 1, a && (a[a++ + (a += (c = 1 + c, (c = c + 1, 23..toString() & true) >> !(1 !== -5)))] = ([] && -1) % (-5 * 23..toString()))), typeof (c = 1 + c,\r\n            a && (a[(c = c + 1) + +function() {\r\n                c = 1 + c, (\"c\" == 23..toString()) > (this ^ \"number\") >= (\"undefined\" > this == (c = c + 1,\r\n                -5));\r\n                c = 1 + c, a && (a[typeof f1 == \"function\" && --_calls_ >= 0 && f1(-2, (c = 1 + c,\r\n                (5 && -4) != false >= -4 && (-5 < \"undefined\") << (23..toString() ^ null)), (c = 1 + c,\r\n                (NaN == -1) * (-5 - false) | (25, 38..toString()) === this < \"undefined\"))] = a && (a.Infinity = (\"foo\" !== \"undefined\") - ({} ^ \"undefined\")) && 3 === 0 != 0 >= 0);\r\n                c = 1 + c, (-0 > -4 === (2 === \"undefined\")) + (\"function\" >>> \"foo\" == -1 * Infinity);\r\n            }()] += (-1 && \"function\") <= (true | -5) > ((a && (a.c += \"foo\" != -4)) >= (38..toString() > 24..toString())))), a++ + b-- ]\r\n        }.NaN]) ]:\r\n        {\r\n            var brake17 = 5;\r\n            while (a && --brake17 > 0) {\r\n                return;\r\n                b |= a;\r\n            }\r\n        }\r\n        try {\r\n            {\r\n                {\r\n                    var brake21 = 5;\r\n                    L22205: while (--b + -((4 & -0) != (true | -1) !== (38..toString() | 4) >= (-2 === -0)) && --brake21 > 0) {\r\n                        try {\r\n                            {\r\n                                c = 1 + c, ~(Infinity < -3) << (-3 | {}) * (\"a\" * Infinity);\r\n                                c = 1 + c, a && (a.null = \"function\" >> -4 == (undefined & 25)) || (\"c\" != \"undefined\",\r\n                                a && (a[(c = 1 + c, ((-2, \"function\") ^ {} >= 38..toString()) % (1 % \"undefined\" / (\"a\" === 4)))] |= -1 > 24..toString()));\r\n                            }\r\n                        } catch (c_1) {\r\n                            {\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n                try {\r\n                    {\r\n                        return;\r\n                        (c = c + 1) + ~a;\r\n                    }\r\n                } catch (foo) {\r\n                    try {\r\n                        {\r\n                        }\r\n                    } finally {\r\n                        c = 1 + c, (/[a2][^e]+$/ || \"bar\") === \"\" % -0 & (a && (a.c = -1 !== undefined),\r\n                        [] < -3);\r\n                        c = 1 + c, /[a2][^e]+$/ % 3 >= -3 % true == ((a && (a[(c = 1 + c, ([] ^ \"number\" ^ 23..toString() << -4) != (/[a2][^e]+$/ >>> [] ^ (a && (a[(c = 1 + c,\r\n                        (this === \"c\" != {} / 3) >= ((a -= -2 <= 24..toString()) & false << ([ , 0 ].length === 2)))] += 4 >= 2))))] += 38..toString() / 3)) !== -4 > \"a\");\r\n                    }\r\n                    switch (--b + {\r\n                        \"\\t\": (c = 1 + c, \"\" + 23..toString() === -4 / 22, \"function\" * /[a2][^e]+$/ & (\"bar\" ^ this))\r\n                    }) {\r\n                      case (c = c + 1) + --b:\r\n                        break;\r\n\r\n                      case --b + (0 === 1 ? a : b):\r\n                        c = 1 + c, a && (a.b = (a &= (c = c + 1, /[a2][^e]+$/) + (25 ^ /[a2][^e]+$/)) % ((1 && \"object\") ^ (a[(c = 1 + c,\r\n                        ([] <= 1, -3 >>> \"c\") <= 2 * \"undefined\" << (([ , 0 ].length === 2) >= \"c\"))] = -2 ^ 23..toString())));\r\n                        c = 1 + c, -0 / ([ , 0 ].length === 2) - ([] !== 23..toString()) >= -4 - \"a\" - ([] >= undefined);\r\n                        break;\r\n\r\n                      case a++ + {\r\n                            \"\\t\": (c = 1 + c, (a && (a[(c = 1 + c, (25 ^ /[a2][^e]+$/) << -5 * -1 & (3 >>> Infinity) % (24..toString() ^ -5))] = (NaN,\r\n                            -5)) || false | false) !== delete ({} << NaN)),\r\n                            0: (c = 1 + c, (\"c\" || NaN) - (-2 < -2) ^ (0 + -4 ^ (23..toString() | 0))),\r\n                            undefined: (c = 1 + c, /[a2][^e]+$/ - \"object\" >= this / \"undefined\" >= void 4 * (23..toString() * \"c\")),\r\n                            3: (c = 1 + c, (NaN !== \"\" !== (38..toString() ^ [ , 0 ].length === 2)) >>> (-1 !== 4 === (\"bar\" | -3))),\r\n                            b: (c = 1 + c, (5, -5) << (true == -2) < (a.undefined ^= 5 | Infinity) - (a && (a[(c = 1 + c,\r\n                            a && (a.Infinity = (\"c\" && [ , 0 ].length === 2) > (Infinity || 4) == (a = this + /[a2][^e]+$/ >> (c = c + 1,\r\n                            1))))] += -3 == true)))\r\n                        }.undefined:\r\n                        c = 1 + c, (true == null) / (undefined | -1) !== (\"function\" && \"number\") >= (\"a\" != 3);\r\n                        break;\r\n\r\n                      case a++:\r\n                        c = 1 + c, (null & 4 | true - -5) > (false >>> null) * (-5 === 25);\r\n                        break;\r\n                    }\r\n                }\r\n                \"number\";\r\n            }\r\n        } catch (c) {\r\n            {\r\n                var brake41 = 5;\r\n                L22206: while (typeof f0 == \"function\" && --_calls_ >= 0 && f0((c = c + 1) + (a &= --b + (typeof a_1 === \"crap\"))) && --brake41 > 0) {\r\n                    var expr42 = (c = c + 1) + (b_1 && (b_1[(c = c + 1) + {\r\n                        1.5: (c = 1 + c, ([] && 25) <= \"undefined\" >>> -0 | (-4 <= \"a\") % (NaN === 24..toString()))\r\n                    }.in] = ([] == \"foo\" ^ 5 % 1) * (Infinity !== \"a\" != [] << \"function\")));\r\n                    for (var key42 in expr42) {\r\n                        c = 1 + c;\r\n                        var b_1 = expr42[key42];\r\n                        {\r\n                            var brake43 = 5;\r\n                            do {\r\n                                c = c + 1;\r\n                            } while ((c = c + 1) + (typeof b_1 == \"function\" && --_calls_ >= 0 && b_1() || 0).toString()[[].a] && --brake43 > 0);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            for (var brake45 = 5; (c = c + 1) + ({} || a || 3).toString() && brake45 > 0; --brake45) {\r\n                if ((c = c + 1) + [ a++ + a--, [ (c = 1 + c, (b_1 && (b_1[(c = 1 + c, (2 <= \"undefined\" || (b_1 = -1 % 22)) << (true - -1 >>> (24..toString() || this)))] = /[a2][^e]+$/ >> \"object\")) + (\"function\" === this) < (undefined ^ \"object\") * (\"b\" << 23..toString())) ].Infinity, b--, --b + (typeof f1 == \"function\" && --_calls_ >= 0 && f1({}, \"foo\", (c = 1 + c,\r\n                b_1 += (23..toString() ^ 22) >>> (b_1 && (b_1[(c = 1 + c, (Infinity > 2) >>> ([] && 0) >= (4 >> [ , 0 ][1] < \"undefined\" * \"b\"))] |= null || true)) <= (/[a2][^e]+$/ | 22) - ([] < 1)))) ][(c = c + 1) + []]) {\r\n                    var brake47 = 5;\r\n                    while (function a() {\r\n                        c = 1 + c, \"undefined\" < -2 > (\"object\" != 38..toString()) || (b_1 = (23..toString() ^ NaN) === (\"number\" === true));\r\n                    } && --brake47 > 0) {}\r\n                } else {\r\n                    var expr50 = (--b + ~((b_1 && (b_1[(c = 1 + c, (b_1 && (b_1.Infinity = (true, 3))) / (1 | undefined) >>> ((b_1 = \"a\" & null) || [ , 0 ][1] / \"undefined\"))] %= \"b\" | \"b\")) <= (-5 ^ true) <= (b_1 -= (true == \"c\") >> delete \"b\")) || a || 3).toString();\r\n                    for (var key50 in expr50) {\r\n                        c = 1 + c;\r\n                        var Math = expr50[key50];\r\n                        continue;\r\n                    }\r\n                }\r\n            }\r\n        } finally {\r\n            switch ((c = c + 1) + (typeof b_1 == \"function\" && --_calls_ >= 0 && b_1())) {\r\n              case --b + {\r\n                    a: a++ + {\r\n                        in: (c = 1 + c, void \"object\" ^ -5 < ([ , 0 ].length === 2) ^ (c = c + 1, 0 > \"a\")),\r\n                        1.5: (c = 1 + c, (3 | [], 24..toString() * /[a2][^e]+$/) !== 22 >> \"b\" < 5 + /[a2][^e]+$/),\r\n                        \"\": (c = 1 + c, ((null, \"a\") !== 2 <= \"foo\") / ((3 > \"number\") << (c = c + 1, 1))),\r\n                        \"\\t\": (c = 1 + c, (24..toString() >= Infinity, null || 25) & (b_1 && (b_1.foo = +38..toString() >> (\"number\" << this)))),\r\n                        c: (c = 1 + c, (\"foo\" !== undefined || 38..toString() != \"foo\") ^ (-0 === \"\") >>> 4 - 38..toString())\r\n                    }.undefined,\r\n                    c: +((2 & [ , 0 ][1] ^ (b_1 && (b_1.null = {} || Infinity))) !== \"b\" % false > true % false)\r\n                }:\r\n                {}\r\n                break;\r\n\r\n              case --b + {\r\n                    b: 1 === 1 ? a : b,\r\n                    0: b_1 && b_1.c,\r\n                    1.5: b = a\r\n                }.in:\r\n                {\r\n                    var brake54 = 5;\r\n                    do {\r\n                        {\r\n                            c = 1 + c, (0 == {}) > (\"function\" && true) > (false !== \"bar\") / (this && 2);\r\n                        }\r\n                    } while (--b + {\r\n                        set NaN(undefined) {\r\n                            this.Infinity *= \"a\" >= 4;\r\n                        },\r\n                        NaN: (c = 1 + c, c = c + 1, -4 - Infinity | 0 * \"number\"),\r\n                        a: (c = 1 + c, (4 != 0) >> (1 >> NaN) | \"c\" % NaN >= (b_1 && (b_1.Infinity = 2 >>> \"a\"))),\r\n                        in: (c = 1 + c, b_1 && (b_1[a++ + 24..toString()] += (b_1 -= (\"a\" & \"object\") === (b_1 && (b_1[(c = 1 + c,\r\n                        (Infinity <= 1) % (/[a2][^e]+$/ ^ 4) >> ((NaN ^ NaN) & -1 !== this))] = /[a2][^e]+$/ != 38..toString()))) != -2 < 0 < \"object\" - -4)),\r\n                        var: (c = 1 + c, (38..toString() && this) - void /[a2][^e]+$/ !== -0 << \"b\" >> (5 >>> [ , 0 ][1]))\r\n                    }[a++ + (1 === 1 ? a : b)] && --brake54 > 0);\r\n                }\r\n                break;\r\n\r\n              case typeof f1 == \"function\" && --_calls_ >= 0 && f1(NaN, this, (c = c + 1) + (b += a)):\r\n                {\r\n                    return (--b + {\r\n                        var: (c = 1 + c, b_1 && (b_1.foo = {} - 22 >= (/[a2][^e]+$/ && 4) >= (\"foo\" - -1 && 25 ^ \"number\"))),\r\n                        Infinity: (c = 1 + c, (\"c\" + this == ([ , 0 ].length === 2 === \"function\")) >= ((\"b\" | 38..toString()) >= (NaN != 3))),\r\n                        a: (c = 1 + c, (24..toString() + \"number\") % (null | Infinity) && (b_1 && (b_1.null *= NaN | \"b\")) !== (b_1 && (b_1[(c = 1 + c,\r\n                        ((38..toString() === 1) << (undefined, 23..toString())) - (b_1 && (b_1.NaN += (\"c\" >> false) - ({} != 3))))] >>>= 5 >= []))),\r\n                        foo: (c = 1 + c, (\"foo\" ^ [ , 0 ][1]) === (b_1 >>= {} << 0) != (22 * 1 && {} << 25)),\r\n                        \"-2\": (c = 1 + c, (0 !== -4) <= (-3, -4) != \"bar\" + -4 <= \"object\" >>> 5)\r\n                    } || 7).toString()[(c = c + 1) + b--];\r\n                }\r\n                break;\r\n\r\n              case (c = c + 1) + [ b_1 && b_1.c, b = a ].length:\r\n                break;\r\n            }\r\n            {\r\n                var brake58 = 5;\r\n                while ((c = c + 1) + (typeof f1 == \"function\" && --_calls_ >= 0 && f1(-2, 0, !function NaN_2() {}())) && --brake58 > 0) {\r\n                    c = c + 1;\r\n                }\r\n            }\r\n        }\r\n        break;\r\n    }\r\n    {\r\n        var a_2 = function f1(foo_2) {\r\n            L22207: for (var brake61 = 5; (a++ + !function() {}() ? !function() {\r\n                var bar = void ((foo_2 = ([ , 0 ].length === 2) >= {}) >> (\"b\" >= ([ , 0 ].length === 2)) <= (void 25 <= -5 * ([ , 0 ].length === 2))), foo = --b + [ (c = 1 + c,\r\n                (38..toString() - \"object\" ^ (\"a\", \"number\")) >> ((-4 == ([ , 0 ].length === 2)) >>> (\"number\" << -5))), (c = 1 + c,\r\n                \"undefined\" < \"a\" == (b_1 = {} >> 4), 0 < -0 !== (b_1 && (b_1.var += -0 + 1))) ];\r\n            }() : b |= a) && brake61 > 0; --brake61) {\r\n                for (var brake64 = 5; b_1 && (b_1.b = (\"number\" & this && (c = c + 1, \"object\"),\r\n                (foo_2 && (foo_2.in -= 3 << this)) >>> (-4 >= 5))) && brake64 > 0; --brake64) {\r\n                    if (function bar() {\r\n                        {\r\n                            var brake66 = 5;\r\n                            do {\r\n                                c = 1 + c, (\"c\" - true, NaN ^ 5) === 0 + \"number\" + (false == 24..toString());\r\n                            } while ((c = 1 + c, (b_1 && (b_1.c &= (/[a2][^e]+$/ & \"object\") * (\"a\" < false))) <= (\"number\" / false,\r\n                            false | 24..toString())) && --brake66 > 0);\r\n                        }\r\n                        c = 1 + c, (foo_2 && (foo_2[(c = c + 1) + (foo_2 = (c = 1 + c, (-1 == /[a2][^e]+$/) >>> (\"foo\" >= \"object\") >> ([ , 0 ][1] + undefined > (b_1 && (b_1.undefined += 4 < 24..toString())))))] += (c = c + 1,\r\n                        \"c\") && (c = c + 1, 23..toString()))) + ([] !== null) / (NaN / {});\r\n                        for (var brake69 = 5; (c = 1 + c, (foo_2 && (foo_2[a++ + (typeof bar === \"special\")] += -3 % 25 | 1 - 3)) | ~(c = c + 1,\r\n                        \"undefined\")) && brake69 > 0; --brake69) {\r\n                            c = 1 + c, -1 / NaN + (c = c + 1, 1) ^ 4 % Infinity << (\"bar\" == \"b\");\r\n                        }\r\n                    }) {\r\n                        return;\r\n                        --b;\r\n                    }\r\n                }\r\n            }\r\n            return;\r\n        }();\r\n    }\r\n}\r\n\r\nvar Math_1 = f0();\r\n\r\nconsole.log(null, a, b, c, Infinity, NaN, undefined);\r\n```\r\n```js\r\n// uglified code\r\n// (beautified)\r\nvar _calls_ = 10, a = 100, b = 10, c = 0;\r\n\r\nfunction f0() {\r\n    switch (a = a++ + function() {}) {\r\n      case a:\r\n        return 0;\r\n\r\n      case (c += 1) + 0:\r\n        c += 1, (\"function\" == typeof a && --_calls_ >= 0 && a(-2, --b + (delete a || a || 3).toString(), --b + [ -b, (c += 1) + [ (c = 1 + c,\r\n        0 != (a >>= !0)), (c = 1 + c, !0), (c = 1 + c, a = 0 >> (2 !== this) >= (a && (a.b += !0)) / .08), (c = 1 + c,\r\n        1) ], {\r\n            Infinity: (c = 1 + c, 4 + (a && (a.null += NaN)) ^ !0 ^ (a = 2)),\r\n            3: (c = 1 + c, NaN),\r\n            a: (c = 1 + c, (a = 5) >= NaN && !1 & (c += 1, null))\r\n        }.undefined, a++ + a++, (c = 1 + c, typeof !0) ].c) || b || 5).toString();\r\n        for (var n = 5; ++a && (a[(c = 1 + c, -1)] = NaN), (c += 1) + (c = 1 + c, typeof (~(++a && (a.foo = \"23\" ^ this)) == (NaN ^ (a && (a.foo = 0))))) ? c += 1 : (c = 1 + c,\r\n        a && (a[--b + void 0] += 33554433), c = 1 + c, a && (a[b--] = NaN), c = 1 + (c = 1 + (c = 1 + c)),\r\n        a >>= -5), --b, c += 1, --b, a && a[(c = 1 + c, 1 % (c += 1, 5) >>> (a += !0) % !1)],\r\n        (c = 1 + (c = 1 + c), a && (a.null = ((a = NaN) > (a += \"foo\")) >> 0 * -this) || b || 5).toString(),\r\n        n > 0; --n) {\r\n            return;\r\n        }\r\n        break;\r\n\r\n      case --b + a:\r\n        break;\r\n\r\n      case (c += 1) + [ ~((\"function\" !== this == 24) - (a && (a.Infinity += NaN > (a && (a.null = !0))))), (c += 1) + (a && a[a++ + {\r\n            a: [ a++ + (c = 1 + c, a && (a[(c = 1 + c, !1 << ((a = !1) <= NaN))] -= NaN), a = !0,\r\n            typeof (a && (a[a++ + (a += (c = 1 + c, c += 1, 1))] = -1))), (c = 1 + c, typeof (a && (a[(c += 1) + +function() {\r\n                c = 1 + c, c = 1 + (c += 1), a && (a[\"function\" == typeof f1 && --_calls_ >= 0 && f1(-2, (c = 1 + c,\r\n                0), (c = 1 + c, -0 | \"38\" === this < \"undefined\"))] = a && (a.Infinity = 1) && !0),\r\n                c = 1 + c;\r\n            }()] += !1 > ((a && (a.c += !0)) >= !0)))), a++ + b-- ]\r\n        }.NaN]) ]:\r\n        for (var t = 5; a && --t > 0; ) {\r\n            return;\r\n        }\r\n        try {\r\n            for (var f = 5; --b - 0 && --f > 0; ) {\r\n                try {\r\n                    c = 1 + (c = 1 + c), a && (a.null = !0) || a && (a[(c = 1 + c, NaN)] |= !1);\r\n                } catch (c) {}\r\n            }\r\n            try {\r\n                return;\r\n            } catch (n) {\r\n                switch (c = 1 + c, a && (a.c = !0), c = 1 + c, a && (a[(c = 1 + c, 1879048192 != (0 ^ (a && (a[(c = 1 + c,\r\n                (\"c\" === this != NaN) >= (0 & (a -= !0)))] += !0))))] += \"38\" / 3), --b + {\r\n                    \"\\t\": (c = 1 + c, NaN & (\"bar\" ^ this))\r\n                }) {\r\n                  case (c += 1) + --b:\r\n                    break;\r\n\r\n                  case --b + b:\r\n                    c = 1 + c, a && (a.b = (a &= /[a2][^e]+$/ + 25) % (\"object\" ^ (a[(c = 1 + (c += 1),\r\n                    !1)] = -23))), c = 1 + c;\r\n                    break;\r\n\r\n                  case a++ + [ (c = 1 + c, a && (a[(c = 1 + c, 0)] = -5)), c = 1 + c, (c = 1 + c, NaN >= this / \"undefined\" >= NaN), c = 1 + c, (c = 1 + c,\r\n                    a.undefined ^= 5, a && (a[(c = 1 + c, a && (a.Infinity = 0 == (a = this + /[a2][^e]+$/ >> (c += 1,\r\n                    1))))] += !1)) ][2]:\r\n                  case a++:\r\n                    c = 1 + c;\r\n                }\r\n            }\r\n        } catch (c) {\r\n            for (var i = 5; \"function\" == typeof f0 && --_calls_ >= 0 && f0((c += 1) + (a &= --b + (\"crap\" == typeof a_1))) && --i > 0; ) {\r\n                var o = (c += 1) + (e && (e[(c += 1) + {\r\n                    1.5: (c = 1 + c, 0)\r\n                }.in] = 0));\r\n                for (var r in o) {\r\n                    c = 1 + c;\r\n                    for (var e = o[r], N = 5; c += 1, (c += 1) + (\"function\" == typeof e && --_calls_ >= 0 && e() || 0).toString()[[].a] && --N > 0; ) {}\r\n                }\r\n            }\r\n            for (var s = 5; (c += 1) + ({} || a || 3).toString() && s > 0; --s) {\r\n                if ((c += 1) + [ a++ + a--, [ (c = 1 + c, (e && (e[(c = 1 + c, (e = -1) << 0)] = 0)) + (\"function\" === this) < 0) ].Infinity, b--, --b + (\"function\" == typeof f1 && --_calls_ >= 0 && f1({}, \"foo\", (c = 1 + c,\r\n                e += 1 >>> (e && (e[(c = 1 + c, !0)] |= !0)) <= 21))) ][(c += 1) + []]) {\r\n                    for (var l = 5; function() {\r\n                        c = 1 + c, e = !1;\r\n                    } && --l > 0; ) {}\r\n                } else {\r\n                    var u = (--b + ~((e && (e[(c = 1 + c, (e && (e.Infinity = 3)) / 1 >>> ((e = 0) || NaN))] %= 0)) <= -6 <= (e -= 0)) || a || 3).toString();\r\n                    for (var h in u) {\r\n                        c = 1 + c, u[h];\r\n                    }\r\n                }\r\n            }\r\n        } finally {\r\n            switch ((c += 1) + (\"function\" == typeof e && --_calls_ >= 0 && e())) {\r\n              case --b + {\r\n                    a: a++ + {\r\n                        in: (c = 1 + c, 1 ^ (c += 1, !1)),\r\n                        1.5: (c = 1 + c, !0),\r\n                        \"\": (c = 1 + c, !0 / (!1 << (c += 1, 1))),\r\n                        \"\\t\": (c = 1 + c, 25 & (e && (e.foo = 38 >> (\"number\" << this)))),\r\n                        c: (c = 1 + c, 1)\r\n                    }.undefined,\r\n                    c: +(!1 !== (0 ^ (e && (e.null = {} || 1 / 0))))\r\n                }:\r\n                break;\r\n\r\n              case --b + {\r\n                    b: a,\r\n                    0: e && e.c,\r\n                    1.5: b = a\r\n                }.in:\r\n                for (var v = 5; --b + {\r\n                    set NaN(c) {\r\n                        this.Infinity *= !1;\r\n                    },\r\n                    NaN: (c = 1 + (c = 1 + c), c += 1, 0),\r\n                    a: (c = 1 + c, 0 | NaN >= (e && (e.Infinity = 2))),\r\n                    in: (c = 1 + c, e && (e[a++ + \"24\"] += 0 != (e -= 0 === (e && (e[(c = 1 + c, 0 >> (0 & -1 !== this))] = !0))))),\r\n                    var: (c = 1 + c, this - void 0 != 0)\r\n                }[a++ + a] && --v > 0; ) {}\r\n                break;\r\n\r\n              case \"function\" == typeof f1 && --_calls_ >= 0 && f1(NaN, this, (c += 1) + (b += a)):\r\n                return (\"\" + (--b + {\r\n                    var: (c = 1 + c, e && (e.foo = !1)),\r\n                    Infinity: (c = 1 + c, (\"c\" + this == 0) >= !0),\r\n                    a: (c = 1 + c, NaN),\r\n                    foo: (c = 1 + c, 0 == (e >>= 0) != 0),\r\n                    \"-2\": (c = 1 + c, !1)\r\n                } || 7))[(c += 1) + b--];\r\n\r\n              case (c += 1) + [ e && e.c, b = a ].length:\r\n            }\r\n            for (var y = 5; (c += 1) + (\"function\" == typeof f1 && --_calls_ >= 0 && f1(-2, 0, !0)) && --y > 0; ) {\r\n                c += 1;\r\n            }\r\n        }\r\n    }\r\n    !function(n) {\r\n        for (var t = 5; (a++ + !0 ? (n = !1, --b, c = 1 + (c = 1 + c), !void ((e = 0) && (e.var += 1))) : b |= a) && t > 0; --t) {\r\n            for (var f = 5; e && (e.b = (\"number\" & this && (c += 1), (n && (n.in -= 3 << this)) >>> !1)) && f > 0; --f) {\r\n                if (function() {\r\n                    for (var t = 5; c = 1 + (c = 1 + c), (e && (e.c &= 0)) <= 24 && --t > 0; ) {}\r\n                    c = 1 + c, n && (n[(c += 1) + (c = 1 + c, n = 0 >> (NaN > (e && (e.undefined += !0))))] += (c += 1,\r\n                    c += 1, \"23\"));\r\n                    for (var f = 5; c = 1 + c, (n && (n[a++ + !1] += -1)) | (c += 1, -1) && f > 0; --f) {\r\n                        c = 1 + c, c += 1;\r\n                    }\r\n                }) {\r\n                    return;\r\n                }\r\n            }\r\n        }\r\n    }();\r\n}\r\n\r\nvar Math_1 = f0();\r\n\r\nconsole.log(null, a, b, c, 1 / 0, NaN, void 0);\r\n```\r\n```js\r\noriginal result:\r\nnull '100function(){F100001N\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007\\u0007}' 10 0 Infinity NaN undefined\r\n\r\nuglified result:\r\nnull '100function(){}' 10 0 Infinity NaN undefined\r\n\r\nminify(options):\r\n{\r\n  \"compress\": {\r\n    \"keep_fargs\": false,\r\n    \"passes\": 1000000,\r\n    \"sequences\": 1000000,\r\n    \"unsafe\": true,\r\n    \"unsafe_Function\": true,\r\n    \"unsafe_math\": true,\r\n    \"unsafe_proto\": true,\r\n    \"unsafe_regexp\": true\r\n  }\r\n}\r\n\r\nError testing options.compress.if_return\r\nTypeError: Cannot read property 'may_throw' of null\r\n    at AST_Return.eval [as may_throw] (eval at <anonymous> (UglifyJS2\\tools\\node.js:21:1), <anonymous>:8135:31)\r\n    at any (eval at <anonymous> (UglifyJS2\\tools\\node.js:21:1), <anonymous>:8073:29)\r\n    at AST_Call.eval [as may_throw] (eval at <anonymous> (UglifyJS2\\tools\\node.js:21:1), <anonymous>:8102:20)\r\n    at AST_VarDef.eval [as may_throw] (eval at <anonymous> (UglifyJS2\\tools\\node.js:21:1), <anonymous>:8166:31)\r\n    at collapse (eval at <anonymous> (UglifyJS2\\tools\\node.js:21:1), <anonymous>:6382:47)\r\n    at tighten_body (eval at <anonymous> (UglifyJS2\\tools\\node.js:21:1), <anonymous>:6204:17)\r\n    at eval (eval at <anonymous> (UglifyJS2\\tools\\node.js:21:1), <anonymous>:8277:9)\r\n    at AST_BlockStatement.eval [as optimize] (eval at <anonymous> (UglifyJS2\\tools\\node.js:21:1), <anonymous>:5527:23)\r\n    at Compressor.before (eval at <anonymous> (UglifyJS2\\tools\\node.js:21:1), <anonymous>:5510:24)\r\n    at AST_BlockStatement.eval [as transform] (eval at <anonymous> (UglifyJS2\\tools\\node.js:21:1), <anonymous>:2982:35)\r\nSuspicious compress options:\r\n  dead_code\r\n  evaluate\r\n  passes\r\n  reduce_vars\r\n  side_effects\r\n  unused\r\n```"}}
{"actor":{"display_login":"alexlamsl"}}