IronPython.Compiler.Ast.WhileStatement.ReduceWorker C# (CSharp) Метод

ReduceWorker() приватный Метод

private ReduceWorker ( bool optimizeDynamicConvert ) : Expression
optimizeDynamicConvert bool
Результат System.Linq.Expressions.Expression
        private MSAst.Expression ReduceWorker(bool optimizeDynamicConvert) {
            // Only the body is "in the loop" for the purposes of break/continue
            // The "else" clause is outside

            ConstantExpression constTest = _test as ConstantExpression;
            if (constTest != null && constTest.Value is int) {
                // while 0: / while 1:
                int val = (int)constTest.Value;
                if (val == 0) {
                    // completely optimize the loop away
                    if (_else == null) {
                        return MSAst.Expression.Empty();
                    } else {
                        return _else;
                    }
                }

                MSAst.Expression test = MSAst.Expression.Constant(true);
                MSAst.Expression res = AstUtils.While(
                    test,
                    _body,
                    _else,
                    _break,
                    _continue
                );

                if (GlobalParent.IndexToLocation(_test.StartIndex).Line != GlobalParent.IndexToLocation(_body.StartIndex).Line) {
                    res = GlobalParent.AddDebugInfoAndVoid(res, _test.Span);
                }

                return res;
            }

            return AstUtils.While(
                GlobalParent.AddDebugInfo(
                    optimizeDynamicConvert ?
                        TransformAndDynamicConvert(_test, typeof(bool)) :
                        GlobalParent.Convert(typeof(bool), Microsoft.Scripting.Actions.ConversionResultKind.ExplicitCast, _test),
                    Header
                ),
                _body,
                _else,
                _break,
                _continue
            );
        }