private static ExpressionSyntax caseExpression(SwitchLabelSyntax label, ExpressionSyntax control, out bool isDefault) { isDefault = label.Keyword.Kind() == SyntaxKind.DefaultKeyword; var caseLabel = label as CaseSwitchLabelSyntax; if (caseLabel != null) { var result = caseLabel.Value; if (result is BinaryExpressionSyntax) { var expr = result as BinaryExpressionSyntax; if (expr.Left.IsMissing) { return(CSharp.BinaryExpression(expr.Kind(), control, expr.Right)); } return(expr); } return(CSharp.BinaryExpression(SyntaxKind.EqualsExpression, control, result)); } Debug.Assert(isDefault); return(null); }
private static ExpressionSyntax CreateOrExpression(List <ExpressionSyntax> cases) { Debug.Assert(cases.Count >= 2); var result = CSharp.BinaryExpression(SyntaxKind.LogicalOrExpression, cases[0], cases[1]); for (int i = 2; i < cases.Count; i++) { result = CSharp.BinaryExpression(SyntaxKind.LogicalOrExpression, result, cases[i]); } return(result); }
private static ExpressionSyntax BinaryExpression(ParserRuleContext node) { if (node.ChildCount == 1) { return(Expression(node.GetRuleContext <ParserRuleContext>(0))); } Debug.Assert(node.ChildCount == 3); var left = visitNode(node.GetRuleContext <ParserRuleContext>(0)); var right = visitNode(node.GetRuleContext <ParserRuleContext>(1)); SyntaxKind kind; var op = GetBinaryOperator(node.children[1].GetText(), out kind); return(CSharp.BinaryExpression(kind, left, op, right)); }