예제 #1
0
파일: Match.cs 프로젝트: afrog33k/Excess
        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);
        }
예제 #2
0
파일: Match.cs 프로젝트: afrog33k/Excess
        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);
        }
예제 #3
0
        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));
        }