示例#1
0
        public void VisitNode(JSSwitchCase sc)
        {
            SwitchCaseStack.Push(sc);
            AbsoluteJumpsSeenStack.Add(0);

            if (TraceLevel >= 3)
            {
                if (sc.Values != null)
                {
                    Console.WriteLine("// Entering case {0}", sc.Values.FirstOrDefault());
                }
                else
                {
                    Console.WriteLine("// Entering case default");
                }
            }

            VisitChildren(sc);

            if (TraceLevel >= 3)
            {
                Console.WriteLine("// Exiting case");
            }

            AbsoluteJumpsSeenStack.RemoveAt(AbsoluteJumpsSeenStack.Count - 1);
            SwitchCaseStack.Pop();
        }
示例#2
0
        public void VisitNode(JSSwitchCase sc)
        {
            SwitchCaseStack.Push(sc);

            if (TraceLevel >= 2)
            {
                if (sc.Values != null)
                {
                    Console.WriteLine("// Entering case {0}", sc.Values.FirstOrDefault());
                }
                else
                {
                    Console.WriteLine("// Entering case default");
                }
            }

            VisitChildren(sc);

            if (TraceLevel >= 2)
            {
                Console.WriteLine("// Exiting case");
            }

            SwitchCaseStack.Pop();
        }
示例#3
0
        public void VisitNode(JSBlockStatement bs)
        {
            CheckForFallthrough(bs);

            var lastSwitchCase = LastSwitchCase;
            var thisSwitchCase = ParentSwitchCase;

            LastSwitchCase = thisSwitchCase;

            var parentLabelGroup = ParentNode as JSLabelGroupStatement;
            var isControlFlow    = bs.IsControlFlow ||
                                   (thisSwitchCase != lastSwitchCase) ||
                                   (parentLabelGroup != null);

            if (TraceLevel >= 3)
            {
                Console.WriteLine("// Entering block {0}", bs.Label ?? bs.GetType().Name);
            }

            if (isControlFlow)
            {
                if (TraceLevel >= 3)
                {
                    Console.WriteLine("// Count reset");
                }

                AbsoluteJumpsSeenStack.Add(0);
            }

            BlockStack.Push(bs);

            VisitChildren(bs);

            BlockStack.Pop();

            if (TraceLevel >= 3)
            {
                Console.WriteLine("// Exiting block");
            }

            if (isControlFlow)
            {
                AbsoluteJumpsSeenStack.RemoveAt(AbsoluteJumpsSeenStack.Count - 1);
            }
        }
示例#4
0
        private void EmitSwitchCase(JSSwitchCase sc)
        {
            Formatter.ConditionalNewLine();

            if (sc.IsDefault)
            {
                Formatter.WriteRaw("(;default;) ");
                Visit(sc.Body);
            }
            else if (sc.Values == null)
            {
                throw new Exception("Non-default case with no values");
            }
            else
            {
                for (var i = 0; i < sc.Values.Length - 1; i++)
                {
                    var v = sc.Values[i];
                    Formatter.WriteSExpr(
                        "case",
                        (_) =>
                        EmitCaseValue(v),
                        lineBreakAfter: true
                        );
                }

                var lastValue = sc.Values.Last();
                Formatter.WriteSExpr(
                    "case",
                    (_) => {
                    EmitCaseValue(lastValue);
                    Formatter.NewLine();
                    Formatter.Indent();
                    Visit(sc.Body);
                    Formatter.ConditionalNewLine();
                    Formatter.Unindent();
                },
                    lineBreakAfter: true
                    );
            }
        }
示例#5
0
 // Crossing these kinds of control flow boundaries would change behavior.
 public void VisitNode(JSSwitchCase sc)
 {
     VisitChildren(sc);
 }