示例#1
0
        public void PreParseExpression(ParseContext context)
        {
            //var pl = context.Current;
            Condition.PreParseExpression(context);
            context.AddLevel();

            foreach (var line in ThenCodeLines)
            {
                line.PreParseExpression(context);
            }

            context.RemoveLevel();

            if (ElseCodeLines.Count > 0)
            {
                context.AddLevel();

                foreach (var line in ElseCodeLines)
                {
                    line.PreParseExpression(context);
                }

                context.RemoveLevel();
            }
        }
示例#2
0
        public Expression ToExpression(ParseContext context)
        {
            var conditionExpression = Condition.ToExpression(context);

            context.AddLevel();

            var thenLine       = new List <Expression>();
            var listOfThenVars = new List <ParameterExpression>();

            foreach (var line in ThenCodeLines)
            {
                var expLine = line.ToExpression(context);

                var createVariable = line as CreateVariable;
                if (createVariable != null)
                {
                    listOfThenVars.Add((ParameterExpression)expLine);
                    expLine = createVariable.DefaultInitialize(context);
                }
                thenLine.Add(expLine);
            }
            var thenBlock = Expression.Block(listOfThenVars.ToArray(), thenLine);

            context.RemoveLevel();

            var elseLine = new List <Expression>();

            if (ElseCodeLines.Count > 0)
            {
                context.AddLevel();
                var listOfElseVars = new List <ParameterExpression>();
                foreach (var line in ElseCodeLines)
                {
                    var expLine = line.ToExpression(context);

                    var createVariable = line as CreateVariable;
                    if (createVariable != null)
                    {
                        listOfElseVars.Add((ParameterExpression)expLine);
                        expLine = createVariable.DefaultInitialize(context);
                    }
                    elseLine.Add(expLine);
                }

                context.RemoveLevel();
                var elseBlock = Expression.Block(listOfElseVars, elseLine);
                return(Expression.IfThenElse(conditionExpression, thenBlock, elseBlock));
            }
            return(Expression.IfThen(conditionExpression, thenBlock));
        }
示例#3
0
        public Expression ToExpression(ParseContext context)
        {
            var conditionExpression = Condition.ToExpression(context);

            context.AddLevel();

            var thenLine       = new List <Expression>();
            var listOfThenVars = new List <ParameterExpression>();

            foreach (var line in CodeLines)
            {
                var expLine = line.ToExpression(context);

                var createVariable = line as CreateVariable;
                if (createVariable != null)
                {
                    listOfThenVars.Add((ParameterExpression)expLine);
                    expLine = createVariable.DefaultInitialize(context);
                }
                thenLine.Add(expLine);
            }
            var thenBlock = Expression.Block(listOfThenVars.ToArray(), thenLine);

            context.RemoveLevel();

            LabelTarget label      = Expression.Label(Guid.NewGuid().ToString());
            var         ifThenElse = Expression.IfThenElse(
                conditionExpression,
                thenBlock,
                Expression.Break(label));

            return(Expression.Loop(ifThenElse, label));
        }
示例#4
0
        public Expression ToExpression(ParseContext context)
        {
            var collectionVarExpr = CollectionSourceVar.ToExpression(context); //CollectionExpr

            context.AddLevel();

            //Type itemType = CollectionSourceVar.ParsedType.GetGenericArguments().Single();
            var item        = LoopVar.ToExpression(context) as ParameterExpression;
            var loopContent = new List <Expression>();

            foreach (var line in CodeLines)
            {
                var expLine = line.ToExpression(context);

                var createVariable = line as CreateVariable;
                if (createVariable != null)
                {
                    //listOfThenVars.Add((ParameterExpression)expLine);
                    expLine = createVariable.DefaultInitialize(context);
                }

                loopContent.Add(expLine);
            }
            return(ForEachExpr(collectionVarExpr, item, loopContent.ToArray(), context));
        }
示例#5
0
        public override string ToString()
        {
            var ctx = new ParseContext();

            ctx.AddLevel();
            return(ToString(ctx));
        }
示例#6
0
        public LambdaExpression ToExpression()
        {
            var ctx = new ParseContext();

            ctx.AddLevel();
            return((LambdaExpression)ToExpression(ctx));
        }
示例#7
0
        private void PreParseExpression()
        {
            var ctx = new ParseContext();

            ctx.AddLevel();
            PreParseExpression(ctx);
            ctx.RemoveLevel();
        }
示例#8
0
        public string ToString(ParseContext context)
        {
            var result = "if(" + Condition.ToString(context) + ")\n";

            result += context.Pad + "{\n";
            context.AddLevel();

            foreach (var line in ThenCodeLines)
            {
                var createVariable = line as CreateVariable;
                if (createVariable != null)
                {
                    createVariable.DefaultInitialize(context);
                }
                result += context.Pad + line.ToString(context) + ";\n";
            }

            context.RemoveLevel();
            result += context.Pad + "}";
            if (ElseCodeLines.Count > 0)
            {
                result += context.Pad + "\n";
                result += context.Pad + "else\n";
                result += context.Pad + "{\n";
                context.AddLevel();

                foreach (var line in ElseCodeLines)
                {
                    var createVariable = line as CreateVariable;
                    if (createVariable != null)
                    {
                        createVariable.DefaultInitialize(context);
                    }
                    result += context.Pad + line.ToString(context) + ";\n";
                }

                context.RemoveLevel();
                result += context.Pad + "}";
            }
            return(result);
        }
示例#9
0
        public void PreParseExpression(ParseContext context)
        {
            //var pl = context.Current;
            CollectionSourceVar.PreParseExpression(context);

            LoopVar =
                // CodeLine.CreateVariable(CollectionSourceVar.ParsedType, "loopvar");
                CodeLine.CreateVariable(CollectionSourceVar.ParsedType.GetGenericArguments().Single(), LoopVarName);
            context.AddLevel();
            LoopVar.PreParseExpression(context);
            foreach (var line in CodeLines)
            {
                line.PreParseExpression(context);
            }

            context.RemoveLevel();
        }
示例#10
0
        public string ToString(ParseContext context)
        {
            var result = $"Foreach(var {LoopVarName} in {CollectionSourceVar.ToString(context)})\n";

            result += context.Pad + "{\n";
            context.AddLevel();

            foreach (var line in CodeLines)
            {
                var createVariable = line as CreateVariable;
                createVariable?.DefaultInitialize(context);
                result += context.Pad + line.ToString(context) + ";\n";
            }

            context.RemoveLevel();
            result += context.Pad + "}";
            return(result);
        }