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