Example #1
0
        public override void VisitBinaryOperatorExpression(BinaryOperatorExpression binaryOperatorExpression)
        {
            if (Emitter != null && binaryOperatorExpression.GetParent <SyntaxTree>() != null)
            {
                if (Emitter.Resolver.ResolveNode(binaryOperatorExpression) is OperatorResolveResult rr && rr.Type.IsKnownType(KnownTypeCode.Boolean))
                {
                    var count = AwaitExpressions.Count;
                    var idx   = InsertPosition;

                    base.VisitBinaryOperatorExpression(binaryOperatorExpression);

                    if (AwaitExpressions.Count > count && (
                            binaryOperatorExpression.Operator == BinaryOperatorType.BitwiseAnd ||
                            binaryOperatorExpression.Operator == BinaryOperatorType.BitwiseOr ||
                            binaryOperatorExpression.Operator == BinaryOperatorType.ConditionalOr ||
                            binaryOperatorExpression.Operator == BinaryOperatorType.ConditionalAnd))
                    {
                        AwaitExpressions.Insert(idx > -1 ? idx : 0, binaryOperatorExpression);
                    }

                    return;
                }
            }

            base.VisitBinaryOperatorExpression(binaryOperatorExpression);
        }
Example #2
0
 private void Add(AstNode node)
 {
     if (InsertPosition >= 0)
     {
         AwaitExpressions.Insert(InsertPosition++, node);
     }
     else
     {
         AwaitExpressions.Add(node);
     }
 }
Example #3
0
        public override void VisitConditionalExpression(ConditionalExpression conditionalExpression)
        {
            var count = AwaitExpressions.Count;
            var idx   = InsertPosition;

            base.VisitConditionalExpression(conditionalExpression);

            if (AwaitExpressions.Count > count)
            {
                AwaitExpressions.Insert(idx > -1 ? idx : 0, conditionalExpression);
            }
        }