private static LoweredSwitchStatement LowerSwitchStatement(SwitchAnalysis analysis, Type testValueType, bool hoistNull = false)
        {
            var res = new LoweredSwitchStatement();

            var defaultCase = analysis.DefaultCase;

            if (defaultCase != null)
            {
                Debug.Assert(analysis.IsDefaultLonely);
                Debug.Assert(defaultCase.TestValues.Count == 1);

                var body = MakeBlock(defaultCase.Statements);
                res.DefaultCase = body;
            }

            var otherCases = analysis.OtherCases;
            var n          = otherCases.Count;

            var cases = new List <SwitchCase>(n);

            for (var i = 0; i < n; i++)
            {
                var @case = ConvertSwitchCase(otherCases[i], testValueType);
                cases.Add(@case);
            }

            var nullCase = analysis.NullCase;

            if (nullCase != null)
            {
                if (hoistNull)
                {
                    Debug.Assert(analysis.IsNullLonely);
                    Debug.Assert(nullCase.TestValues.Count == 1);

                    var body = MakeBlock(nullCase.Statements);
                    res.NullCase = body;
                }
                else
                {
                    var @case = ConvertSwitchCase(nullCase, testValueType);
                    cases.Add(@case);
                }
            }

            res.Cases = cases;

            return(res);
        }
        private static LoweredSwitchStatement LowerSwitchStatement(SwitchAnalysis analysis, Type testValueType, bool hoistNull = false)
        {
            var res = new LoweredSwitchStatement();

            var defaultCase = analysis.DefaultCase;

            if (defaultCase != null)
            {
                Debug.Assert(analysis.IsDefaultLonely);
                Debug.Assert(defaultCase.TestValues.Count == 1);

                var body = MakeBlock(defaultCase.Statements);
                res.DefaultCase = body;
            }

            var otherCases = analysis.OtherCases;
            var n = otherCases.Count;

            var cases = new List<SwitchCase>(n);
            for (var i = 0; i < n; i++)
            {
                var @case = ConvertSwitchCase(otherCases[i], testValueType);
                cases.Add(@case);
            }

            var nullCase = analysis.NullCase;

            if (nullCase != null)
            {
                if (hoistNull)
                {
                    Debug.Assert(analysis.IsNullLonely);
                    Debug.Assert(nullCase.TestValues.Count == 1);

                    var body = MakeBlock(nullCase.Statements);
                    res.NullCase = body;
                }
                else
                {
                    var @case = ConvertSwitchCase(nullCase, testValueType);
                    cases.Add(@case);
                }
            }

            res.Cases = cases;

            return res;
        }