public virtual void WriteToWithCast(CodeWriter writer, CppTypeName cast) { var exprType = GetResultType(); if (cast == null || cast == EocDataTypes.Auto || cast == exprType) { WriteTo(writer); return; } writer.Write("e::system::cast<"); writer.Write(cast.ToString()); writer.Write(">("); WriteTo(writer); writer.Write(")"); }
public virtual void WriteToWithCast(CodeWriter writer, CppTypeName cast) { var exprType = GetResultType(); if (cast == null || cast == ProjectConverter.CppTypeName_SkipCheck || cast == exprType) { WriteTo(writer); return; } writer.Write("e::system::cast<"); writer.Write(cast.ToString()); writer.Write(">("); WriteTo(writer); writer.Write(")"); }
public override void WriteTo(CodeWriter writer) { if (Mask) { writer.AddCommentLine(CommentOnStart); using (writer.NewBlock()) { Block.WriteTo(writer); } writer.AddCommentLine(CommentOnEnd); return; } var hasVar = Var != null; var varPrefix = C.AllocTempVar(); var varForCount = $"{varPrefix}_count"; var varForIndex = $"{varPrefix}_index"; var typeName = $"decltype({varForCount})"; CppTypeName expectedType = null; writer.AddCommentLine(CommentOnStart); writer.NewLine(); if (hasVar) { expectedType = Var.GetResultType(); typeName = expectedType.ToString(); writer.Write(typeName); writer.Write(" "); } else { writer.Write("auto "); } writer.Write(varForCount); writer.Write(" = "); Count.WriteToWithCast(writer, expectedType); writer.Write(";"); writer.NewLine(); writer.Write(typeName); writer.Write(" "); writer.Write(varForIndex); writer.Write(" = 1"); writer.Write(";"); writer.NewLine(); writer.Write("for ("); if (hasVar) { C.WriteLetExpression(writer, Var, () => { writer.Write(varForIndex); }); } writer.Write("; "); writer.Write(varForIndex); writer.Write(" <= "); writer.Write(varForCount); writer.Write("; "); if (hasVar) { C.WriteLetExpression(writer, Var, () => { writer.Write("++"); writer.Write(varForIndex); }); } else { writer.Write(varForIndex); writer.Write("++"); } writer.Write(")"); using (writer.NewBlock()) { Block.WriteTo(writer); } writer.AddCommentLine(CommentOnEnd); }