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(); }