Beispiel #1
0
 internal override Statement CloneInternal(CloneContext ctx)
 {
     CaseStatement clone = new CaseStatement()
     {
         Selector = this.Selector
     };
     ctx.Map(this, clone);
     foreach (Expression e in Cases)
         clone.Cases.Add(e);
     foreach (Statement b in Branches)
         clone.Branches.Add(b.GetClone(ctx));
     return clone;
 }
Beispiel #2
0
 public void AcceptCase(CaseStatement stmt)
 {
     stmt.Branches.Accept(this);
 }
Beispiel #3
0
 public void AcceptCase(CaseStatement stmt)
 {
     throw new NotConvertibleToInlineExpressionException();
 }
Beispiel #4
0
 public virtual void GotoCase(CaseStatement cstmt, int index)
 {
     GotoCaseStatement gstmt = new GotoCaseStatement()
     {
         CaseStmt = cstmt,
         TargetIndex = index
     };
     _cstack.Peek().Statements.Add(gstmt);
 }
Beispiel #5
0
 public virtual void Break(CaseStatement stmt)
 {
     BreakCaseStatement bstmt = new BreakCaseStatement()
     {
         CaseStmt = stmt,
     };
     _cstack.Peek().Statements.Add(bstmt);
 }
Beispiel #6
0
 public void Break(CaseStatement stmt)
 {
     Contract.Requires(stmt != null);
 }
Beispiel #7
0
 public virtual CaseStatement Switch(Expression selector)
 {
     CaseStatement cstmt = new CaseStatement()
     {
         Selector = selector
     };
     _cstack.Peek().Statements.Add(cstmt);
     _sstack.Push(cstmt);
     return cstmt;
 }
Beispiel #8
0
 public void AcceptCase(CaseStatement stmt)
 {
     stmt.Selector.CheckConsistency();
     foreach (Expression e in stmt.Cases)
         e.CheckConsistency();
     foreach (Statement s in stmt.Branches)
         s.Accept(this);
 }
Beispiel #9
0
 public void GotoCase(CaseStatement cstmt, int index)
 {
     Contract.Requires(cstmt != null);
     Contract.Requires(index >= 0);
     // Might not be valid during statement construction
     //Contract.Requires(index < cstmt.Cases.Count);
 }
Beispiel #10
0
 public void AcceptCase(CaseStatement stmt)
 {
     foreach (Statement branch in stmt.Branches)
     {
         branch.Successor = stmt.Successor;
         branch.Accept(this);
     }
 }
Beispiel #11
0
 public void AcceptCase(CaseStatement stmt)
 {
     foreach (Statement s in stmt.Branches)
         s.Accept(this);
     for (int i = 0; i < stmt.Cases.Count; i++)
         stmt.Cases[i] = SubstExpression(stmt.Cases[i]);
     stmt.Selector = SubstExpression(stmt.Selector);
 }
 public void AcceptCase(CaseStatement stmt)
 {
     Resolve(stmt.Selector);
     foreach (var caseex in stmt.Cases)
         Resolve(caseex);
     foreach (var branch in stmt.Branches)
         branch.Accept(this);
 }
 public void AcceptCase(CaseStatement stmt)
 {
     object sel = stmt.Selector.Eval(Evaluator);
     for (int i = 0; i < stmt.Cases.Count; i++)
     {
         if (sel.Equals(stmt.Cases[i]))
         {
             stmt.Branches[i].Accept(this);
             return;
         }
     }
     if (stmt.Branches.Count > stmt.Cases.Count)
         stmt.Branches.Last().Accept(this);
     return;
 }
 public override void AcceptCase(CaseStatement stmt)
 {
     Success = false;
 }
Beispiel #15
0
 public void AcceptCase(CaseStatement stmt)
 {
     if (stmt.Label != null)
     {
         _tw.Write(stmt.Label + ": ");
     }
     GenerateComments(stmt);
     _tw.Write("case ");
     _tw.Write(stmt.Selector.ToString(_vhdg));
     _tw.WriteLine(" is");
     _tw.Indent++;
     for (int i = 0; i < stmt.Cases.Count; i++)
     {
         _tw.Write("when ");
         _tw.Write(stmt.Cases[i].ToString(_vhdg));
         _tw.WriteLine(" =>");
         _tw.Indent++;
         stmt.Branches[i].AcceptIfEnabled(this);
         _tw.Indent--;
     }
     if (stmt.Branches.Count > stmt.Cases.Count)
     {
         _tw.WriteLine("when others =>");
         _tw.Indent++;
         stmt.Branches.Last().AcceptIfEnabled(this);
         _tw.Indent--;
     }
     _tw.Indent--;
     _tw.WriteLine("end case;");
 }
Beispiel #16
0
            //      ALTERADA
            public void AcceptCase(CaseStatement stmt)
            {
                if (stmt.Label != null)
                {
                    _tw.WriteLine(stmt.Label + ": ");
                }

                GenerateComments(stmt);

                if (stmt.Selector.ResultType.CILType.IsEnum || stmt.Selector.ResultType.CILType.Equals(typeof(int)) || stmt.Selector.ResultType.CILType.Equals(typeof(char)))
                {
                    _tw.Write("switch(");
                    _tw.Write(stmt.Selector.ToString(_SysCg));
                    _tw.WriteLine(") {");
                    _tw.Indent++;                

                    for (int i = 0; i < stmt.Cases.Count; i++)
                    {
                        _tw.Write("case ");
                        _tw.Write(stmt.Cases[i].ToString(_SysCg));
                        _tw.WriteLine(" :");
                        _tw.Indent++;
                        stmt.Branches[i].AcceptIfEnabled(this);
                        if (!stmt.Branches[i].ToString().Contains("BREAK CASE"))
                            _tw.WriteLine("break;");
                        _tw.Indent--;
                    }

                    if (stmt.Branches.Count > stmt.Cases.Count)
                    {
                        _tw.WriteLine("default: ");
                        _tw.Indent++;
                        stmt.Branches.Last().AcceptIfEnabled(this);
                        _tw.Indent--;
                    }
                _tw.Indent--;
                _tw.WriteLine("}");
                }
                else
                {
                    IfStatement aux = stmt.ConvertToIfStatement();
                   
                    AcceptIf(aux);                   
                }
            }