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; } }
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); } }