Condition() публичный статический Метод

public static Condition ( System.Linq.Expressions test, System.Linq.Expressions ifTrue, System.Linq.Expressions ifFalse ) : Expression
test System.Linq.Expressions
ifTrue System.Linq.Expressions
ifFalse System.Linq.Expressions
Результат System.Linq.Expressions.Expression
Пример #1
0
 internal override MSA.Expression /*!*/ TransformRead(AstGenerator /*!*/ gen)
 {
     return(AstFactory.Condition(
                _condition.TransformCondition(gen, false),
                gen.TransformStatementsToExpression(_statements),
                gen.TransformStatementsToExpression(_elseClause != null ? _elseClause.Statements : null)
                ));
 }
Пример #2
0
 internal override MSA.Expression /*!*/ TransformRead(AstGenerator /*!*/ gen)
 {
     return(AstFactory.Condition(
                _condition.TransformReadBoolean(gen, true),
                _trueExpression.TransformRead(gen),
                _falseExpression.TransformRead(gen)
                ));
 }
Пример #3
0
 internal override MSA.Expression /*!*/ TransformRead(AstGenerator /*!*/ gen)
 {
     return(AstFactory.Condition(
                Methods.IsFalse.OpCall(AstFactory.Box(_condition.TransformRead(gen))),
                gen.TransformStatementsToExpression(_statements),
                gen.TransformStatementsToExpression(_elseClause != null ? _elseClause.Statements : null)
                ));
 }
Пример #4
0
        internal override MSA.Expression /*!*/ TransformRead(AstGenerator /*!*/ gen)
        {
            MSA.Expression result;
            if (_elseStatements != null)
            {
                // ... else body end
                result = gen.TransformStatementsToExpression(_elseStatements);
            }
            else
            {
                // no else clause => the result of the if-expression is nil:
                result = AstUtils.Constant(null);
            }

            MSA.Expression value;
            if (_value != null)
            {
                value = gen.CurrentScope.DefineHiddenVariable("#case-compare-value", typeof(object));
            }
            else
            {
                value = null;
            }

            if (_whenClauses != null)
            {
                for (int i = _whenClauses.Count - 1; i >= 0; i--)
                {
                    // emit: else (if (condition) body else result)
                    result = AstFactory.Condition(
                        TransformWhenCondition(gen, _whenClauses[i].Comparisons, _whenClauses[i].ComparisonArray, value),
                        gen.TransformStatementsToExpression(_whenClauses[i].Statements),
                        result
                        );
                }
            }

            if (_value != null)
            {
                result = Ast.Block(
                    Ast.Assign(value, Ast.Convert(_value.TransformRead(gen), typeof(object))),
                    result
                    );
            }

            return(result);
        }
Пример #5
0
        internal override MSA.Expression /*!*/ TransformRead(AstGenerator /*!*/ gen)
        {
            MSA.Expression result;

            int i = _elseIfClauses.Count - 1;

            if (i >= 0 && _elseIfClauses[i].Condition == null)
            {
                // ... else body end
                result = gen.TransformStatementsToExpression(_elseIfClauses[i].Statements);
                i--;
            }
            else
            {
                // no else clause => the result of the if-expression is nil:
                result = AstUtils.Constant(null);
            }

            while (i >= 0)
            {
                // emit: else (if (condition) body else result)
                result = AstFactory.Condition(
                    _elseIfClauses[i].Condition.TransformCondition(gen, true),
                    gen.TransformStatementsToExpression(_elseIfClauses[i].Statements),
                    result
                    );
                i--;
            }

            // if (condition) body else result
            return(AstFactory.Condition(
                       _condition.TransformCondition(gen, true),
                       gen.TransformStatementsToExpression(_body),
                       result
                       ));
        }