Пример #1
0
        private void ResolveReachabilityAnnotation(
            CodeFile file,
            IParameterNameSyntax syntax,
            FixedSet <BindingSymbol> symbols)
        {
            switch (syntax)
            {
            default:
                throw ExhaustiveMatch.Failed(syntax);

            case INamedParameterNameSyntax syn:
            {
                var referencedSymbol = symbols.OfType <VariableSymbol>().SingleOrDefault(s => s.Name == syn.Name);
                syn.ReferencedSymbol.Fulfill(referencedSymbol);
                if (referencedSymbol is null)
                {
                    diagnostics.Add(NameBindingError.CouldNotBindParameterName(file, syn.Span));
                }
            }
            break;

            case ISelfParameterNameSyntax syn:
            {
                var referencedSymbol = symbols.OfType <SelfParameterSymbol>().SingleOrDefault();
                syn.ReferencedSymbol.Fulfill(referencedSymbol);
                if (referencedSymbol is null)
                {
                    diagnostics.Add(NameBindingError.CouldNotBindParameterName(file, syn.Span));
                }
            }
            break;
            }
        }
Пример #2
0
        private static Reference?ToSymbolReference(
            IParameterNameSyntax paramName,
            IReadOnlyDictionary <Name, ParameterReference> parameters)
        {
            switch (paramName)
            {
            default:
                throw ExhaustiveMatch.Failed(paramName);

            case INamedParameterNameSyntax syn:
                if (syn.Name != null && parameters.TryGetValue(syn.Name, out var reference))
                {
                    return(reference);
                }
                return(null);

            case ISelfParameterNameSyntax _:
                return(SelfParameterReference.Instance);
            }
        }