TransformStatementsToExpression() private method

private TransformStatementsToExpression ( Statements statements ) : Expression
statements Statements
return System.Linq.Expressions.Expression
コード例 #1
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)
     );
 }
コード例 #2
0
ファイル: IfExpression.cs プロジェクト: ExpertsInside/IronSP
        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
            );
        }
コード例 #3
0
ファイル: UnlessExpression.cs プロジェクト: jschementi/iron
 internal override MSA.Expression/*!*/ TransformRead(AstGenerator/*!*/ gen) {
     return AstFactory.Condition(
         _condition.TransformCondition(gen, false),            
         gen.TransformStatementsToExpression(_statements),
         gen.TransformStatementsToExpression(_elseClause != null ? _elseClause.Statements : null)
     );
 }
コード例 #4
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)
                ));
 }
コード例 #5
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)
                ));
 }
コード例 #6
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);
        }
コード例 #7
0
ファイル: Body.cs プロジェクト: jcteague/ironruby
        internal override MSA.Expression/*!*/ TransformRead(AstGenerator/*!*/ gen) {
            Assert.NotNull(gen);

            if (HasExceptionHandling) {
                MSA.Expression resultVariable = gen.CurrentScope.DefineHiddenVariable("#block-result", typeof(object));

                return AstFactory.Block(
                    TransformExceptionHandling(gen, ResultOperation.Store(resultVariable)),
                    resultVariable
                );

            } else {
                return gen.TransformStatementsToExpression(_statements);
            }
        }
コード例 #8
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
                       ));
        }
コード例 #9
0
ファイル: Body.cs プロジェクト: yyyyj/ironruby
        internal override MSA.Expression /*!*/ TransformRead(AstGenerator /*!*/ gen)
        {
            Assert.NotNull(gen);

            if (HasExceptionHandling)
            {
                MSA.Expression resultVariable = gen.CurrentScope.DefineHiddenVariable("#block-result", typeof(object));

                return(Ast.Block(
                           TransformExceptionHandling(gen, ResultOperation.Store(resultVariable)),
                           resultVariable
                           ));
            }
            else
            {
                return(gen.TransformStatementsToExpression(_statements));
            }
        }
コード例 #10
0
 internal override MSA.Expression/*!*/ TransformRead(AstGenerator/*!*/ gen) {
     return gen.TransformStatementsToExpression(_statements);
 }
コード例 #11
0
ファイル: CaseExpression.cs プロジェクト: joshholmes/ironruby
        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 = Ast.Constant(null);
            }

            MSA.Expression value;
            if (_value != null) {
                value = gen.CurrentScope.DefineHiddenVariable("#case-compare-value", typeof(object));
            } else {
                value = 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 = AstFactory.Block(
                    Ast.Assign(value, Ast.Convert(_value.TransformRead(gen), typeof(object))),
                    result
                );
            }

            return result;
        }
コード例 #12
0
ファイル: BlockExpression.cs プロジェクト: ltwlf/IronSP
 internal override MSA.Expression /*!*/ TransformRead(AstGenerator /*!*/ gen)
 {
     return(gen.TransformStatementsToExpression(_statements));
 }