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(); }
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(); }
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); } }
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 ); } }
// Crossing these kinds of control flow boundaries would change behavior. public void VisitNode(JSSwitchCase sc) { VisitChildren(sc); }