public override void WriteTo(CodeWriter writer) { writer.NewLine(); if (Mask) { writer.Write("// "); } writer.Write("if ("); Condition.WriteToWithCast(writer, ProjectConverter.CppTypeName_Bool); writer.Write(")"); writer.AddComment(Comment); using (writer.NewBlock()) { BlockOnTrue.WriteTo(writer); } writer.NewLine(); if (Mask) { writer.Write("// "); } writer.Write("else"); using (writer.NewBlock()) { BlockOnFalse.WriteTo(writer); } }
public override void ProcessSubExpression(Func <EocExpression, EocExpression> processor, bool deep = true) { if (deep) { Condition?.ProcessSubExpression(processor, deep); } if (Condition != null) { Condition = processor(Condition); } BlockOnTrue?.ProcessSubExpression(processor, deep); BlockOnFalse?.ProcessSubExpression(processor, deep); }
public override EocStatement Optimize() { Condition = Condition?.Optimize(); if (Condition.TryGetConstValueWithCast(ProjectConverter.CppTypeName_Bool, out var x)) { if ((bool)x == true) { BlockOnFalse = new EocStatementBlock(C); } else { BlockOnTrue = new EocStatementBlock(C); } } BlockOnTrue = BlockOnTrue?.Optimize() as EocStatementBlock; BlockOnFalse = BlockOnFalse?.Optimize() as EocStatementBlock; return(this); }
public override void ToTextCode(IdToNameMap nameMap, StringBuilder result, int indent = 0) { for (int i = 0; i < indent; i++) { result.Append(" "); } if (Mask) { result.Append("' "); } if (UnexaminedCode == null) { result.Append(".如果 ("); Condition.ToTextCode(nameMap, result, indent); result.Append(")"); } else { result.Append("."); result.Append(UnexaminedCode); } if (Comment != null) { result.Append(" ' "); result.Append(Comment); } result.AppendLine(); BlockOnTrue.ToTextCode(nameMap, result, indent + 1); result.AppendLine(); for (int i = 0; i < indent; i++) { result.Append(" "); } result.AppendLine(".否则"); BlockOnFalse.ToTextCode(nameMap, result, indent + 1); result.AppendLine(); for (int i = 0; i < indent; i++) { result.Append(" "); } result.Append(".如果结束"); }
internal override void WriteTo(MethodCodeDataWriterArgs a) { using (a.NewBlock(1)) { if (UnexaminedCode != null) { new UnexaminedStatement(UnexaminedCode, Mask).WriteTo(a, 0x6B); } else { new ExpressionStatement(new CallExpression(0, 0, new ParamListExpression() { Condition }), Mask, Comment).WriteTo(a, 0x6B); } BlockOnTrue.WriteTo(a); a.ExpressionData.Write((byte)0x50); BlockOnFalse.WriteTo(a); a.ExpressionData.Write((byte)0x51); } a.ExpressionData.Write((byte)0x72); }