Beispiel #1
0
        public override Evaluation VisitConversionOperatorMemberCref(ConversionOperatorMemberCrefSyntax node)
        {
            node.Parameters?.Accept <Evaluation>(this);
            node.Type?.Accept <Evaluation>(this);

            return(base.VisitConversionOperatorMemberCref(node));
        }
Beispiel #2
0
        public override void VisitConversionOperatorMemberCref(ConversionOperatorMemberCrefSyntax node)
        {
            node.Parameters?.Accept(this);
            node.Type?.Accept(this);

            base.VisitConversionOperatorMemberCref(node);
        }
Beispiel #3
0
        // NOTE: not guaranteed to be a method (e.g. class op_Implicit)
        private ImmutableArray <Symbol> BindConversionOperatorMemberCref(ConversionOperatorMemberCrefSyntax syntax, NamespaceOrTypeSymbol?containerOpt, out Symbol?ambiguityWinner, BindingDiagnosticBag diagnostics)
        {
            const int arity     = 0;
            bool      isChecked = syntax.CheckedKeyword.IsKind(SyntaxKind.CheckedKeyword);

            string memberName;

            if (syntax.ImplicitOrExplicitKeyword.Kind() == SyntaxKind.ImplicitKeyword)
            {
                if (isChecked)
                {
                    // checked form is not supported
                    ambiguityWinner = null;
                    return(ImmutableArray <Symbol> .Empty);
                }

                memberName = WellKnownMemberNames.ImplicitConversionName;
            }
            else if (isChecked)
            {
                memberName = WellKnownMemberNames.CheckedExplicitConversionName;
            }
            else
            {
                memberName = WellKnownMemberNames.ExplicitConversionName;
            }

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

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

            TypeSymbol returnType = BindCrefParameterOrReturnType(syntax.Type, syntax, diagnostics);

            // Filter out methods with the wrong return type, since overload resolution won't catch these.
            sortedSymbols = sortedSymbols.WhereAsArray((symbol, returnType) =>
                                                       symbol.Kind != SymbolKind.Method || TypeSymbol.Equals(((MethodSymbol)symbol).ReturnType, returnType, TypeCompareKind.ConsiderEverything2), returnType);

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

            return(ProcessCrefMemberLookupResults(
                       sortedSymbols,
                       arity,
                       syntax,
                       typeArgumentListSyntax: null,
                       parameterListSyntax: syntax.Parameters,
                       ambiguityWinner: out ambiguityWinner,
                       diagnostics: diagnostics));
        }
Beispiel #4
0
        public override void VisitConversionOperatorMemberCref(ConversionOperatorMemberCrefSyntax node)
        {
            if (!PreVisit(node))
            {
                return;
            }

            node.Parameters?.Accept(this);
            node.Type?.Accept(this);

            base.VisitConversionOperatorMemberCref(node);

            PostVisit(node);
        }
Beispiel #5
0
        // NOTE: not guaranteed to be a method (e.g. class op_Implicit)
        private ImmutableArray <Symbol> BindConversionOperatorMemberCref(ConversionOperatorMemberCrefSyntax syntax, NamespaceOrTypeSymbol containerOpt, out Symbol ambiguityWinner, DiagnosticBag diagnostics)
        {
            const int arity = 0;

            string memberName = syntax.ImplicitOrExplicitKeyword.Kind() == SyntaxKind.ImplicitKeyword
                ? WellKnownMemberNames.ImplicitConversionName
                : WellKnownMemberNames.ExplicitConversionName;

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

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

            TypeSymbol returnType = BindCrefParameterOrReturnType(syntax.Type, syntax, diagnostics);

            // Filter out methods with the wrong return type, since overload resolution won't catch these.
            sortedSymbols = sortedSymbols.WhereAsArray(symbol =>
                                                       symbol.Kind != SymbolKind.Method || ((MethodSymbol)symbol).ReturnType.TypeSymbol == returnType);

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

            return(ProcessCrefMemberLookupResults(
                       sortedSymbols,
                       arity,
                       syntax,
                       typeArgumentListSyntax: null,
                       parameterListSyntax: syntax.Parameters,
                       ambiguityWinner: out ambiguityWinner,
                       diagnostics: diagnostics));
        }
 public override void VisitConversionOperatorMemberCref(ConversionOperatorMemberCrefSyntax node)
 {
     Debug.Fail(node.ToString());
     base.VisitConversionOperatorMemberCref(node);
 }
        // NOTE: not guaranteed to be a method (e.g. class op_Implicit)
        private ImmutableArray<Symbol> BindConversionOperatorMemberCref(ConversionOperatorMemberCrefSyntax syntax, NamespaceOrTypeSymbol containerOpt, out Symbol ambiguityWinner, DiagnosticBag diagnostics)
        {
            const int arity = 0;

            string memberName = syntax.ImplicitOrExplicitKeyword.CSharpKind() == SyntaxKind.ImplicitKeyword
                ? WellKnownMemberNames.ImplicitConversionName
                : WellKnownMemberNames.ExplicitConversionName;

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

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

            TypeSymbol returnType = BindCrefParameterOrReturnType(syntax.Type, syntax, diagnostics);

            // Filter out methods with the wrong return type, since overload resolution won't catch these.
            sortedSymbols = sortedSymbols.WhereAsArray(symbol =>
                symbol.Kind != SymbolKind.Method || ((MethodSymbol)symbol).ReturnType == returnType);

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

            return ProcessCrefMemberLookupResults(
                sortedSymbols,
                arity,
                syntax,
                typeArgumentListSyntax: null,
                parameterListSyntax: syntax.Parameters,
                ambiguityWinner: out ambiguityWinner,
                diagnostics: diagnostics);
        }
Beispiel #8
0
 public override SyntaxNode VisitConversionOperatorMemberCref(ConversionOperatorMemberCrefSyntax node)
 {
     node = (ConversionOperatorMemberCrefSyntax)base.VisitConversionOperatorMemberCref(node);
     Classes.Add(node);
     return(node);
 }
Beispiel #9
0
 public override void VisitConversionOperatorMemberCref(ConversionOperatorMemberCrefSyntax node)
 {
     throw new NotImplementedException();
 }
Beispiel #10
0
 public override void VisitConversionOperatorMemberCref(ConversionOperatorMemberCrefSyntax node)
 {
     Log(node, "Unsupported Syntax !");
 }
Beispiel #11
0
 public override void VisitConversionOperatorMemberCref(ConversionOperatorMemberCrefSyntax node) => base.VisitConversionOperatorMemberCref(node);
Beispiel #12
0
 public TameConversionOperatorMemberCrefSyntax(ConversionOperatorMemberCrefSyntax node)
 {
     Node = node;
     AddChildren();
 }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="node"></param>
 public override sealed void VisitConversionOperatorMemberCref(ConversionOperatorMemberCrefSyntax node)
 {
     this.OnNodeVisited(node, this.type.IsInstanceOfType(node));
     base.VisitConversionOperatorMemberCref(node);
 }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="node"></param>
 public override sealed void VisitConversionOperatorMemberCref(ConversionOperatorMemberCrefSyntax node)
 {
     this.OnNodeVisited(node);
     if (!this.traverseRootOnly) base.VisitConversionOperatorMemberCref(node);
 }
 //
 // Summary:
 //     Called when the visitor visits a ConversionOperatorMemberCrefSyntax node.
 public virtual void VisitConversionOperatorMemberCref(ConversionOperatorMemberCrefSyntax node);