Example #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;
            }
        }
Example #2
0
        private void Build(FixedSet <IEntityDeclarationSyntax> entities)
        {
            // Process all classes first because they may be referenced by functions etc.
            foreach (var @class in entities.OfType <IClassDeclarationSyntax>())
            {
                BuildClassSymbol(@class);
            }

            // Now resolve all other symbols (class declarations will already have symbols and won't be processed again)
            foreach (var entity in entities)
            {
                BuildEntitySymbol(entity);
            }
        }