Ejemplo n.º 1
0
        public override void VisitOperatorMemberCref(OperatorMemberCrefSyntax node)
        {
            if (!PreVisit(node))
            {
                return;
            }

            node.Parameters?.Accept(this);

            base.VisitOperatorMemberCref(node);

            PostVisit(node);
        }
Ejemplo n.º 2
0
        // NOTE: not guaranteed to be a method (e.g. class op_Addition)
        // NOTE: constructor fallback logic applies
        private ImmutableArray <Symbol> BindOperatorMemberCref(OperatorMemberCrefSyntax syntax, NamespaceOrTypeSymbol?containerOpt, out Symbol?ambiguityWinner, BindingDiagnosticBag diagnostics)
        {
            const int arity = 0;

            CrefParameterListSyntax?parameterListSyntax = syntax.Parameters;
            bool isChecked = syntax.CheckedKeyword.IsKind(SyntaxKind.CheckedKeyword);

            // NOTE: Prefer binary to unary, unless there is exactly one parameter.
            // CONSIDER: we're following dev11 by never using a binary operator name if there's
            // exactly one parameter, but doing so would allow us to match single-parameter constructors.
            SyntaxKind operatorTokenKind = syntax.OperatorToken.Kind();
            string?    memberName        = parameterListSyntax != null && parameterListSyntax.Parameters.Count == 1
                ? null
                : OperatorFacts.BinaryOperatorNameFromSyntaxKindIfAny(operatorTokenKind, isChecked);

            memberName = memberName ?? OperatorFacts.UnaryOperatorNameFromSyntaxKindIfAny(operatorTokenKind, isChecked: isChecked);

            if (memberName == null ||
                (isChecked && !syntax.OperatorToken.IsMissing && !SyntaxFacts.IsCheckedOperator(memberName))) // the operator cannot be checked
            {
                ambiguityWinner = null;
                return(ImmutableArray <Symbol> .Empty);
            }

            ImmutableArray <Symbol> sortedSymbols = ComputeSortedCrefMembers(syntax, containerOpt, memberName, arity, syntax.Parameters != null, diagnostics);

            if (sortedSymbols.IsEmpty)
            {
                ambiguityWinner = null;
                return(ImmutableArray <Symbol> .Empty);
            }

            return(ProcessCrefMemberLookupResults(
                       sortedSymbols,
                       arity,
                       syntax,
                       typeArgumentListSyntax: null,
                       parameterListSyntax: parameterListSyntax,
                       ambiguityWinner: out ambiguityWinner,
                       diagnostics: diagnostics));
        }
Ejemplo n.º 3
0
 public override void VisitOperatorMemberCref(OperatorMemberCrefSyntax node)
 {
     Debug.Fail(node.ToString());
     base.VisitOperatorMemberCref(node);
 }
        // NOTE: not guaranteed to be a method (e.g. class op_Addition)
        // NOTE: constructor fallback logic applies
        private ImmutableArray<Symbol> BindOperatorMemberCref(OperatorMemberCrefSyntax syntax, NamespaceOrTypeSymbol containerOpt, out Symbol ambiguityWinner, DiagnosticBag diagnostics)
        {
            const int arity = 0;

            CrefParameterListSyntax parameterListSyntax = syntax.Parameters;

            // NOTE: Prefer binary to unary, unless there is exactly one parameter.
            // CONSIDER: we're following dev11 by never using a binary operator name if there's
            // exactly one parameter, but doing so would allow us to match single-parameter constructors.
            SyntaxKind operatorTokenKind = syntax.OperatorToken.CSharpKind();
            string memberName = parameterListSyntax != null && parameterListSyntax.Parameters.Count == 1
                ? null
                : OperatorFacts.BinaryOperatorNameFromSyntaxKindIfAny(operatorTokenKind);
            memberName = memberName ?? OperatorFacts.UnaryOperatorNameFromSyntaxKindIfAny(operatorTokenKind);

            if (memberName == null)
            {
                ambiguityWinner = null;
                return ImmutableArray<Symbol>.Empty;
            }

            ImmutableArray<Symbol> sortedSymbols = ComputeSortedCrefMembers(syntax, containerOpt, memberName, arity, syntax.Parameters != null, diagnostics);

            if (sortedSymbols.IsEmpty)
            {
                ambiguityWinner = null;
                return ImmutableArray<Symbol>.Empty;
            }

            return ProcessCrefMemberLookupResults(
                sortedSymbols,
                arity,
                syntax,
                typeArgumentListSyntax: null,
                parameterListSyntax: parameterListSyntax,
                ambiguityWinner: out ambiguityWinner,
                diagnostics: diagnostics);
        }
Ejemplo n.º 5
0
        public override void VisitOperatorMemberCref(OperatorMemberCrefSyntax node)
        {
            node.Parameters?.Accept(this);

            base.VisitOperatorMemberCref(node);
        }
Ejemplo n.º 6
0
 public override void VisitOperatorMemberCref(OperatorMemberCrefSyntax node)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 7
0
 public override void VisitOperatorMemberCref(OperatorMemberCrefSyntax node)
 {
     Log(node, "Unsupported Syntax !");
 }
 public TameOperatorMemberCrefSyntax(OperatorMemberCrefSyntax node)
 {
     Node = node;
     AddChildren();
 }
Ejemplo n.º 9
0
 public override void VisitOperatorMemberCref(OperatorMemberCrefSyntax node)
 {
     base.VisitOperatorMemberCref(node);
 }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="node"></param>
 public override sealed void VisitOperatorMemberCref(OperatorMemberCrefSyntax node)
 {
     this.OnNodeVisited(node, this.type.IsInstanceOfType(node));
     base.VisitOperatorMemberCref(node);
 }
Ejemplo n.º 11
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="node"></param>
 public override sealed void VisitOperatorMemberCref(OperatorMemberCrefSyntax node)
 {
     this.OnNodeVisited(node);
     if (!this.traverseRootOnly) base.VisitOperatorMemberCref(node);
 }
Ejemplo n.º 12
0
 public override SyntaxNode VisitOperatorMemberCref(OperatorMemberCrefSyntax node)
 {
     node = (OperatorMemberCrefSyntax)base.VisitOperatorMemberCref(node);
     Classes.Add(node);
     return(node);
 }
Ejemplo n.º 13
0
        public override Evaluation VisitOperatorMemberCref(OperatorMemberCrefSyntax node)
        {
            node.Parameters?.Accept <Evaluation>(this);

            return(base.VisitOperatorMemberCref(node));
        }
 //
 // Summary:
 //     Called when the visitor visits a OperatorMemberCrefSyntax node.
 public virtual void VisitOperatorMemberCref(OperatorMemberCrefSyntax node);