Exemple #1
0
        public override void VisitDefaultCase(DefaultCase node)
        {
            WriteKeyword("default");
            WriteToken(":");
            WriteLine();

            Visit(node.Body);
        }
        public void FixCases(SwitchStatement theSwitch)
        {
            DefaultCase   defaultCase = theSwitch.Cases.LastOrDefault() as DefaultCase;
            StatementType defaultCaseStatementType = StatementType.None;
            string        defaultCaseGotoLabel     = null;

            if (defaultCase != null && !TryGetSimpleCaseStatementType(defaultCase, out defaultCaseStatementType, out defaultCaseGotoLabel))
            {
                return;
            }

            HashSet <SwitchCase> casesToRemove = new HashSet <SwitchCase>();
            List <SwitchCase>    allCases      = new List <SwitchCase>(theSwitch.Cases);

            foreach (SwitchCase @case in allCases)
            {
                if (@case == defaultCase)
                {
                    break;
                }

                if (@case.Body == null)
                {
                    casesToRemove.Add(@case);
                    continue;
                }

                StatementType caseStatementType;
                string        caseGotoLabel;
                if (TryGetSimpleCaseStatementType(@case, out caseStatementType, out caseGotoLabel))
                {
                    if (defaultCase != null)
                    {
                        if (defaultCaseStatementType == caseStatementType && defaultCaseGotoLabel == caseGotoLabel)
                        {
                            casesToRemove.Add(@case);
                            break;
                        }
                    }
                    else
                    {
                        if (caseStatementType == StatementType.Break)
                        {
                            casesToRemove.Add(@case);
                            break;
                        }
                    }
                }

                casesToRemove.Clear();
            }

            if (casesToRemove.Count > 0)
            {
                theSwitch.Cases = allCases.Where(@case => !casesToRemove.Contains(@case));
            }
        }
        protected override string ToString(string constructName, HashSet <CFGBlockLogicalConstruct> printedCFGBlocks, LogicalFlowBuilderContext context)
        {
            StringBuilder theBuilder = new StringBuilder(this.GetType().Name);

            theBuilder.AppendLine();
            theBuilder.AppendLine("{");
            IndentAndAppendString(theBuilder, (this.Entry as LogicalConstructBase).ToString(context));
            theBuilder.AppendLine();

            if (DefaultCase != null)
            {
                IndentAndAppendString(theBuilder, DefaultCase.ToString(context));
            }

            foreach (CaseLogicalConstruct @case in ConditionCases)
            {
                IndentAndAppendString(theBuilder, @case.ToString(context));
            }

            foreach (KeyValuePair <List <int>, CFGBlockLogicalConstruct> pair in NonDominatedCFGSuccessors)
            {
                theBuilder.Append("\tCase");
                foreach (int numLabel in pair.Key)
                {
                    theBuilder.Append(" ").Append(numLabel);
                }
                theBuilder.Append(": ").AppendLine(NodeILOffset(context, pair.Value));
            }

            if (DefaultCase == null)
            {
                theBuilder.Append("\tDefault: ").AppendLine(NodeILOffset(context, this.DefaultCFGSuccessor));
            }

            theBuilder.Append("\tFollowNode: ").AppendLine(NodeILOffset(context, this.CFGFollowNode));
            theBuilder.AppendLine("}");

            printedCFGBlocks.UnionWith(this.CFGBlocks);
            return(theBuilder.ToString());
        }
Exemple #4
0
 public virtual void VisitDefaultCase(DefaultCase node)
 {
     Visit(node.Body);
 }
Exemple #5
0
 public virtual ICodeNode VisitDefaultCase(DefaultCase node)
 {
     node.Body = (BlockStatement)Visit(node.Body);
     return(node);
 }
Exemple #6
0
 public virtual void VisitDefaultCase(DefaultCase node)
 {
     this.Visit(node.get_Body());
     return;
 }
 public override ICodeNode VisitDefaultCase(DefaultCase node)
 {
     return(node);
 }
 public virtual ICodeNode VisitDefaultCase(DefaultCase node)
 {
     node.set_Body((BlockStatement)this.Visit(node.get_Body()));
     return(node);
 }