Beispiel #1
0
        public static SourceLocalSymbol MakeLocal(
            Symbol containingSymbol,
            Binder binder,
            RefKind refKind,
            TypeSyntax typeSyntax,
            SyntaxToken identifierToken,
            LocalDeclarationKind declarationKind,
            EqualsValueClauseSyntax initializer = null)
        {
            Debug.Assert(declarationKind != LocalDeclarationKind.ForEachIterationVariable);
            if (initializer == null)
            {
                ArgumentSyntax argument;
                if (ArgumentSyntax.IsIdentifierOfOutVariableDeclaration(identifierToken, out argument))
                {
                    if (argument.Type.IsVar)
                    {
                        return(new PossibleOutVarLocalSymbol(containingSymbol, binder, refKind, typeSyntax, identifierToken, declarationKind));
                    }
                }

                return(new SourceLocalSymbol(containingSymbol, binder, refKind, typeSyntax, identifierToken, declarationKind));
            }

            return(new LocalWithInitializer(containingSymbol, binder, refKind, typeSyntax, identifierToken, initializer, declarationKind));
        }
Beispiel #2
0
            public PossibleOutVarLocalSymbol(
                Symbol containingSymbol,
                Binder binder,
                RefKind refKind,
                TypeSyntax typeSyntax,
                SyntaxToken identifierToken,
                LocalDeclarationKind declarationKind)
                : base(containingSymbol, binder, refKind, typeSyntax, identifierToken, declarationKind)
            {
#if DEBUG
                ArgumentSyntax argument;
                Debug.Assert(ArgumentSyntax.IsIdentifierOfOutVariableDeclaration(identifierToken, out argument));
                Debug.Assert(argument.Parent.Parent is ConstructorInitializerSyntax ?
                             binder.ScopeDesignator == argument.Parent :
                             binder.ScopeDesignator.Contains(argument.Parent.Parent));
#endif
            }