Beispiel #1
0
        public override void VisitForStatement(ForStatementSyntax node)
        {
            var forModel = new ForLoopCPPModel()
            {
                Declaration  = Invoke <VariableDeclarationVisitor>(node.Declaration).Data,
                Initializers = node.Initializers.Select(i => Invoke <VariableDeclaratorVisitor>(i).Initializer).ToList(),
                Condition    = Invoke <ExpressionVisitor>(node.Condition).Expression,
                Incrementors = node.Incrementors.Select(i => Invoke <ExpressionVisitor>(i).Expression).ToList()
            };

            using (Context.WithCodeContainer(forModel))
            {
                Visit(node.Statement);
            }
        }
        public override void VisitForLoopCPPModel(ForLoopCPPModel model)
        {
            var declaration  = Invoke <ExpressionBuilder>(model.Declaration).Expression ?? "";
            var initializers = model.Initializers.Select(i => Invoke <ExpressionBuilder>(i).Expression);
            var parts        = new List <string>();

            parts.Add(declaration);
            parts.AddRange(initializers);
            var init = string.Join(", ", parts.Where(p => !string.IsNullOrWhiteSpace(p)));

            var condition    = Invoke <ExpressionBuilder>(model.Condition).Expression ?? "";
            var incrementors = string.Join(", ", model.Incrementors.Select(i => Invoke <ExpressionBuilder>(i).Expression));

            AppendLine($"for({init}; {condition}; {incrementors})");
            OpenBlock();
            VisitChildren(model.Members);
            CloseBlock();
        }