示例#1
0
 /// <summary>
 /// Converts this statement to if-then-else form.
 /// </summary>
 /// <returns>semantically equivalent if-then-else form</returns>
 public IfStatement ConvertToIfStatement()
 {
     List<Expression> conds = new List<Expression>();
     foreach (Expression caseExpr in Cases)
     {
         Expression cond = Expression.Equal(Selector, caseExpr);
         conds.Add(cond);
     }
     IfStatement result = new IfStatement();
     result.Conditions.AddRange(conds);
     result.Branches.AddRange(Branches);
     return result;
 }
示例#2
0
 public void AcceptIf(IfStatement stmt)
 {
     throw new NotConvertibleToInlineExpressionException();
 }
示例#3
0
 internal override Statement CloneInternal(CloneContext ctx)
 {
     IfStatement clone = new IfStatement();
     ctx.Map(this, clone);
     foreach (Expression e in Conditions)
         clone.Conditions.Add(e);
     foreach (Statement b in Branches)
         clone.Branches.Add(b.GetClone(ctx));
     return clone;
 }
示例#4
0
 public virtual IfStatement If(Expression cond)
 {
     IfStatement ifstmt = new IfStatement();
     CompoundStatement ifbranch = new CompoundStatement();
     ifstmt.Conditions.Add(cond);
     ifstmt.Branches.Add(ifbranch);
     _cstack.Peek().Statements.Add(ifstmt);
     _cstack.Push(ifbranch);
     _sstack.Push(ifstmt);
     return ifstmt;
 }
示例#5
0
 public void AcceptIf(IfStatement stmt)
 {
     stmt.Branches.Accept(this);
 }
示例#6
0
 public void AcceptIf(IfStatement stmt)
 {
     foreach (Statement s in stmt.Branches)
         s.Accept(this);
     for (int i = 0; i < stmt.Conditions.Count; i++)
         stmt.Conditions[i] = SubstExpression(stmt.Conditions[i]);
 }
示例#7
0
 public void AcceptIf(IfStatement stmt)
 {
     foreach (Expression e in stmt.Conditions)
         e.CheckConsistency();
     foreach (Statement s in stmt.Branches)
         s.Accept(this);
 }
示例#8
0
 public void AcceptIf(IfStatement stmt)
 {
     foreach (Statement branch in stmt.Branches)
     {
         branch.Successor = stmt.Successor;
         branch.Accept(this);
     }
 }
 public void AcceptIf(IfStatement stmt)
 {
     foreach (var cond in stmt.Conditions)
         Resolve(cond);
     foreach (var branch in stmt.Branches)
         branch.Accept(this);
 }
 public void AcceptIf(IfStatement stmt)
 {
     for (int i = 0; i < stmt.Conditions.Count; i++)
     {
         Expression cond = stmt.Conditions[i];
         bool value = (bool)cond.Eval(Evaluator);
         if (value)
         {
             stmt.Branches[i].Accept(this);
             return;
         }
     }
     if (stmt.Branches.Count > stmt.Conditions.Count)
         stmt.Branches.Last().Accept(this);
 }
 public override void AcceptIf(IfStatement stmt)
 {
     Success = false;
 }
示例#12
0
 public void AcceptIf(IfStatement stmt)
 {
     GenerateComments(stmt);
     for (int i = 0; i < stmt.Conditions.Count; i++)
     {
         if (i == 0)
         {
             _tw.Write("if (");
         }
         else
         {
             _tw.Write("elsif (");
         }
         Expression cond = stmt.Conditions[i];
         string strcond = cond.ToString(_vhdg);
         _tw.Write(strcond);
         _tw.WriteLine(") then");
         _tw.Indent++;
         stmt.Branches[i].AcceptIfEnabled(this);
         _tw.Indent--;
     }
     if (stmt.Branches.Count > stmt.Conditions.Count)
     {
         _tw.WriteLine("else");
         _tw.Indent++;
         stmt.Branches.Last().AcceptIfEnabled(this);
         _tw.Indent--;
     }
     _tw.WriteLine("end if;");
 }