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);
 }
Example #4
0
 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(".如果结束");
 }
Example #5
0
 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);
 }